失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 三款性能测试工具kylinPET LoadRunner Jmeter在脚本录制与调试上的差异性

三款性能测试工具kylinPET LoadRunner Jmeter在脚本录制与调试上的差异性

时间:2024-04-24 21:15:56

相关推荐

三款性能测试工具kylinPET LoadRunner Jmeter在脚本录制与调试上的差异性

软件的性能测试活动离不开性能测试工具的支持。国外常用的性能测试工具有:loadRunner(商用),Jmeter(开源),国内做的比较好的国产性能工具有kylinPET。性能测试工具的录制和调试是能力的高低,是判断性能测试工具优劣重要指标。下面笔者通过实例来分析一下这三款知名本和调试上的差异点。

1、性能测试测试工具版本

2、三款性能测试工具的脚本录制差异点汇总

3、差异点对比

3.1录制与回放对比

kylinPET的录制与回放的比较,可以明显示看到两次请求的响应差异

loadRunner提供两次回放日志的比较:从对比结果看,提供的不是原生http请求结果的结果比较,很难判断两次回放的http请求响应的差异

4、三款性能测试工具脚本录制与回放全过程

4.1、被测度对象URL

http://59.110.158.28/Example/登录接口

4.2、录制脚本

4.1kylinPET

步骤 1:启动"脚本编辑器"进行脚本录制

点击确认,开始加录制,如下所示:按提示输入密码和验证码

点点登录按钮进入加载页面

步骤 2:加载页面加载完成后,点击结束录制按钮,生成如下的脚本文件

步骤 3:点击回放按钮,回放脚本,如下所示,显示有很多的错误,表示回放不成功。

步骤 4:关闭弹出的对话框,再点击 “比较与关联” 按钮,弹出需要关联的对话框,然后点击 “关联所有” 按钮

步骤 5:再次点击 “回放” 按钮,提示回放成功,不再有红色字体

4.2LoadRunner录制

步骤 1:启动 Virtual User Generator,准备录制脚本(录制时建议启动 Fiddler 软件,只有这样脚本才能顺畅录制,该方法也是从其它网友学习的经验,如果不打开 Fidder 将会很慢或录制失败)

步骤 2:新建脚本

步骤 3:点击录制按钮,在弹出的对话框中输入需要录制的 URL 和使用的浏览器(这里选择 Chrome)

步骤 4:点击"开始录制” 按钮,进行录制,按提示输入密码和验证码

提交登录时,新建一个开始事务,加完毕后,结束事务。

最后录制生成的脚本如下所示:

Action(){web_add_auto_header("Upgrade-Insecure-Requests", "1");web_url("Example", "URL=http://59.110.158.28/Example/", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t47.inf", "Mode=HTML", EXTRARES, "Url=images/button/btn_login.png", "Referer=http://59.110.158.28/Example/css/login.css", ENDITEM, "Url=../favicon.ico", ENDITEM, LAST);web_add_auto_header("Origin", "http://59.110.158.28");lr_start_transaction("1_transaction");web_submit_form("login", "Snapshot=t48.inf", ITEMDATA, "Name=name", "Value=admin", ENDITEM, "Name=password", "Value=admin", ENDITEM, "Name=validate", "Value=2362", 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=ST-1631004678659", "Snapshot=t49.inf", "Mode=HTML", ITEMDATA, "Name=times", "Value=5", 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=ST-1631004678659", "Snapshot=t50.inf", "Mode=HTML", ITEMDATA, "Name=times", "Value=2", 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=ST-1631004678659", "Snapshot=t51.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=ST-1631004678659", "Snapshot=t52.inf", "Mode=HTML", ITEMDATA, "Name=times", "Value=1", 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=ST-1631004678659", "Snapshot=t53.inf", "Mode=HTML", ITEMDATA, "Name=times", "Value=3", 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=ST-1631004678659", "Snapshot=t54.inf", "Mode=HTML", ITEMDATA, "Name=times", "Value=6", ENDITEM, LAST);lr_end_transaction("1_transaction",LR_AUTO);return 0;}

步骤 6:脚本调试,从脚本调试结果全部通过(录制脚本笔者未做任何改动和关联)。

到此为止,如果你认为脚本调试通过,那后面的工作,一切都是白做。对 loadRunner 软件与 Jmeter 类似,如果 http 请求返回 20X-599 之间的响应码,他们都认为 http 返回是正确,这就造成在测试过程产生巨大的错误。

要命的是 LR 在回放过程看不到 http 请求的返回的详细信息,很难判断脚本是否真实通过。如果 LR 在回放时设置为 HTTP 代理模式,同时打开 Fiddler 工具来检查,也是一个行之有效的办法,或者可录制过程不断的添加检查点都是行之有效的办法。

回放过后,可以在 Fiddler 里面看到每个请求的返回结果。

步骤 6:参数关联

LR 毕竟是商业工具,对于验证码、JSESSIONID、ticket 三个需要关联的参数,其中 JSESSIONID 和 ticket 作了自动处理,无需要用户手工关联。

用户只需要手工关联验证码即可,同时对应的登录验证码值修改为{validateCode}变量

步骤 7:再次回放,回放后,再次查看 Fiddler 拦截的 http 请求,getNews 接口已经有了返回数据。

4.3 Jmeter脚本录制

步骤 1:如下图所示在 Jmeter 上创建一个线程组和一个察看结果树

线程数:表示运行时,启动的线程数,每个线程循环运行线程组内的http请求,每循环一次,相当于一个虚拟用户循环次数:线程运行线程组内的HTTP请求的次数 Ramp-up时间(秒):启动指定线程数需要的时间。0表示 JMeter 将立即建立所有线程。

步骤 2:Jmeter 上创建一个 HTTP 代理服务器

目标控制器:指定脚本存放的位置分组:1)不对样本分组”:所有请求全部罗列2)在组间添加分隔:加入一个虚拟的以分割线命名的动作,运行同“不对样本分组”,无实际意义3)每个组放入一个新的控制器:执行时按控制器给输出结果4)只存储每个组的第一个样本”:对于一次url请求,实际很多次http请求的情况,这个选项很好用,因为我们常常是不关心后面的那些请求的。5)HTML文件中获取所有内含的资源:勾选表示HTML文件中获取所有内涵的资源。

步骤 3:设置浏览器为代理模式

注意:设置完要注意保存

步骤 4:启动 Jmeter 的代理服务器

启动后有一个录制控制台

步骤 5:打开浏览器输入要录制的 URL

登录页面

登录后的页面加载

录制后生成的脚本

步骤 6:脚本调试

在线程组下面添加察看结果树和聚合报告查看回放的情况。

脚本调试是性能测试过程非常重要的步骤之一,笔者径常遇到,很多测试人员,测试一周多都是白测试,因为脚本自认为调试成功了,而往往事实并没有调试成功。下面我们来调试一下本次录制的脚本。

运行脚本,执行结果如下,看起来是所有的请求都运行成功,如果你也是这样认为,那也一样掉进了坑里。

对于大部分的性能测试工具,如:LR,Jmeter 等,如果 http 响应如果返回响应码是 20X-30X 则认为是正常,如果返回 40X-599 就认为是失败的。

下图所示,请求响应:用户登录失败,在跳转失败页面....

进一步检测响应头信息:响应码是 200,Jmeter 调试结果当作请求返回成功。

下面的 81 /Example/getNews,返回显示未登录,但结果察看树显示请求也是正常,也是同样的原因(错误码返回 200)

通过上面例子看,脚本调试脚本是多么的困难了。结果树请求都通过,并不代表脚本调试成功。

那么有没有什么办法来证明脚本真正的成功的呢?有的,可以通过添加检查点或直接查看请求返回结果。

一般来说需要检查每个页面的关键信息,你也可以直接查看关键 http 请求的返回信息来验证。

针对本文本案例样本处理三个地方才能让脚本真正的调试通过:验证码、JSESSIONID、ticket

1)验证码:可以通过添加边界提取器完成

2)sessionid 的处理:可以添加 HTTP Cookie 管理器,让 Jmeter 自动处理

3)ticket:正则表达式提取器。因为 JSESSIONID 的值到行尾,无法使用边界提取器处理。

步骤 7:再次调试,如下图所示,请求可以正常返回数据了

如果觉得《三款性能测试工具kylinPET LoadRunner Jmeter在脚本录制与调试上的差异性》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。