Loadrunner是一款负载测试工具,它有三个核心组件分别是Virtual User Generator、Controller、Analysis。Virtual User Generator 可以通过录制脚本准确的记录下来用户的每一步操作并且可以进行集合点设置、事务设置、参数化等操作从而为在Controller中执行特定的场景做准备。Controller顾名思义,它可以控制脚本的执行,通过把脚本放置在一个特定的场景中,模拟一批真实用户的操作过程,这些模拟的真实用户就叫做虚拟用户。通过这些虚拟用户可以对系统进行负载测试。Analysis应该是测试人员极为关注的一个组件,通过Controller执行完某一个场景之后,Analysis可以自动生成测试结果并通过图形的形式显示出来,测试人员只有借助这些图表才能准确分析出系统的瓶颈并且确定性能是否达到要求。
下面介绍一下如何进行集合点、检查点以及参数化的设置:
对于集合点、检查点的设置有两种方法,一种是在录制完脚本以后,手工在脚本中添加相关的关键字例如lr_start_transaction等,这种方法对脚本语言的理解能力要求较高。另一种是直接在录制的过程中添加集合点、检查点,这样lr就会自动把集合点、检查点的关键字添加到脚本中。
事务:就是用户某一步或者某几步操作的集合。当我们需要通过某一步或是某几步操作从而衡量服务器的性能的时候,这时我们就把这些操作设置成一个事务,当事务开始执行的时候lr就开始计时当事务运行结束计时停止,执行事务的时间会在在最后的结果中显示出来。
实例:登录sina网站,把点击“天气”设置成一个事务,衡量服务器处理处理该事务的性能。
1,点击红色的录制按钮,输入URL开始录制。弹出sina的首页,点击
点击OK完成事务的开始点设置。
2,在sina页面上点击“天气”的连接,出现天气页面
3,点击
lr根据匹配原则已经自动把事务名字一栏填入“天气”,我们只需要选择事务的状态。状态有三种LR_AUTO、 LR_PASS、 LR_FAIL、 LR_STOP,
LR_AUTO:事物的状态被自动设置,如果事务执行成功,状态设置为PASS,如果执行失败,状态设置为FAIL,如果由于异常中断,状态被设置成STOP.
LR_PASS:事务如果执行成功,代码的返回状态就是PASS。
LR_FAIL:事务如果执行失败,代码的返回状态就是FAIL。
一般我们选择LR_AUTO。 那么我们会有疑问什么时候我们选择PASS或者是FAIL呢?
Lr的帮助文档中有一条例子,可以很好的帮助我们理解
lr.start_transaction("GetStocks");
try {
String stocks[];
stocks = orStockServer1.getStockList();
if (stocks.length == 0)
throw new Exception("No stocks returned/available");
lr.end_transaction("GetStocks", lr.PASS);
}
catch (Exception e1) {
lr.end_transaction("GetStocks", lr.FAIL);
lr.message(" An exception oclearcase/" target="_blank" >ccurred : " e1.toString() );
}
代码说明:这时一个得到stock list的例子,程序中设置了异常检查来确保getStockList()方法返回非零的长度。
同时我也进行了如下的脚本修改
………………
lr_start_transaction("天气");
lr_think_time( 3 );
web_add_cookie("mysinal=ai_erica; DOMAIN=weather.news.sina.com.cn");
web_add_cookie("SINAGLOBAL=221.219.31.58.924471172571904604; DOMAIN=weather.news.sina.com.cn");
………………
lr_end_transaction("天气", LR_FAIL);
在最后我把该事物的结束状态设置为FAIL,然后运行该脚本,其实该事物的运行是没有任何错误的,完全可以运行成功,只是在最后我把事务的状态手工设置为FAIL。当脚本执行完后,查看Ececution Log看到这样一条log语句:
Action.c(297): Notify: Transaction "天气" ended with "Fail" status (Duration: 5.1436).
那么这样做的意义是什么呢?为什么要设置事务结束状态呢?原因就是在Analysis中生成结果图表的时候我们就能看到这个名为“天气”的事务执行是失败的。如果语句是这样:
Action.c(297): Notify: Transaction "天气" ended with "Pass" status (Duration: 5.1436).
Analysis中生成结果图表的时候我们就能看到这个名为“天气”的事务执行是成功的。
设置事务结束状态的用途就在这里。试想Lr为什么能自动生成结果图表?无非就是Analysis通过一些定义好的API获取执行脚本过程中的返回值,从而显示出事务执行的正确还是错误,或是显示出响应时间等信息,然后调用GUI使我们很直观的看到测试结果。