SagacitySea 发表于 2022-6-10 15:44:48

Loadrunner与kylinPET的能力对比测试

被对象分析
  被测试对象URL:http://59.110.158.28/Example/,这是一个简单的登录和内容加载页面。
  首面登录界面:
http://bbs.51testing.com/data/attachment/forum/202112/31/132154iajzof8eeewee3y1.png
页面登录成功后的内容:
http://bbs.51testing.com/data/attachment/forum/202112/31/132211opeu8ev8pt30xot3.png
登录过程过程中,按下F12按钮,可以看到页面加载过程所有请求。getNews共有6个动态的并发请求。
http://bbs.51testing.com/data/attachment/forum/202112/31/132255pmu7umy8dgdtuuzy.png LoadRunner12.60录制脚本并运行:
  · 脚本录制
  使用LoadRunner12.60自带的录制功能,使用Chrome浏览器进行脚本录制(注意:录制过程需要安装一个fiddler,在录制脚本前,启动fiddler),录制完成后要进行自动关联和手动关联两个动作,
  自动关联ticket和手动关联:validateCode,否则脚本无法运行。以下是关联后,action部分内容展示,脚本中手工增加了一个页面加载事务(从提交登录至脚本请求结尾)

[*]Action()
[*]{
[*]
[*]    web_add_auto_header("Upgrade-Insecure-Requests","1");
[*]
[*]    web_reg_save_param_ex("ParamName=validateCode", "LB=validateCode\">","RB=<\/span>",LAST);
[*]
[*]    web_url("Example",
[*]      "URL=http://59.110.158.28/Example/",
[*]      "Resource=0",
[*]      "RecContentType=text/html",
[*]      "Referer=",
[*]      "Snapshot=t45.inf",
[*]      "Mode=HTML",
[*]      EXTRARES,
[*]      "Url=images/button/btn_login.png", "Referer=http://59.110.158.28/Example/css/login.css", ENDITEM,
[*]      LAST);
[*]
[*]    web_add_auto_header("Origin",
[*]      "http://59.110.158.28");
[*]
[*]/*相关性注释 - 切勿更改!Original value='ST-1610868492644' Name ='ticket' Type ='ResponseBased'*/
[*]    web_reg_save_param_regexp(
[*]      "ParamName=ticket",
[*]      "RegExp=ticket=(.*?)\\\r\\\n",
[*]      SEARCH_FILTERS,
[*]      "Scope=Headers",
[*]      "IgnoreRedirections=No",
[*]      "RequestUrl=*/login*",
[*]      LAST);
[*]
[*]lr_start_transaction("页面加载");
[*]
[*]    web_submit_form("login",
[*]      "Snapshot=t46.inf",
[*]      ITEMDATA,
[*]      "Name=name", "Value=admin", ENDITEM,
[*]      "Name=password", "Value=admin", ENDITEM,
[*]      "Name=validate", "Value={validateCode}", ENDITEM,
[*]      LAST);
[*]
[*]    web_revert_auto_header("Upgrade-Insecure-Requests");
[*]
[*]    web_add_auto_header("X-Requested-With",
[*]      "XMLHttpRequest");
[*]
[*]
[*]    web_submit_data("getNews",
[*]      "Action=http://59.110.158.28/Example/getNews",
[*]      "Method=POST",
[*]      "RecContentType=text/plain",
[*]      "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
[*]      "Snapshot=t47.inf",
[*]      "Mode=HTML",
[*]      ITEMDATA,
[*]      "Name=times", "Value=6", ENDITEM,
[*]      LAST);
[*]
[*]    web_submit_data("getNews_2",
[*]      "Action=http://59.110.158.28/Example/getNews",
[*]      "Method=POST",
[*]      "RecContentType=text/plain",
[*]      "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
[*]      "Snapshot=t48.inf",
[*]      "Mode=HTML",
[*]      ITEMDATA,
[*]      "Name=times", "Value=1", ENDITEM,
[*]      LAST);
[*]
[*]    web_submit_data("getNews_3",
[*]      "Action=http://59.110.158.28/Example/getNews",
[*]      "Method=POST",
[*]      "RecContentType=text/plain",
[*]      "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
[*]      "Snapshot=t49.inf",
[*]      "Mode=HTML",
[*]      ITEMDATA,
[*]      "Name=times", "Value=4", ENDITEM,
[*]      LAST);
[*]
[*]    web_submit_data("getNews_4",
[*]      "Action=http://59.110.158.28/Example/getNews",
[*]      "Method=POST",
[*]      "RecContentType=text/plain",
[*]      "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
[*]      "Snapshot=t50.inf",
[*]      "Mode=HTML",
[*]      ITEMDATA,
[*]      "Name=times", "Value=5", ENDITEM,
[*]      LAST);
[*]
[*]    web_submit_data("getNews_5",
[*]      "Action=http://59.110.158.28/Example/getNews",
[*]      "Method=POST",
[*]      "RecContentType=text/plain",
[*]      "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
[*]      "Snapshot=t51.inf",
[*]      "Mode=HTML",
[*]      ITEMDATA,
[*]      "Name=times", "Value=2", ENDITEM,
[*]      LAST);
[*]
[*]    web_submit_data("getNews_6",
[*]      "Action=http://59.110.158.28/Example/getNews",
[*]      "Method=POST",
[*]      "RecContentType=text/plain",
[*]      "Referer=http://59.110.158.28/Example/index.jsp?ticket={ticket}",
[*]      "Snapshot=t52.inf",
[*]      "Mode=HTML",
[*]      ITEMDATA,
[*]      "Name=times", "Value=3", ENDITEM,
[*]      LAST);
[*]lr_end_transaction("页面加载",LR_AUTO);
[*]    return 0;
[*]}

复制代码
录制完成,设置LoadRunner的运行代理功能,主要是方便Fiddler工具抓取HTTP请求(Fiddler只能通过代理方式抓取请求,不支持网卡抓取)。
http://bbs.51testing.com/data/attachment/forum/202112/31/132401zdedc2xh106z0l12.png 脚本执行:
  使用录制好的脚本,新建测试场景,这里不要建的过于复杂,只要能让脚本运行一次即可。运行成功后,从Fiddler上抓取的HTTP请求瀑布图看,6个并发的动态请求,全部变为串行执行,页面的加载时间由原来最大的请求时间决定,现变为6个请求时间之和(11.7秒),相同网络下,真实结果为:1-4秒不等。
http://bbs.51testing.com/data/attachment/forum/202112/31/132420kvonh293hnry22i9.png

http://bbs.51testing.com/data/attachment/forum/202112/31/132448z282az883cuio6av.png  kylinPET脚本录制并运行
http://bbs.51testing.com/data/attachment/forum/202112/31/132505xzrbgg691wdpeghw.png
录制完成后,设置proxy代理,方便fiddler抓取HTTP请求。
http://bbs.51testing.com/data/attachment/forum/202112/31/132540srwe6d9tcnncm6em.png
脚本执行
  从执行结果看,页面加载事务时间是2.8秒,Fiddler的抓包图看,最后6个动态请求是并发请求。
http://bbs.51testing.com/data/attachment/forum/202112/31/132557fd32d0ygn2agngcz.png

http://bbs.51testing.com/data/attachment/forum/202112/31/132628jqfr77qrq7f7qttq.png 总结
  对于页面的动态请求,LoadRunner12.60版本(笔者采用发稿时最新版本),是串行请求,导致测试结果的页面加时间变长,而kylinPET是并发请求(与真实浏览器情况相同),测试结果更接近于浏览器的真实结果。
  也就是说LoadRunner12版本,对于静态请求的测试结果与真实情况比较接近,而如果是动态的请求,变得非常不可信。这也是为什么论坛中有人说,测试结果与真实结果差距大的原因。




kallinr 发表于 2022-6-10 16:15:22

涨姿势了
页: [1]
查看完整版本: Loadrunner与kylinPET的能力对比测试