在《性能测试工具选择策略--仿真度对比测评分析报告》一文详细分析了使用相同的web页面,分别使用LoadRunner,Jmeter,kylinTOP工具进行录制脚本并执行得出在静态请求页面下,Loadrunner12与kylinTOP的仿真能力都非常的高,接近真实场景。这次我们进一步分析,对于对态请求界面,两者的差异性(这次我们改用kylinPET与LoadRunner12.60进行对比分析)。
被测试对象URL:http://59.110.158.28/Example/ ,这是一个简单的登录和内容加载页面。
首面登录界面
页面登录成功后的内容:
登录过程过程中,按下F12按钮,可以看到页面加载过程所有请求。getNews共有6个动态的并发请求。
使用LoadRunner12.60自带的录制功能,使用Chrome浏览器进行脚本录制(注意:录制过程需要安装一个fiddler,在录制脚本前,启动fiddler),录制完成后要进行自动关联和手动关联两个动作,
自动关联ticket和手动关联:validateCode,否则脚本无法运行。以下是关联后,action部分内容展示,脚本中手工增加了一个页面加载事务(从提交登录至脚本请求结尾)
1 Action() 2 { 3 4 web_add_auto_header("Upgrade-Insecure-Requests","1"); 5 6 web_reg_save_param_ex("ParamName=validateCode", "LB=validateCode\">","RB=<\/span>",LAST); 7 8 web_url("Example", 9 "URL=http://59.110.158.28/Example/", 10 "Resource=0", 11 "RecContentType=text/html", 12 "Referer=", 13 "Snapshot=t45.inf", 14 "Mode=HTML", 15 EXTRARES, 16 "Url=images/button/btn_login.png", "Referer=http://59.110.158.28/Example/css/login.css", ENDITEM, 17 LAST); 18 19 web_add_auto_header("Origin", 20 "http://59.110.158.28"); 21 22 /*相关性注释 - 切勿更改! Original value='ST-1610868492644' Name ='ticket' Type ='ResponseBased'*/ 23 web_reg_save_param_regexp( 24 "ParamName=ticket", 25 "RegExp=ticket=(.*?)\\\r\\\n", 26 SEARCH_FILTERS, 27 "Scope=Headers", 28 "IgnoreRedirections=No", 29 "RequestUrl=*/login*", 30 LAST); 31 32 lr_start_transaction("页面加载"); 33 34 web_submit_form("login", 35 "Snapshot=t46.inf", 36 ITEMDATA, 37 "Name=name", "Value=admin", ENDITEM, 38 "Name=password", "Value=admin", ENDITEM, 39 "Name=validate", "Value={validateCode}", ENDITEM, 40 LAST); 41 42 web_revert_auto_header("Upgrade-Insecure-Requests"); 43 44 web_add_auto_header("X-Requested-With", 45 "XMLHttpRequest"); 46 47 48 web_submit_data("getNews", 49 "Action=http://59.110.158.28/Example/getNews", 50 "Method=POST", 51 "RecContentType=text/plain", 52 "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}", 53 "Snapshot=t47.inf", 54 "Mode=HTML", 55 ITEMDATA, 56 "Name=times", "Value=6", ENDITEM, 57 LAST); 58 59 web_submit_data("getNews_2", 60 "Action=http://59.110.158.28/Example/getNews", 61 "Method=POST", 62 "RecContentType=text/plain", 63 "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}", 64 "Snapshot=t48.inf", 65 "Mode=HTML", 66 ITEMDATA, 67 "Name=times", "Value=1", ENDITEM, 68 LAST); 69 70 web_submit_data("getNews_3", 71 "Action=http://59.110.158.28/Example/getNews", 72 "Method=POST", 73 "RecContentType=text/plain", 74 "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}", 75 "Snapshot=t49.inf", 76 "Mode=HTML", 77 ITEMDATA, 78 "Name=times", "Value=4", ENDITEM, 79 LAST); 80 81 web_submit_data("getNews_4", 82 "Action=http://59.110.158.28/Example/getNews", 83 "Method=POST", 84 "RecContentType=text/plain", 85 "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}", 86 "Snapshot=t50.inf", 87 "Mode=HTML", 88 ITEMDATA, 89 "Name=times", "Value=5", ENDITEM, 90 LAST); 91 92 web_submit_data("getNews_5", 93 "Action=http://59.110.158.28/Example/getNews", 94 "Method=POST", 95 "RecContentType=text/plain", 96 "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}", 97 "Snapshot=t51.inf", 98 "Mode=HTML", 99 ITEMDATA, 100 "Name=times", "Value=2", ENDITEM, 101 LAST); 102 103 web_submit_data("getNews_6", 104 "Action=http://59.110.158.28/Example/getNews", 105 "Method=POST", 106 "RecContentType=text/plain", 107 "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}", 108 "Snapshot=t52.inf", 109 "Mode=HTML", 110 ITEMDATA, 111 "Name=times", "Value=3", ENDITEM, 112 LAST); 113 lr_end_transaction("页面加载",LR_AUTO); 114 return 0; 115 }
录制完成,设置LoadRunner的运行代理功能,主要是方便Fiddler工具抓取HTTP请求(Fiddler只能通过代理方式抓取请求,不支持网卡抓取)。
使用录制好的脚本,新建测试场景,这里不要建的过于复杂,只要能让脚本运行一次即可。运行成功后,从Fiddler上抓取的HTTP请求瀑布图看,6个并发的动态请求,全部变为串行执行,页面的加载时间由原来最大的请求时间决定,现变为6个请求时间之和(11.7秒),相同网络下,真实结果为:1-4秒不等。
录制完成后,设置proxy代理,方便fiddler抓取HTTP请求
从执行结果看,页面加载事务时间是2.8秒,Fiddler的抓包图看,最后6个动态请求是并发请求。
对于页面的动态请求,LoadRunner 12.60版本(笔者采用发稿时最新版本),是串行请求,导致测试结果的页面加时间变长,而kylinPET是并发请求(与真实浏览器情况相同),测试结果更接近于浏览器的真实结果 。
也就是说LoadRunner 12版本,对于静态请求的测试结果与真实情况比较接近,而如果是动态的请求,变得非常不可信。这也是为什么论坛中有人说,测试结果与真实结果差距大的原因。
联系客服