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=(.*?)\\\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秒不等。


kylinPET脚本录制并运行

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

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


总结
对于页面的动态请求,LoadRunner 12.60版本(笔者采用发稿时最新版本),是串行请求,导致测试结果的页面加时间变长,而kylinPET是并发请求(与真实浏览器情况相同),测试结果更接近于浏览器的真实结果 。
也就是说LoadRunner 12版本,对于静态请求的测试结果与真实情况比较接近,而如果是动态的请求,变得非常不可信。这也是为什么论坛中有人说,测试结果与真实结果差距大的原因。
Loadrunner与kylinPET的能力对比测试--web动态请求的更多相关文章
- Heatmap.js v2.0 – 最强大的 Web 动态热图
Heatmap 是用来呈现一定区域内的统计度量,最常见的网站访问热力图就是以特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域的图示.Heatmap.js 这个 JavaScript 库可以实现 ...
- [置顶] java web 动态服务器
写了一个java web 动态服务器,主要通过内部类来实现,动态类使用了外部类,采用了 classforname 实例化,动态类的构造方法不能带参数, 效果都出来了,分享给有需要的 朋友.判断做的不够 ...
- 通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。
通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML. JavaScript 能够改变页面中的所有 HTML 元素 JavaScript 能够改变页面中的所有 HTML ...
- C1 能力认证——Web进阶
C1 能力认证--Web进阶 DOM节点操作-上 名称 描述 getElementById() 获取带有指定id的节点 getElementsByTagName() 获取带有指定标签名的节点集合 qu ...
- 深入web的请求过程
一.深入web的请求过程 1.1.B/S网络架构概述 · 从前端到后端,都基于应用层协议HTTP来交互数据.一个请求就对应了一个操作,完成操作之后就断开了连接.基于这样的特点可以用来满足海量的用户的操 ...
- 简单说明CGI和动态请求是什么
1. CGI是什么 CGI是common gateway interface的缩写,大家都译作通用网关接口,但很不幸,我们无法见名知意. 我们知道,web服务器所处理的内容都是静态的,要想处理动态内容 ...
- IIS 7 反向代理 URL重写 转发动态请求
一.反向代理是什么 有一篇文章说的挺好的 Nginx 反向代理.负载均衡.页面缓存.URL重写及读写分离详解 http://www.server110.com/nginx/201402/5534.ht ...
- 传统Web应用请求和响应特点【显示当前时间】
(1)请求:浏览器以HTTP协议的方式提交请求到服务器 (2)响应:服务器以HTTP协议的方式响应内容到浏览器 注意:HTTP是WEB大众化非安全协议 HTTPS是WEB安全协议,是基于HTTP协议的 ...
- unity+android权限--打开应用不弹权限,动态请求权限
因为笔者之前的游戏需要分享图片,会请求外部储存,第一次打开游戏就会出现弹窗: 很多人对这个很敏感,怕你访问到他们的照片隐私,看到这个权限就拒绝,甚至卸载,实际上我们只是想截屏游戏内容分享给其他玩家,但 ...
随机推荐
- git学习——git命令之创建版本库和版本退回
原文来至 一.创建版本库 版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追 ...
- 《深入理解计算机系统》实验三 —— Buf Lab
这是CSAPP的第三个实验,主要让我们熟悉GDB的使用,理解程序栈帧的结构和缓冲区溢出的原理. 实验目的 本实验的目的在于加深对IA-32函数调用规则和栈结构的具体理解.实验的主要内容是对一个可执 ...
- Python之re正则
1. 基本规则 # 元字符: # . ^ $ * + ? { } [ ] | ( ) \ # 字符类型匹配: # . 表示匹配任意一个字符(换行符除外) # [asdf] 表示匹配中括号里面的任意一个 ...
- 精尽Spring MVC源码分析 - 文章导读
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- thinkphp thinkphp6 安装JWT
第一步:composer安装 composer require firebase/php-jwt 下图是执行成功 cd 进入项目目录的vendor 找到firebase 看到下面有一个php-jw ...
- JavaSE19-IO特殊流和Properties集合
1.IO特殊操作流 1.1 标准输入流 System类中有两个静态的成员变量 public static final InputStream in:标准输入流.通常该流对应于键盘输入或由主机环境或用户 ...
- 环境篇:Atlas2.1.0兼容CDH6.3.2部署
环境篇:Atlas2.1.0兼容CDH6.3.2部署 Atlas 是什么? Atlas是一组可扩展和可扩展的核心基础治理服务,使企业能够有效地满足Hadoop中的合规性要求,并允许与整个企业数据生态系 ...
- Docker(六):Docker安装Kibana
查找Kibana镜像 镜像仓库 https://hub.docker.com/ 下拉镜像 docker pull kibana:7.7.0 查看镜像 docker images 创建Kibana容器 ...
- maven-assembly-plugin插件打jar包时排出指定的依赖
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- numpy和pandas-数据分析模块
应用:1.数据分析 2.深度学习 3.机器学习 运算速度快:numpy 和 pandas 都是采用 C 语言编写, pandas 又是基于 numpy, 是 numpy 的升级版本. 消耗资源少:采用 ...