版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LoadRunner很多使用LoadRunner的测试人员经常两个难题:开发与性能测试分析。本书就是基于帮助测试人员解决这两个问题而编写,致力于使读者学精LoadRunnner这一强大的性能测试工具。全书共分为四部分:篇、基础篇、探索篇、实战篇。第一篇篇的内容包括第1章和第2章,着重于讲解性能测试与LoadRunner的基础理论知识。第二篇基础篇的内容包括第3章至第5章,是LoadRunner的基本使用部分,着重讲解VirtualUserGenerator、Controller、ysis的使用方法。第三篇第1部分 1章性能测试基础知识..性能测试基本概念...什么是性能测试...性能测试应用领域...性能测试常见术语...全面性能测试模型...性能测试策略模型...性能测试用例模型...模型的使用方法...性能测试调整基础...如何做能测试...本章小结...2章LoadRunner基础知识..LoadRunner简介...LoadRunner主要特点...LoadRunner常用术语...LoadRunner工作原理...LoadRunner测试流程...LoadRunner的部署与安装...本章小结...第2部分基础 第3章的录制与开发..VirtualUserGenerator简介...VuGen录制原理...VuGen功能简介...如何选择协议...VuGen录制功能详解...录制参数设置...录制与创建事务... ...录制的基本原则... ...参数化功能...深入集合点...巧用检查点...关联... ...两个常用函数介绍...本章小结...4章场景的创建与执行..Controller简介...场景类型介绍...手动测试场景...面向目标的测试场景...测试场景设计...配置测 ...Generator配置Schedule.集合点配置...IPSpoofer配置...其他设置场景... 试场景...启动测试场景...控制用户与用户组...查看场景与用户状态...控制集合点...查看运行数据图...系统资源...Windows系统资源...Linux/Unix系统资源...本章小结...第5章性 分析.. ...性能分析基础知识...ysis使用基础...一 例子...如何从分析图中发现问题...虚拟用户图...事务图...Web资源图...网页细分图...小结...分析图的处理方法...修改默认配置...合并分析图...自动关联...场景运行比较...ysis分析报告...事务活动报告(ActivityReports)...事务性能报告(PerformanceReports)...HTML与Word报告...本章小结...第3部分探索 第6章用VisualC++增强虚拟用 动 动 VisualC++创建Dll 分析本章小 第7章深入Java虚拟用 7.2.2LoadRunnerJavaAPI.Java算法测试案例...本章小结...8章深入.NET虚拟用户..认识.NET虚拟用户....NET虚拟用户适用范围...安装与配置.NET插件...创建.NET虚拟用户...创建虚拟用户项目...参数、集合点、事务...性能测试应用案例... 器类...创建抽象虚拟用户类...创建抽象并发测试类... ...LoadRunner.NET虚拟用户...案例总结...本章小结...9章LoadRunner特殊协议应用..WindowsSockets协议应用...录制WindowsSockets协 ...增强WindowsSockets协 ...WAP协议应用...WebServices协议应用...WebServices协议简介...录制WebServices协 ...FTP协议应用...本章小结...第4部分实战 第10章电子商务平台测试案 其他事 测试环 测试数 虚拟用 综 风险分 10.610.6本章小结...ALoadRunner性能测试常见问题..BLoadRunner性能测试模板..性能测试计划模板...项目背景简介...测试方案简介...测试环境与资源...项目里程碑...技能培训计划...风险分析...计划结束标准...性能测试用例模板...文档介绍...测试需求分析...性能测试用例...性能测试报告模板...基本信息...测试环境描述...性能测试用例执行分析...综合分析及建议...B.3.5测试经验总结...后记..在作者的另一作品《Web性能测试实战》中,曾经提到过“软件亚健康”这个概念。现 着IT人的生活质量,也 局面 er这样令性能测试工作如虎添翼的性能测试利器。本书将和读者一起深入LoadRunner的 本开发 能开发测 、 要想 是远远不够的。诸如LoadRunner等测试工 nner的强大功能来发现系统存在的问题。首先应该弄清楚学习LoadRunnerLoadRunnerLoadRunner还远远不够,这也是为什么很多 学好LoadRunner的标准是真正能够把LoadRunner应用到实际项目中去,这就要求学习LoadRunner的同时一定要学 能测试相关知识。本书的第1章即为基本的性能测试果要学 2LoadRunnerLoadRunner的工作2-1LoadRunner工作原理,LoadRunner开展工作的基础。本书的第3章、第4章、第5章分别讲解了LoadRunner的VirtualUserGenerator、 结果分析工作。用LoadRunner来开展性能测试,必须要掌握这三大组件的使用。如果连 学习完第3~5章后,可能还有一些读者会问:“我还是不会自己写测试 6~9LoadRunnerLoadRunnerC++、Java、C#语言进行开发以及一些特殊 协议相信通过前面9章的学习,读者已经掌握LoadRunner的精髓了。不过本书不是一本“LoadRunner使用百 全”,接下来就需要读者自己不断地应用与探索LoadRunner了,逐步完成成为一个LoadRunner高手的蜕变过程。会在项目中如何通过LoadRunnerl借助案例体会“全面性能测试模型”GBElll学习如何 ll 篇,包括第1章和第2章,着重于讲解性能测试与LoadRunner的基础理论知识。在第1章中,讲解了性能测试基本概念、全面性能测试模型、性能测试调整第二部分:基础篇,包括第3章至第5章,着重讲解LoadRunner三大组件的使用,是LoadRunner的基本使用部分。在第3章中,主要讲解如何在VirtualUserGenerator中完成代码的录制与开发;第4章讲解如何在Controller中创建与执行场景;第5章中讲 ysis来分析性能 69章,着重讲解LoadRunner章讲解如何用VisualC++来增强虚拟用户;第 10章,结合案例来讲解在具体项目中如何应用来 目中 感谢广大读者对《Web性能测试实战》一书的支持,读者的支持是作者写作的真正动 感谢师 感谢同事 的上一本著作《Web性能测试实战》中,为接近软件性能问题提出位作者共同创作了《LoadRunnerLoadRunner模拟成千上万的用户,很快地帮助用户确认和查找性能问题。但是国 场上却没有任何相关书籍,《LoadRunner《LoadRunnerLoadRunner应用《Web户兰(Melody1.1llLoadRunnerlLoadRunner8lLoadRunnerlLoadRunner100lLoadRunnerITLoadRunner了。不nnnnn ,2006年5 其体现在和Web 点,来获得系统能提供的最大服务级别的测试。例如测试一个Web1.2节的“全面性能测试模型”。l当正常的用户点击率为“1000次/秒”时,运行点击率为“2000次/秒”l运行需要最 l运行可能导致操作系 7×24小时的压力测试。主要指当测试多个用户并同时同一个应用程序、同一个模块或数据记录时是否存中,并发用户往往都是借助工具来进行模拟的,LoadRunner中称之为并发虚拟用户。 重要依据。例如,可以通过不停地调整Oracle的内存参数来进 CPU70%~90%8个小1.2节提出了“全面性能测试ll根 lllll系统的性能瓶颈定位是性能测试最常见的应用领域。借助LoadRunner等工具,可以 系统资源、Web服务器资源等运行数据,与响应时间进行同步Oracle的内存大小与系统自身的业务特点有极大关系,配置不同的数据库,性能表现就会不同;而即使在内存一定的情况下,SGA的分配也会对性能产生很大的 800用户并发,这些都是用户根据自身需求来规划硬件的重要依据。 理。例如 点。例如OA系统统计并发用户数量的经验 OA1000200具中,请求响应时间通常会被称为“TTLB”,即“Timetolastbyte”,意思是从发送一个请为“秒”或“毫秒”1-1所示。1-1Web7个部分组成,即(N1+N2+N3+N4)+(A1+A2+A3)。吞吐率TPS(TransactionPer 是LoadRunner中重要的性能参数指标。点击率(HitPerWebHTTPWeb应用特有的一个指 客户端可能向服务器发出多个HTTP请求。CPU利用率、磁盘利用1.21.2 10501000乃至上万时就变成 试, 模块主要由性能测试策略决定,读者可以参考1.2.2节“性能测试用通常所有的用户不会只使用一个或几个业务模块,一个应用系统的每个功能模块使用同能),又要模拟多用户的“不同”操作(这里的“不同”指很多用户同时对一个或用户实际使用情况的测试,也是性能测试的内容。通常按照用户的实际使用人数比例来模拟各个模板的组合并况。作系统、Web服务器、数据库服务器)性能测试结合起来进行。在通过工具模拟用户操作 一起,在整个性能测试的后期进行。大数据量测试可以理解为特定条件下的业务或组服务器性能测试主要是对数据库、Web服务器、操作系统的测试,目的是通过性能测Wb“全面性能测试模型”3部1部分:性能测试策略模型,这是整个性能测试模型的基础。软件类型决定着性能第2部分:性能测试用例模型,这是整个性能测试模型的 结合测试工具,把以上性能测试的8项内容进一步归纳,形成5类测试用例:lllll测试的用例设计与前三种类型结合起来。例如LoadRunner就可以在进行压力测试的同 3部分:模型的使用方法。本部分内容讨论如何在工作中使用“全面性能测试模 用,例如办公自动化软件、MIS系统等。一般应用类软件多根据实际情况来制定性能测试策略,例如OA系统,既可以早开始,也可以最后进行性能测试,这类软件受用户因素影4类,即高度重视、中等重视、一般重1-1列出了性能测试策略制定的基本原则。1-11-1中可以看出:(1)“系统类软件”、“特殊应用类软件”应该从设计阶段开始进OA系统,仍然要高度测试,甚至根本不关心,对于性能要求较高的软件产品也应按照表1-1的策略来执行性能 表1-2某银行项目测试策略 OA1-3所1-3OA例1-4例 求客户提出了性能方面的需求:要求系统响应时间要加快,可以满足2000个产品类主要用于一些单位信息的发布,用户在50人以下。因此该类软件属于一影响性能测试策略的制定。因此,本节只是基本的参考方案。制定测试策略是十分的基础,决定着性能测试工作的投入。因此,要充分这一工作的重要性,认识到只“性能测试用例模型”是“全面性能测试模型”的内容。限于篇幅和本书主旨,本节仅细的内容,读者可以参考作者的另一本专著《Web性能测试实战》。8“” 1-2独立 块(以简称“ 模”)发性能的重点是试一些统重要块独立运行情况,此可以其理解“单性能试”。只这些决系统能的“ 单元”性能定,后的性测试才意义。 模并发性能试是整性能测工作的 “ 务系统 息llll基于硬件的测试:主要通过各 ll高级服务器性能测试:主要指在特定的硬件条件下,由数据库、Web服务器、操作系统相应领域的专家进行的性能测试。例如,数据库服务器由专门的DBA来 l l ll ll模型具体化原则。模型具体化是指把模型运用到具体的项目中去,这是前面所有指导原“或“”“或“”“”“”“”首先根 l检查应用程序代码:通常情况下,很多程序的性能问题都是“写”出来的。因此对于发现lOracle的大型数据库都需要DBA进行正确的参数调整才能投产;ll检查硬件设置:磁盘速度、内存大小等都是引起瓶颈的原因,因此这些也是分析的重l检查网络:网络负载过重会导致网络 lllCPUI/Olll是大多数用户还是少数用户遇到了问题?如果是少数用户,这几个用户与其他用户的操l系统资 l问题是否集中在某一类模块中?l是客户端还是服务器出现问题?l系统硬件配置是否合理?lllll lll如何 l开发阶段的性能测试实施开发阶段的性能测试主要指软件试运行前的性能测试,即团 l用户现场性能测试的实施用户现场的性能测试有验收测试的“味道”l计算机专业技能计算机领域的专业技能是测试工程师应该必备的一项素质,这是做好IT背景的人也可以从事测试工作,但是一名要想获得3个方面:()“”“本录制与修改、回放测试等)。序。只有能够进试开发,才可以胜任诸如单元测试、集成测试、性能测试等Java、C#、C++之中的一门语言以及相应的开发工 Unix、linux来运行的,这就要求测试人员掌握其基本的操作命令以及相关工具软件的使用。而WebLogic、Websphere等中间件的安装lIT企业从事石油、lIT企业从事石油、l个人素养作为一名优秀的测试工程师,首先要对测试工作 1.5LoadRunner1.5LoadRunner是远远不够的,深入地理解性能测试理念是做 逐步踏入LoadRunner的性能测试世界5.1.1 ysis如 nnnnn5.1 试 第三步 才 应时间过长、系统支持的最大并发用户数过低、系统的应用服务器CPU利用率过高或内存 本节先介绍性能测试分析的基础知识,然后介绍 确 内,由表及里,层层深入”5-1所示。5-1 包括应用服务器和数据库服务器的响应时间。对比Tn和Ts,就很容易知道系统在哪些图5-2客 5-3Buffer性能分 而道不然。即使有了正确的,也不一定能对系统的性能问题进行正确定位。例如,服把工作做透,才能把性能测试工作做好。 ysis对这些 LoadRunner的 ysis是一个独立模块,本节将介绍它的主要功能以及基本使用方法。在后面的5.2节中,将详细介绍如何借助各类数据图表来分析系统的性能问题。 ysis有4种方式:在Controller启动场景前选中其菜单的“Run→AutoLoadysis”;在Controller 图标;在Controller 图标;从开始菜单依次点击“MercuryLoadRunner→Applications→ 前两种方式在打开ysis后会自动分析当前场景的运行结果,后两种方式仅打开ysis应用程序,需要手动选择文件来产生分析图。在测试结束并完成数据收集后,就可以启动ysis打开文件,将其导入Access数据库,然后按照设置的模板打开默认的结果分析图。通常的分5-4所示。利用ysis进行分析的第一步是查看分析概要报告(ysisSummary)5-4述、HTTP响应概述(Web测试)等。 在图5-4所示的 ysis界面中,点击 将进入到图5-5所示的新的分析图 ysis提供的全部分析图。 5-5虚拟用户(Vusers)图虚拟用户图分为运行状态的虚拟用户图、虚拟用户概要图和集合3类。主要借助其查看场景与会话的虚拟用户行为。Errors图Errors图主要有错误统计、每秒错误数量两类。借助Errors图可以发现服务器事务(Transactions)图ysis和事务相关的分析图表有事务综述图、事务平均响应时间图、每秒通过事务数图、每秒通过事务总数图、事务性能图、事务响应时间与负载Web资源(WebResources)图WebWeb服务器的吞吐率图、点击率图、返回的HTTPHTTP网页细分(WebPageBreakdown)图在ControllerAstics→Distribution”5-65-6中同时选中“Enablethefollowingdiagnostics”和“WebPageDiagnostics(MaxAllowedDistribution10%)”复选框。5-6 系统资源(SystemResources)图系统资源图显示在场景运行期间,由联 获得 源的方法,可以参考第3章的相关内容。在5.4节中, ysis分析图 ysis提供的几十个 ysis以外的各种分析工具。例如,可以借助Oracle提供的 与分析工具,也可以借助WebLogic提供的用户是否全部运行,最大运行并发用户数(umRunningVusers)是否与场景设计 CPU的利用率和内存使用情况,尤其要注意查看是否存在内存泄漏问题。这样做是由于很CPU利用率过高或内存不足。CPU、内存、带宽没有出现瓶颈,否则测试结果无效。而待测试服务器,则重点分析测试过程中CPU和内存是否出现了瓶颈:CPU需用)能正常运行,则需要重新设计场景或调整用户加载与退出方式再次进试。对于事务,5-7所示的5-7 可能是测 5-8ysis对虚拟用户和事务提供了非常强大的功能,可以每一个用户及其相关事务的执行情况。这些内容可以在ysis菜单“Reports→CrystalReport”下找到。这5.3节介绍。生成缓存文件导致用户不能正常而产生的错误;5-9查看错误分类统计,作为优化系统的参考。例如Web性能测试,当出现瓶颈时往往需要查看服务器的错误统计信息结果:如果“超时错误”90%以上,可能需要提高硬件配置;Web性能测试。查看Web5.1.3一 例近两年,随着网络的发展,如雨后春笋般出现。尤其一些热门的,拥有巨大的用户群体。如一些知名的宽频,在社会发生热点期间的并发用户数量会达到百万级以上。巨大的并发量对系统的性能提出了非常高的要求。本案例探讨的是一个已经上线的遇到的性能问题,该系统的设计目标是每天00%,导致Oracle数据库发生停止服务的现象。数据库不工作, 发布 门户来欣 1.首先,把数据库的操作分为Insert、Update、Delete、Select四种,分 的结构,可以看出发布系统出问题的可能性不大,因为这是一个成型的产品。因此,问题更可能会出现在的门户或门户与发布系统的接口上。经过进一步的分析,了解到门户用户首页:首页是导航页面,主要操作有查找热点或自己关注的 页面等 用 2.不难看出 设计 5-1硬件配软件配服务器:两台Dell2850CPU:Xeon3.0GB´2操作系统:企业版Windows操作系统:企业版WindowsWeb ysis进行分析,得到了如图5-10的 首页(Index页面)不能 181.8345-1050置后,立刻发现了一个参数配置问题:Oracle数据库的运行模式是“专有服务器模式”!而关于Oracle在服务器模式下,用户连接所需要的全部资源在PGA中进行分配。该内存区为指定私有连接,其他进程不能。连接采用一对一的连接方式,能很快地响应用户的请件的限制比较大。为了克服这种情况,Oracle提供了共享服务器运行模式,即用一个服务 独立场景测试下面是Oracle调整为“共享服务器模式”后的测试实施过程。为了更好地对 从图5-11中可以看出,“Action”事务即打开 页面的平均时间是1.354秒,这是非常好的结果。但是应该注意到:半小时内有超过17万个 务十分艰巨,而半小时内超过17万个 与图5-11的 变大,这是用户数量变大的正常反应;事务通过率85%与82%相比没有太大变化。稍稍5-118005-129005-13找出了三个SQL程序本身的一个原因:SQL语句消耗了大量的数据库时间,其他问题极有可能是语句不合理引起的。主要推理如下:当一些反复执行的SQL语句效率过低时,首先会造成高速缓存I/OI/OCPU。因此整个系统的瓶这两次还有一个奇怪的现象:一方面事务响应时间较快,另一方面却有大量的事务没有响应。仅根据目前的还看不出直接原因。但这也很可能是前面的三个SQL ysis打开图5-14的“事务平均响应时间图”和图5-15的“建立第一个缓冲的 ysis打开图5-14的“事务平均响应时间图”和图5-15的“建立第一个缓冲的5-145-15SQL语句进行优化,然后对系统进SQL语句调整后的测试开发人员优化了SQL语句后,并对900个用户进行并发、持续1.5小时的压力测试,如图5-16所示。从图中可以看出,调整后系统的性能非常稳 5-16SQL ysis打开图5-17所示的事务平均响应时间图,可以看到整个测试过程“打 由此可以得出结论:调整SQL5-17 根据常理,本次测试用的是普通的PC服务器,900个并发用户用1秒的响应时间显然不合理,39秒才符合实际情况。1秒的事务平均响应时间只是一种假像,是系统存在性 页面”的性能,在图5-16中有稳定表现,可以认为测试过关!3. 150PV(页面浏览500个并发用户。1.页面无缓存、500运行的最大用户数:1000个5-185-2事务响应时间(秒5-19CPU5-3CPUOracleWeb5-20数OracleCPU82.723%,说明数据库系统稳定运行。Web服务CPU67.5438PV均值为:67.126*3600*8≈193150PV。2.采用静态页面缓存方式、500用户并发测试场景持续执行时间:6分钟5-215-225-22CPU5-6CPU利用率 页 5-23数OracleWebOracleCPU8.267%,这说明静态页面缓存技术大大节省了对数据库的资源消耗,系统更加稳定运行。WebCPU67.3238PV均值为:69.043*3600*8≈199万 完成ysis是远远不够的。在实际工作中,往往会借助各种系统工具以及各方面的综合知识找出系统的瓶颈。例如在本项目中,Oracle自带的管理工具起了至关重要的作用,本案例恰恰是借助它发现了引起系统瓶颈的SQL语句,借助这个突破口逐步解决了其他性能问 ysis的各种分析报表,不能让任何一个性能 7.1JavanJavannnJavaJava虚拟用户 主要有JavaVuser、Corba-Java、RMI-Java、EJB等类型。这些类 JavaJavaVuserJava虚拟用户,中可以使用标准的Java语言。这种CVuser一样,非常广泛。JavaVuserVuGen录制的,然后使用标准的JavaLoadRunnerJava方法来增强该。RMI-Java虚拟用户适用于测试RMI( 方法调用)Java应用程序或小程序。选择RMI-Java用户进行录制,VuGen可以创建对应的Java 。完成录制后,可以使用JDK或自定义类,通过标准的Java代码来增强或修改 ,还可以通过特定于LoadRunner的Java方法增强该 EJB虚拟用户专门用于测试EnterpriseJavaBeans对象。采用EJB协议,VuGen会自 以测试EJB功能,无需录制或编程,这和标准的JavaVuser明显不同。在使用EJB协议类型的虚拟用户生成 前,需要指定JNDI属性和关于应用程序服务器的其他信息。LoadRunner的EJB检测器首先扫描应用程序服务器并确定哪些EJB可 需要注意的是,创建EJB虚拟用户测试 nnerEJB检测器,而且检测器必须处于活动状态。EJB检测器是一个独立 装有效的JDK环境。Java7-2JavaActionsinit、end部分7-1JavaVuser7-2JavaVuserActionsJava 所在 会更快。下一章将重点介绍如何用.NET来开发性能测试 Java虚拟用户适用范围非常广,归纳起来主要有两大类:一类是不太适合录制的业务功能点的性能测试,例如网页上Http文件的 等;另一类是基于Java语言开发的应用系统的性能测试,这类应用更适合采用Java虚拟用户进 JavaVuserlWebl vaVuser来测试这些业务的执行效率。lJavaJavaJava应用相比,JavaJava虚拟用户,因为可以直接对一些方Java开发工具包的简称(JavaDevelopmentKit),SunJDK1.2以后的版本Java2。JDKJ2SDK(Java2SoftwareDevelopmentKit),J2SDK1.4以上的版本。JDK可以从/\j2sdk1.4.1”路径下,LoadRunner安装在“D:\ProgramFiles\Mercury rcury WindowsXP 级”选项卡,如图7-3所示。7-4的“系统变量”CLASSPATHCLASSPATH,则点击“新建”7-5所示的界面。通常安装了LoadRunnerCLASSPATH变量。这里需要注意CLASSPATH变量值的最前面输入当前路径“.”JDK的类库路径,;7-4中,CLASSPAT变量值是“.;C:\j2sdk1.4.1\libC:\j2sdk1.4.1\jre\lib;D:\Tomcat-5.0\common\lib;D:\ProgramFiles\MercuryInctive\MercuryLoadRunner\classes;D:\ProgramFiles\MercuryInctive\MercuryLoadRunner\l7-37-47-5第四步:在图7-4的“系统变量”中,选中Path,点击编辑,会进入图7-6所示的界面。在变量值的最前面填上JDK开发工具包的bin 7-6PathPath变量值的最前面输入当前路径“·JDKbin路径,如“.;C:\j2sdk1.4.1\bin;C:\j2sdk1.4.1\jre\bin;”Java虚拟用户可能产生运行错误。“.;C:\j2sdk1.4.1\bin;C:\j2sdk1.4.1\jre\bin;D:\ProgramFiles\MercuryInctive\MercuryLoadRunner\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\ProgramFiles\In\Wireless\Bin\”。 要想掌握Java虚拟用户的使用,测试 Java语言方面的技能,并熟练使用至少一种Java集成开发工具,例如Eclipse;二是掌握LoadRunner的JavaAPI,JavaAPI是 Vuser函数的基础,通过LoadRunner的JavaAPI可以在 不难看出,JavaJavaVuserJavaJava语言方面JavaJava7-17-1Java详细内Java Java Java详细内Java Java Java类定义规范 Java Java Java名字空间及规 Java I/O 例 ² ²JavaInternet²使用InetAddress²URL Socket JDBC编程详细内Java ServletAPI Servlet JavaServer JSPJSPJava开发知识。EclipseNetBeans、SunONEStudioBorlandJbuilder类似的,一种基于Java的整合型可扩展开发平台,也是目前最著名的开源项目之一。IBM一直在大力支持该2001114千万到该项目的研发,这也是Eclipse项Eclipse专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目组成,具体包括四个组成部 tform、JDT、CDT和PDE。JDT支持Java开发、CDT支持C开发、PDE tform则是一个开放的可扩展IDE,提供了一个通用的开发EclipseSDK(软件开发包)是Eclipse tform、JDT和PDE所生产的组件合并,它们可以从 一个具有丰富特性的开发环境,允许开发者有效地建造可以无缝集成到Eclipse 中的工具。EclipseSDK由Eclipse项目生产的工具和来自其他开放源代码的第 在接下来的内容里,将介绍用EclipseJava虚拟用户中调用编译好的类文件。关于EclipselJava7-77-87-97-107-10中,单击“完成”Java7-11中可以看到新建的项7-11lJava在图7-13中,输入包名称“com.lr.test”、类名称“ 可。点击“完成”,进入源代码编辑界面,如图7-14所示。7-137-14 oWord!");”如图7-14所示。代码编辑完成后,按照图7-15编译与运行程序。如果编译执行成功,可以在Eclipse的控制台看到输出结果,如图7-16所示。7-15Java7-16lJaval进入到 到b”,这样LoadRunner创建的所有Java 入语句“importcom.lr.test.*;”7-17JavalVirtualUser7-187-18与C相比,JavaC...” 保存后,接下来可以放到Controller中来运行,读者可以自己进行实验。需 的客户机必须安装JDK环境并正确设置路径,否则将会出现如图7-19所示的提示。7-19JDK LoadRunnerJavaLoadRunner为VuserJavaAPIlrapi.lr类的静JavaAPIJava虚拟用户的可用性。本节将介绍常用的JavaAPI的用法,的函数及其用法读者可以参考LoadRunner联机手册。Java虚拟用户中,JavaAPIVuser函数中的用法基本一致,只是写法Java语言的特点。事务函数(Transactionintlr.start_transaction(Stringtransaction_name)intlr.end_transaction(Stringtransaction_name,intstatus)信息函数(InformationalStringlr.get_group_name()VuserStringlr.get_host_name():返回执行 的负 Stringlr.get_master_host_name()Controllerintlr.get_scenario_id()intlr.get_vuser_id()VuserID运行时函数(Run-Timevoidlr.peek_events();:指示可以暂停 intlr.rendezvous(Stringrendezvous_name):在 voidlr.think_time(doubletime):暂 字符串函数(StringStringlr.eval_string(Stringinstring)intlr.eval_int(Stringname)intlr.next_row(Stringdat_file)消息函数(Messageintlr.debug_message(intmessage_level,Stringmessage)intlr.error_message(Stringmessage):向Vuserintlr.log_message(Stringmessage)Vuserintlr.message(Stringmessage)intlr.output_message(Stringmessage)intlr.vuser_status_message(Stringmessage)Controller窗口中的7.3JavaJavaVuserJava SocketgiveOutWork()synchron一 作。服务器端程序即WorkServer.java,包含WorkQueue、Accept ver三类。类WorkQueue主要完成任务队列的构建与管理工作;类Accept Thread继承线程类Thead,以独立线程的方式来处理客户端申请任务并保存客户端对任务的处理结果;类WorkServer是服务器端的执行类,主要完成对WorkQueue、Accept packagecom.loadrunner.test;importjava.io.*;import @authorpublicclass Socketsocket; BufferedReaderis;//读出服务器返回的输入流PrintWriteros;//反馈给服务器的输出流*(Sockets)trythis.socket=this.is=newBufferedReader(newthis.os=newPrintWriter(s.getOutputStream()); Number=Integer.parseInt(is.readLine());}catch(Exceptione)System.err.println("Error:Cannotinitthe}}publicintapplyWork(){intworkNumber=-1;try{workNumber=Integer.parseInt(this.is.readLine());//读出申请结果if(workNumber==-1){System.out.println("ServerhasnoWorktodo");}}catch(Exceptione)System.err.println("Error:Cannotapplythe}return}@returndealwith@authorpublicintdealWithWork(intworknumber)return1;}@returnensure@authorpublicbooleanfinishWork(intworkNumber){booleanfinish=false;try{finish=Boolean.valueOf(this.is.readLine()).booleanValue();if(finish==false){System.out.println("Error:Workfinishcannotbeset!");}}catch(Exceptione)System.err.println("Error:Cannotstartthenetwork!");}return}} packagecom.loadrunner.test;importjava.io.*;import队列{原始N个任务,接受申请返回任务号,检查任务是否正在处理、接受 @authorclassprivateint[]WorkFlag;//0-未申请;1-申请后正在处理;2-处理完成privateinttotal;int WorkQueue(int{this.WorkFlag=newint[this.total];for(inti=0;i<this.total;i++){}}intgiveOutWork(){intk=this.nowNumber;try}catch(InterruptedExceptione){}returnk;}//truefalse。booleanfinishWork(intworknumber){intif{returntrue;System.err.println("Work"+number+"Cannotbe}return}} class Threadextends{privateSocketsocket=null;privateint privateWorkQueueworkQueue; Thread(Socketsocket,WorkQueue { }intgiveOutWork()//{}catch(Exception{}return}booleanfinishWork(intworknumber)//{return}publicvoid{BufferedReaderis=newBufferedReader(newInputStreamReader(socket.getInputStream()));PrintWriteros=newPrintWriter(socket.getOutputStream());os.println(this.Number);Stringstep=is.readLine();{}intworknumber=this.giveOutWork();{}//如果没有被处理过(1),则可以提交客户端的结果booleanresult=this.finishWork(worknumber);{System.out.println("Work+"doneby }}catch(Exception{}}}publicclassWorkServerpublicstaticvoidmain(String[]args)//TODOAuto-generatedmethodstubServerSocketserverSocket=null;booleanlistening=true;WorkQueuequeue=newtry{serverSocket=new}catch(IOException{System.err.println("Couldnotlistenonport:8000.");}{ while(listening){Socketsocket=newsocket=serverSocket.accept();//程序将在此等候客户端的连接new }}catch(Exception{}}}JavaTest.javaEclipse中开发完成。在Test.javaTest,用于调用.java中的方法。下面是测试程序Test.java的程序 packagecom.loadrunner.test;importjava.io.IOException;import.Socket;import.UnknownHostException;publicclassTest{publicvoidApplyProccess()throws{ Socket=null;try{Socket=new int int booleanensureResult= {System.err.println("Error:Workcheckerror!");}{System.out.println("Finishwork}}catch(UnknownHostExceptione){System.err.println("Don'tknowabouthost:.");}catch(IOExceptione)System.err.println("Couldn'tgetI/Ofortheconnectionto:}}}上面三个程序在Elipse中编译完成后,将会按照类文件的包名称“com.loadrunner.test” 结构“com\loadrunner\test”,下面可以看到编译后的class文件。启动VuGen,先创建空的虚拟用户 下,如图7-20所示。图7-20虚拟用 结 ,以调用Test类中的Test()方法。修改后的如图7-21所示。在Eclipse中运行WorkServer.java,启动WorkServer服务器后才可以调试 uGen中运行 ,如果在运行结果Log中看到“FinishworkNo.*”,则表示 确,可以成功申请并处理任务。图7-22所示为成功申请并处理了1号任务。7-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人所得税退税贷款合同(2篇)
- 借资免责协议书范本(2篇)
- 猪舍建设合同(2篇)
- 2024版宠物店门头广告位租赁合同
- 2024年度技术服务合同的技术交付与质量保证条款
- 二零二四年光伏企业股权转让协议
- 2024年度车位装修合同:车位装修工程与装修公司之间的装修协议
- 解读民族医院信息化建设
- 2024年度医疗废物处理与环保服务合同
- 棕制品材料循环利用
- 地龙蛋白参考课件
- 泰和安说明书
- PET真题1-8 同义句转化汇总160道
- 无处不在的广告课件
- 手部先天性疾患多指畸形课件
- 如何面对挫折-心理健康教育课件
- 机械设备定期检查维修保养使用台账
- 丽声北极星分级绘本第四级上 Stop!Everyone Stop!教学设计
- 希尔顿酒店市场营销环境的swot分析 2
- 消化道穿孔课件
- 可编辑修改中国地图模板
评论
0/150
提交评论