第2章 LoadRunner基础知识
LoadRunner常用术语
l 场景(Scenario): 场景即测试场景,在LoadRunner中主要表现为Controller中设计与执行测试用例中的用户场景。
l 负载发生器(Load Generator): 用来产生压力的真实机器,受Controller空值,可以使用户脚本在不同的主机上执行。
l 虚拟用户(Virtual User/Vuser): 对应于现实中的真实用户,使用LoadRunner模拟的用户称为虚拟用户。
l 虚拟用户脚本(Vuser Script): 通过Vuser Generator录制或开发的脚本。
l 事务(Transaction): LoadRunner通过事务来衡量服务器的性能。
l 思考时间(Think Time): 即用户思考时间,为了在模拟时更接近用户的真实行为而引进的概念。在虚拟用户脚本中用函数lr_think_time(time)来模拟用户处理过程。
l 集合点(Rendezvous):对应于真实用户中的并发点。在虚拟用户脚本中对应函数lr_rendezvous(const char*rendezvous_name),当执行到该函数时会按照场景的并发策略来执行。
LoadRunner主要由以下几部分组成:
l 虚拟用户发生器(Vuser Generator)
l 压力调度和监控中心(Controller)
l 压力产生器(Load Generator)
l 压力结果分析工具(Analysis)
虚拟用户发生器实际上是一个集成开发环境。而Controller是一个框架程序和监控程序,它负责将VuGen开发的脚本以多进程/多线程的方式在Load Generator机器上运行。
Controller同时实现了无代理方式的监控功能,可以监控各种主流软件,并提供对不支持软件进行监控的二次开发的接口。
Analysis可以安装在任何Windows平台的机器上。
性能测试流程:测试需求分析à测试计划的制定与评审à测试用例的设计与开发à测试的执行与监控à分析测试结果à编写性能测试报告à总结测试经验
测试需求分析阶段的主要任务是确定测试策略和测试范围。测试计划的内容主要包括测试范围、测试环境、测试方案简介、风险分析等。测试计划要经过评审才可以生效。
LoadRunner的安装
通常情况下,运行Controller的主机选择自定义方式进行完全安装,测试开发主机选择典型安装,而负载发生器Load Generator则仅安装客户端。
第3章 脚本的录制与开发
VuGen录制原理:VuGen录制浏览器的行为主要是通过Proxy的方式来实现的。当开始录制时,VuGen会打开一个浏览器,并以VuGen作为代理来访问目标服务器。在用VuGen录制用户操作的过程中,VuGen会根据对捕获数据的分析,将其还原成对应协议的由API组成的脚本。同时,VuGen会将这些函数生成的脚本插入到VuGen编辑器中,以创建原始的Vuser脚本。
LoadRunner所支持的协议:
Application Deployment Solution:主要有Citrix协议。
Client/Server:主要有MS SQL、ODBC、Oracle 2-tier、DB2 CLI、Sybase Ctlib、Sybase Dblib、Windows Sockets和DNS协议。
Custom:主要有自定义的C、Visual Basic、Java、Javascript和VBscript类型脚本。
Distributed Components:主要有COM/DCOM、Corba-Java和Rmi-Java协议。
E-business:主要有FTP、LDAP、Palm、SOAP、Web(HTTP/HTML)和Web/Winsocket Dual协议。
Enterprise Java Beans:主要有EJB测试和Rmi-Java协议。
ERP/CRM:主要有Baan、Oracle Web Applications 11i、Oracle NCA、PeopleSoft Enterprise、Peoplesoft-Tuxedo、SAP-Web、SAPGUI、SAPGUI/SAP-Web dual和Siebel(Siebel-DB2 CLI、Siebel-MSSQL、Siebel-Web和Siebel-Oracle)协议。
Legacy:适用于终端仿真(RTE)。
Mailing Services:主要有Internet邮件访问协议(IMAP)、MS Exchange(MAPI)、POP3和SMTP。
Middleware:主要有Jacada、Tuxedo6和Tuxedo7协议。
Streaming:主要有MediaPlayer和RealPlayer协议。
Wireless:主要有i-Mode、VoiceXML和WAP协议。
补充内容:
协议是数据在网络中传输的结构模式。协议不同,其数据报文的结构也有所不同。
协议是有层次的,一般我们从ip层开始,往上有TCP协议层,UDP协议层,而TCP和UDP协议层上又有http协议层,ftp协议层,smtp协议层等我们在lr中看到的这些应用层的协议。
其实这些高层协议都是对底层协议进行的进一步封装。举个简单例子,本来IP协议的数据报文是无序,不是可靠传输的,在其数据报文外面增加了报文序号,报文状态等数据段就构成了TCP协议层。
所以我们很多网络应用,没有找到合适的协议,就用winsock来录制,那是肯定没有问题的。因为几乎所有的网络传输中都是基于tcp协议或udp协议的,而socket正是这一级上的概念。但是由于socket协议级别太低,你录下来的东西是很难理解的,都是socket,port,data之类的东西。所以,我们尽量用高层协议来录制,我们就能看懂了。
看见很多人关心lr是不是支持mysql协议。我认为要寻找的答案的思路是这样的:
1。首先弄清mysql协议和其他数据库协议的关系,看能不能用其它数据库协议录制。但其实oracle的cs协议是oracle独有自己开发的协议,sqlserver也是一样,而mysql又与这几大产品又不是隶属关系,其脚本录制的可能性很小。
2。mysql协议的底层是基于什么协议的,如果直接构建在tcp协议上,lr又不支持mysql协议,那只能考虑用低一点的协议录录看,即socket。如果mysql协议是构建在odbc协议上的,那么就可能用lr的odbc api来写。
选择协议的一个原则性的观点是“客户端与直接压力承受的服务器之间的通信协议是选择测试协议的唯一标准。B/S运行模式可以采用http协议,也可以采用TCP/IP,SMTP,FTP等协议。
例如,如果IE浏览器与Web服务器的通信不仅采用了http协议,而且还有部分业务采用Winsocket,那么必须选择Web/Winsocket双协议。又如,系统的架构是客户端应用程序+Tuxedo消息中间件(或者是其他中间件)+数据库服务器。遇到这种情况,我们一般会选择Tuxedo测试协议。
测试工具提供的使用广泛的测试脚本是CScript、JavaScript及VBScript。
Web(HTTP/HTML)协议共有两种录制方式:“HTML-based script”和“URL-based script”。“HTML-based script”是默认模式,该模式可以为每个用户请求生成单独的函数。“URL-based script”则可以捕获所有座位用户操作的结果发送到服务器的HTTP请求,然后一一记录下来。“URL-based script”模式甚至还可以捕获非HTML应用程序,例如小程序和非浏览器应用程序。
使用“HTML-based script”模式录制生成的脚本直观、易于理解和维护。而基于“URL-based script”模式录制生成的脚本内容看起来会比较多,但这种脚本的可伸缩性更强,记录了更详细的用户操作信息。
选择“HTML-based script”还是“URL-based script”的参考原则:
l 基于浏览器的应用程序推荐使用HTML-based script;
l 不是基于浏览器的应用程序推荐使用URL-based script;
l 如果基于浏览器的应用程序中包含了JavaScript,并且该脚本向服务器发送了请求,比如DataGrid的分页按钮等,推荐使用URL-based script方式录制;
l 基于浏览器的应用程序中使用了HTTPS安全协议,建议使用URL-based script方式录制;
l .......
对于初学者,还有一种简单的方法,如果使用“HTML-based script”模式录制后不能成功回放,可以考虑改用“URL-based script”模式来进行录制,因为这种情况多是由上面所列举的情况引起的。
脚本类型:
① A script describing user actions; ②A script containing explicit URLs only.
脚本类型中默认选择的是第一个,而用来描述用户行为的脚本,通常会采用该项。在这类脚本中,脚本的描述形式和用户的操作一致,能够非常直观地看到用户的操作流程。
第二个选项仅包含明确的URL脚本。在这钟脚本中,所有的链接、图像请求和URL操作都被录制为web_url函数,而表单提交则被录制为web_submit_data函数。这种模式在直观性上不如第一种,但是在某些情况下比较有用。例如,当一个站点中有很多链接具有相同的链接文本时,可以使用这种模式按照每个链接的URL将其列出,便于实现这些操作的参数化和关联。
只有在Action部分才可以设置集合点。集合点一般会创建在用户事务的开始标志前。
参数类型:
Date/Time、Group Name(在VuGen中运行时,Group Name将会是None)、Load Generator Name、Iteration Number、Random Number、Unique Number、Vuser ID(在VuGen中运行时,Vuser ID=-1)、File、User Defined Function(从用户开发的dll文件中提取数据)。
检查点首先可以验证网页上是否存在指定的Text或Image,其次还可以测试在比较大的压力测试环境中,被测的网站功能是否保持正确。
如果普通的Web Checks无法搜索到判断信息,LoadRunner提供了一个功能更为强大的方法函数:web_reg_find。这个函数将会针对HTML的源文件进行搜索。
关联的优点:
l 简化或优化代码 例如,如果依次执行一系列的相关查询,脚本可能会变得很长。而为了缩减代码的长度可以进行嵌套查询,但这样做会失去准确性,影响执行效率,并且代码会变得复杂而难以理解。因此,可以通过关联语句,无需嵌套就可以链接查询。
l 用于动态数据 处理动态数据是关联功能设计的出发点。
l 容纳唯一数据记录
关联脚本的主要步骤:
l 确定要关联的值
l 保存动态结果 关联函数名通常包含字符串save_param。
l 引用保存的值
使Vuser用户脚本产生更大的压力的设置:
① 忽略思考时间;
② 选择虚拟用户以多线程模式运行,而非多进程方式。
第4章 场景的创建与执行
Controller提供手动和面向目标两种测试场景类型。在面向目标的测试场景中,LoadRunner提供了虚拟用户数、每秒点击次数(仅限Web虚拟用户)、每秒事务数、每分钟页面数(仅限Web虚拟用户)和事务响应时间5钟类型的目标。
当脚本加载到Controller中后,Controller会自动把思考时间的设置恢复成As recorded。
使用IP Spoofer的缘由:
默认情况下,同一个Load Generator上的所有虚拟用户都将使用该Generator的IP地址来访问服务器。①当有大量虚拟用户并发运行时,就会出现多个用户使用同一个IP对网站进行加压的情况。与此同时,应用程序服务器经常缓存来自同一台计算机上的客户端信息,而路由器则缓存源信息和目标信息,以提高处理能力。经过服务器和路由器进行优化处理后,Load Generator产生的压力可能无法反映真实的情况。②服务器对同一IP访问进行限制。
IP类型通常选择“Class C”,“From IP”的前三个字段要和Load Generator的IP一致。只有进入专家模式才可以对多个IP地址进行全局设置。