标签:
大家在性能测试过程中,经常会用到程序处理或组织数据,以达到一定的测试目的,但是程序本身执行会消耗一些时间,这部分消耗的时间是包含在响应时间里面,此时,响应时间=正常响应时间+程序执行消耗时间。那么如何来保证响应最接近真实,LoadRunner提供了一组函数,减去程序消耗时间,达到测试目的。函数(绿色标注)如下: double time_elapsed = 0.00, duration = 0.00, waste = 0.00,trans_time = 0.00,waste_time = 0.00; merc_timer_handle_t timer; timer = lr_start_timer(); //timer开始 if(strlen(lr_eval_string("{P_Bal}")) > 0) { for(i=0;i < strlen(lr_eval_string("{P_Bal}"));i++) { //lr_error_message("%d",i); lr_save_var(lr_eval_string("{P_Bal}")+i,1,0,"P_Value"); #define temp = 0; //lr_error_message("%s",lr_eval_string("{P_Value}")); if(atoi(lr_eval_string("{P_Value}")) != 0) { if(strcmp(lr_eval_string("{P_Value}"),",") != 0 && strcmp(lr_eval_string("{P_Value}"),".") != 0) { break; } } } } time_elapsed = lr_end_timer(timer);//停止timer lr_output_message("%lf",time_elapsed); waste = time_elapsed * 1000; //毫秒转成秒 if(lr_get_transaction_status("XXX") == 1 || atoi(lr_eval_string("{P_Value}")) <= 0) { lr_wasted_time(waste);//响应时间减去纯语句消耗的时间 lr_end_transaction("XXX", LR_FAIL); lr_output_message("XXX失败 %s %s",lr_eval_string("{UserName}"),lr_eval_string("{P_AccountId}")); goto exit; }
关于时间的几个函数: lr_get_transaction_duration得到transaction运行到当前位置的duration,包含事务的响应时间和wasted time,单位是s; 着重理解下wasted time: wasted time包括事务中函数自身执行所消耗的时间,这个时间是loadrunner自动会计的,计在lr_get_transaction_wasted_time里面,还有比如C语言等外部接口进行处理的时间这个loadrunner不会自动计,但是我们可以通过lr_start_timer(单位是s)、lr_end_timer(单位是s)、lr_wasted_time(这个函数的形参中wasted time的单位是毫秒,所以通过timer计的时间需要乘上1000)等函数手动计入lr_get_transaction_wasted_time里面 下面来验证下: Action() { int i, baseIter = 200; char dude[200]; double wasteTime; merc_timer_handle_t timer; lr_start_transaction("baidu"); web_add_cookie("BAIDUID=63CCB143FE1734437DBED1D457D18E3E:FG=1; DOMAIN=www.baidu.com"); web_add_cookie("BAIDUID=63CCB143FE1734437DBED1D457D18E3E:FG=1; DOMAIN=passport.baidu.com"); web_add_cookie("BAIDUID=63CCB143FE1734437DBED1D457D18E3E:FG=1; DOMAIN=suggestion.baidu.com"); web_url("www.baidu.com", "URL=http://www.baidu.com/", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t1.inf", "Mode=HTML", EXTRARES, "Url=http://s1.bdstatic.com/r/www/cache/static/global/img/icons_37d13939.png", ENDITEM, "Url=http://s1.bdstatic.com/r/www/cache/static/sug/js/bdsug_31b8d653.js", ENDITEM, "Url=/favicon.ico", "Referer=", ENDITEM, "Url=http://passport.baidu.com/passApi/js/uni_login_wrapper.js?cdnversion=1400118095796&_=1400118095656", ENDITEM, "Url=http://suggestion.baidu.com/su? wd=&zxmode=1&json=1&p=3&sid=4948_6429_1450_5223_6505_4760_6017_6462_6428_6456_6454&cb=jQuery110208749060739643981_1400118095657&_=1400118095658", ENDITEM, LAST); //在脚本中间位置,记录此时事务自身函数消耗的时间,这个是loadrunner自动计的 lr_output_message("User created waste time to this point calculated by loadrunner = %lf", lr_get_transaction_wasted_time("baidu")); //使用一个测试语句手动记录消耗的时间 timer = lr_start_timer(); for (i=0; i< (5 * baseIter); ++i) sprintf(dude, "This is the way we waste time in a script = %d", i); wasteTime = lr_end_timer(timer); lr_output_message("User created waste time calculated by timer = %lf", wasteTime); wasteTime *= 1000; //通过lr_wasted_time函数将wasteTime标记为wasted time lr_wasted_time(wasteTime); //通过lr_get_transaction_wasted_time函数会汇总手工记录的消耗时间和loadrunner自动记录的消耗时间 lr_output_message("Total User created waste time = %lf", lr_get_transaction_wasted_time("baidu")); lr_output_message("Transaction duration = %lf", lr_get_transaction_duration("baidu")); lr_end_transaction("baidu", LR_AUTO); return 0; } 运行日志如下: Virtual User Script started at : 2014-05-15 09:58:45 Starting action vuser_init. Web Turbo Replay of LoadRunner 11.0.0 for WINXP; build 8859 (Aug 18 2010 20:14:31) [MsgId: MMSG-27143] Run Mode: HTML [MsgId: MMSG-26000] Run-Time Settings file: "F:\LR\baidu_open\\default.cfg" [MsgId: MMSG-27141] Ending action vuser_init. Running Vuser... Starting iteration 1. Starting action Action. Action.c(12): Notify: Transaction "baidu" started. Action.c(14): web_add_cookie was successful [MsgId: MMSG-26392] Action.c(16): web_add_cookie was successful [MsgId: MMSG-26392] Action.c(18): web_add_cookie was successful [MsgId: MMSG-26392] Action.c(20): Downloading resource "http://s1.bdstatic.com/r/www/cache/static/global/img/icons_37d13939.png" (specified by argument number 9) [MsgId: MMSG-26577] Action.c(20): Downloading resource "http://s1.bdstatic.com/r/www/cache/static/sug/js/bdsug_31b8d653.js" (specified by argument number 11) [MsgId: MMSG-26577] Action.c(20): Downloading resource "http://www.baidu.com/favicon.ico" (specified by argument number 13) [MsgId: MMSG-26577] Action.c(20): Downloading resource "http://passport.baidu.com/passApi/js/uni_login_wrapper.js?cdnversion=1400118095796&_=1400118095656" (specified by argument number 16) [MsgId: MMSG-26577] Action.c(20): Downloading resource "http://suggestion.baidu.com/su?wd=&zxmode=1&json=1&p=3&sid=4948_6429_1450_5223_6505_4760_6017_6462_6428_6456_6454&cb=jQuery110208749060739643981_1400118095657&_=1400118095658" (specified by argument number 18) [MsgId: MMSG-26577] Action.c(20): Found resource "http://www.baidu.com/img/baidu_jgylogo3.gif" in HTML "http://www.baidu.com/" [MsgId: MMSG-26659] Action.c(20): Found resource "http://www.baidu.com/img/bdlogo.gif" in HTML "http://www.baidu.com/" [MsgId: MMSG-26659] Action.c(20): Found resource "http://www.baidu.com/cache/global/img/gs-2.0.gif" in HTML "http://www.baidu.com/" [MsgId: MMSG-26659] Action.c(20): Found resource "http://s1.bdstatic.com/r/www/cache/static/jquery/jquery-1.10.2.min_f2fb5194.js" in HTML "http://www.baidu.com/" [MsgId: MMSG-26659] Action.c(20): Found resource "http://s1.bdstatic.com/r/www/cache/static/global/js/all_async_f712ea4c.js" in HTML "http://www.baidu.com/" [MsgId: MMSG-26659] Action.c(20): Found resource "http://s1.bdstatic.com/r/www/cache/static/global/js/imsg_45172630.js" in HTML "http://www.baidu.com/" [MsgId: MMSG-26659] Action.c(20): web_url("www.baidu.com") was successful, 106231 body bytes, 4084 header bytes, 59 chunking overhead bytes [MsgId: MMSG-26385] Action.c(35): User created waste time to this point calculated by loadrunner = 0.758138 Action.c(45): User created waste time calculated by timer = 7.646098 Action.c(52): Total User created waste time = 8.404138 Action.c(53): Transaction duration = 8.745259 Action.c(55): Notify: Transaction "baidu" ended with "Pass" status (Duration: 8.7524 Wasted Time: 8.4041). Ending action Action. Ending iteration 1. Ending Vuser... Starting action vuser_end. Ending action vuser_end. Vuser Terminated. 运行的结果也证明了我之前的理解 注:在最开始的时候,使用oracle两层协议录制脚本,一直不能演示出自身函数消耗的时间,lr_get_transaction_wasted_time的值都为0,后来使用http协议可以演示出来
标签:
原文地址:http://www.cnblogs.com/qmfsun/p/4480924.html