这样搞定LoadRunner中的异步操作问题

360影视 欧美动漫 2025-06-11 01:30 4

摘要:LoadRunner是Web应用性能测试常用的一个工具,它可以录制浏览器操作,并模拟大量用户并发访问系统。

问题描述

LoadRunner是Web应用性能测试常用的一个工具,它可以录制浏览器操作,并模拟大量用户并发访问系统。

LoadRunner的脚本通常只能对同步操作的功能进行测试,对于异步操作的功能则需要一些方法来进行处理才能够实现自动化测试。

本文通过一个具体的例子来讲解如何解决此类问题。

解决方案

01、测试功能描述:

某个性能测试的需求是要测试并发导入人员信息,人员信息数据通过excel模版进行维护,通过系统提供的导入功能进行导入。

系统的导入功能是通过异步任务来实现的,当执行导入操作时,系统不必等待导入结束就可以继续操作其它功能,导入任务同时会在后台执行,导入任务结束后,会返回成功或者失败之类的提示信息。

下图显示导入操作正在进行:

下图显示导入操作成功:

上图中可以看到,导入耗时为15秒。

02、脚本修改方法

这个导入功能相对于主程序来说,就是一个异步的功能,用LoadRunner录制脚本后,大概类似如下代码段:

//选择导入文件……//执行导入操作,记录事务lr_start_transaction("导入");//导入任务的页面请求web_custom_request("xmlhttp","URL=http://192.168.25.22/test/xmlhttp?bid=addTaskDAO","Method=POST","Resource=0","Snapshot=t12.inf","Mode=HTML","EncType=","Body=\n" "\n" "{taskId1}\n" "",EXTRARES,LAST);lr_end_transaction("导入", LR_AUTO);

回放脚本时,脚本很快通过,“导入”这个事务的时间在0.0X秒,而实际导入的时间却是十几秒。显然,这样的脚本无法满足测试的需求,需要对此脚本进行完善处理。

调整后的脚本如下所示:

//选择导入文件……//执行导入操作,记录事务int num=0;lr_start_transaction("导入");do{web_reg_save_param("status_success","LB=success\n" "\n" "{taskId1}\n" "",EXTRARES,LAST);num=num+1;lr_think_time(1);}while((strcmp( lr_eval_string("{status_success}"), "1" ) != 0) && (num

调整说明如下:

1) 导入任务是否成功,是通过返回页面中的一个参数来标记的,如果此参数为1,则表明导入成功,否则表明导入失败。

为了获取到这个参数的值,通过关联函数

web_reg_save_param

将此值存放到status_success参数中。

2) 为了解决这种异步性,通过循环的方式反复检查status_success是否为1,因此将导入任务的页面前加入了循环操作,同时添加了计数器num,循环退出的条件是status_success为1(导入成功),或者是num大于60(超过重试次数)。

3) 循环中设置了思考时间1秒,其目的是每1秒检查一次status_success的值,同时num加1,如果num大于60,也就表明超过了60秒,导入还没有成功,则认为是导入失败。

多少秒退出循环可以根据实际需要进行设定。执行测试时,思考时间一定要选择“as recorded”。

4) 循环退出后,通过检查status_success是否为1来判断导入是否成功,以便后续处理。

这样调整后的脚本,基本就解决了异步的问题,可以较准确的记录“导入”这个事务的响应时间。

问题结论

LoadRunner的脚本功能很强大,实际上就是一个编程工具,只要有好的想法,所有需求基本都可以通过自动化脚本来实现。

来源:立果教育

相关推荐