程序地带

Loadrunner与kylinPET的能力对比测试--web动态请求


概述      

在《性能测试工具选择策略--仿真度对比测评分析报告》一文详细分析了使用相同的web页面,分别使用LoadRunner,Jmeter,kylinTOP工具进行录制脚本并执行得出在静态请求页面下,Loadrunner12与kylinTOP的仿真能力都非常的高,接近真实场景。这次我们进一步分析,对于对态请求界面,两者的差异性(这次我们改用kylinPET与LoadRunner12.60进行对比分析)。


被对象分析

 被测试对象URL:http://59.110.158.28/Example/  ,这是一个简单的登录和内容加载页面。


 首面登录界面



 页面登录成功后的内容:


 



登录过程过程中,按下F12按钮,可以看到页面加载过程所有请求。getNews共有6个动态的并发请求。



LoadRunner12.60录制脚本并运行:
脚本录制

使用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=(.*?)\ \ ",
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 }
View Code

 


录制完成,设置LoadRunner的运行代理功能,主要是方便Fiddler工具抓取HTTP请求(Fiddler只能通过代理方式抓取请求,不支持网卡抓取)。



脚本执行:

        使用录制好的脚本,新建测试场景,这里不要建的过于复杂,只要能让脚本运行一次即可。运行成功后,从Fiddler上抓取的HTTP请求瀑布图看,6个并发的动态请求,全部变为串行执行,页面的加载时间由原来最大的请求时间决定,现变为6个请求时间之和(11.7秒),相同网络下,真实结果为:1-4秒不等。



   


     


kylinPET脚本录制并运行


录制完成后,设置proxy代理,方便fiddler抓取HTTP请求


  


脚本执行

从执行结果看,页面加载事务时间是2.8秒,Fiddler的抓包图看,最后6个动态请求是并发请求。



 



 


总结

    对于页面的动态请求,LoadRunner 12.60版本(笔者采用发稿时最新版本),是串行请求,导致测试结果的页面加时间变长,而kylinPET是并发请求(与真实浏览器情况相同),测试结果更接近于浏览器的真实结果 。


也就是说LoadRunner 12版本,对于静态请求的测试结果与真实情况比较接近,而如果是动态的请求,变得非常不可信。这也是为什么论坛中有人说,测试结果与真实结果差距大的原因。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/kylinTOP/p/14290424.html

随机推荐

JavaScript内置对象Date

调用JavaScript内置的对象Date,可以得到当前的“年月日周时分秒”,同时将其显示在网页上。具体代码如下:<!DOCTYPEhtml>&l...

大灰煜 阅读(180)

安全模式 提权_渗透利器 | 提权辅助工具箱

作为技术宅的我,日常最大的爱好就是逛论坛。某日看到论坛里有一款基于主机的漏洞扫描工具,用来查找主机上公开EXP的CVE。嗯嗯,我想还是叫提权辅助工具可能会更顺...

weixin_39559750 阅读(775)

DTD的学习应用

DTD的学习应用一、DTD概述1、定义DTD:DocumentTypeDefinition,翻译过来就是:文档类型定义。它使用一系列元素来定义文档的结构&#x...

小东呱呱 阅读(992)

Linux 如何编写makefile详解

Linux 如何编写makefile详解

文章目录前言一、makefile三要素二、写法1.makefile1.1版本2.makefile1.2版本3.makefile1.3版本4.makefile最终版本总结前言Linuxc/c+&...

Li_Zhi_Yao 阅读(484)

dbeaver 下载 - Download

DBeaver百度云下载,DBeaver下载速度慢官网链接:DBeaverCommunityDownloadDBeaverCommunityEdition6.3.5DBeaverCommunityEd...

sirdong 阅读(623)

类中的特殊成员

类中的特殊成员c++中一个类中无非有四种成员:静态数据成员和非静态数据成员,静态函数和非静态成员函数。一:常数据成员与常成员函数1.1常数据成...

-.- && 阅读(920)