性能测试之JMeter断言

导读
介绍响应断言的用法
请求重定向的问题
1、从浏览器登录Redmine
(1)从浏览器登录Redmine,使用正确的用户名、密码登录,登录完成后,右上角显示登录账号的名称,如下图所示: 

è¿éåå¾çæè¿°

(2)使用错误的用户名、密码登录,会提示登录失败,然后右上角还是登录按钮,如下图所示: 

è¿éåå¾çæè¿°

上面这个现象很正常,符合我们的预期。

2、使用JMeter发送请求
(1)正确的用户名、密码 
之前发送的请求都是使用正确的用户名、密码,能够请求成功。

(2)错误的用户名、密码 
发送请求,仍然会提示成功,额,什么原因呢? 
 è¿éåå¾çæè¿°
默认情况下,JMeter会将响应码是200的默认为请求发送成功,没错,这个请求确实送达了服务器,服务器也给了响应,只不过告诉你“用户名或密码错误”。由于我们是要对登录功能进行压测,假如1000个人并发登录,只有100个人能正常登录,其余900个人登录失败,这肯定不是我们要的结果。所以在这个场景下,只有登录成功,才能算压测成功。这时候就需要给响应结果加个断言(检查点)了。

3、JMeter断言
(1)给JMeter登录请求添加一个断言(Response Assertion) 

è¿éåå¾çæè¿°
(2)Response Assertion页面 

è¿éåå¾çæè¿°
Name名称:随意设置,就是这个断言的名字;
comments注释:描述性文字,可以为空;
Apply to:应用范围,有4个选项 
Main sample and sub-samples:匹配当前父取样器及其子取样器
Main sample only:匹配当前父取样器;
Sub-sample only:仅匹配子取样器;
JMeter Variable Name to use:支持对JMeter变量值进行匹配
Field to Test:要测试的区域,9个选项 
Text Response:服务器返回响应的文本内容,HTTP协议排除Header部分;
Response Code:响应的状态码,200,404等
Response Message:响应的message,“OK”等
Response Headers:响应的Headers;
Request Headers:请求的Headers;
URL Sample:匹配URL链接
Document(text):对文档内容进行匹配,查看结果树,响应数据标签内容
Ignore Status:一个请求有多个响应断言,假如第一个断言选中此项,当第一个断言失败时,忽略,继续下一个断言(有什么用???)
Request Data:请求数据
Pattern Maching Rules:模式匹配规则,4个选项 
Contains:上面要测试的区域包含要匹配的内容,则成功,支持正则
Maches:被测区域要完全匹配需要匹配的内容,则成功,大小写不敏感,支持正则
Equals:被测区域要完全等于需要匹配的内容,则成功,大写小敏感,需要匹配的是字符串,不是正则
Substring:被测区域要包含需要匹配的内容,则成功,大小写敏感,需要匹配的字符串而不是正则
Not:配合前面的选项使用,比如配合Contains使用,就是不包含
Or:或
Pattern to Test:要匹配的字符串或者正则,可以填多个,如果不选Or,就是都要匹配,如果选Or,就是匹配其中一个就算成功
Custom failure message:自定义匹配失败时候的信息。

(3)添加登录请求的断言 

è¿éåå¾çæè¿°

这里我们使用断言“如果没有匹配到无效的用户名字样”就说明登录成功了。

(4)使用错误的用户名、密码登录,看看结果 

è¿éåå¾çæè¿°

可以看到,确实登录请求失败了,提示信息,就是我们前面自定义的信息。

(5)使用正确的用户名、密码登录试试 
请求没有报错

4、换个断言
(1)换个断言 
前面我们断言登录成功,是通过,其检查没有登录失败的提示信息来做检查点,这个有点怪怪的。一般来说,我们断言登录成功,会使用检查页面是否显示登录名来做断言。好,我们替换一下断言试试。 

è¿éåå¾çæè¿°

我们断言响应中应该包含user1(登录用户名),发送请求试试 
 è¿éåå¾çæè¿°
很不幸,失败了,赶紧来看看登录请求的响应中是否包含user1 

è¿éåå¾çæè¿°

我擦,一搜索,果然不包括user1,这和我们从页面上看到的不一样啊,什么鬼?

(2)抓包看看

打开Chrome浏览器;右键,检查,(或者按Ctrl + Shift + I)打开开发者工具
切换到Network标签
打开Redmine登录页,http://192.168.132.134:8080/redmine/login
点击clear,先清除一下多于的信息
输入用户名密码,点击登录按钮,登录Redmine
查看截获到的请求如下图所示: 

è¿éåå¾çæè¿°

可以看到login本身这个请求,返回码是302,302是什么?重定向,重定向到了哪里?下面一个请求,重定向到了http://192.168.132.134:8080/redmine/ 
在来分别看看两个请求,发现第一个请求的响应确实没有user1的信息,而哪个重定向的请求响应才有user1的信息,如下图所示: 

è¿éåå¾çæè¿°

问题应该是找到了,Badbody只录制到了登录请求本身,但是重定向的请求并没有录制到,所以回放的时候自然没有回放这个重定向的请求,那么页面响应自然也拿不到。

(3)修改JMeter脚本 
将登录请求,修改为“跟随重定向”,如下图所示: 

è¿éåå¾çæè¿°

(4)回放脚本试试 

è¿éåå¾çæè¿°

成功了!完美,看看登录请求有两个子请求,一个是登录本身,一个是重定向请求,在重定向请求的响应中,能看到usr1的信息。

小结
JMeter提供的断言种类很多,本节我们只介绍了响应断言的用法,其它的我们后续介绍。只靠JMeter来检查响应码是不能完全判定请求成功的,还需要我们给请求加上适当的断言。
 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值