其他文章
每天15分钟JMeter入门篇(一):Hello JMeter
每天15分钟JMeter入门篇(二):使用JMeter实现并发测试
每天15分钟JMeter入门篇(三):认识JMeter的逻辑控制器
每天15分钟JMeter入门篇(四):认识JMeter中的函数
每天15分钟JMeter入门篇(五):认识JMeter中的Test Fragment
每天15分钟JMeter入门篇(六):学会用好JMeter中的断言
每天15分钟JMeter入门篇(七):认识JMeter中的监听器
每天15分钟JMeter进阶篇(1):JAVA 取样器的基本使用
每天15分钟JMeter入门篇(六):学会用好JMeter中的断言
前言
JMeter中的断言是个很重要的组件,无论是做性能测试还是用JMeter做接口自动化测试,都会频繁的用到断言。断言简单的说你可以理解是检查点,你可以添加一个断言并设置预期结果,JMeter会将http响应的内容与你设置的预期结果做比较,如果一致则测试通过,如果不一致则测试失败。断言的执行结果在结果查看器中对可以看到 。
这部分的内容有点多,会随着学习的进度补充完善。
JMeter中的的断言
在JMeter 5.4.1中,一共提供了14中的断言,外加一个断言持续时间。断言一般加在取样器的下面,也就是取样器执行完会执行断言。你也可以和取样器平级,具体取决于你的测试需求。
由于断言如此重要,因此这里不再用列表的方式来学习。为了方便讲解,我们会先创建一个脚本,这个脚本的取样器不复杂,只有一个Http请求,请求的是csdn的首页,我们会在这个取样器后面添加各种断言,熟悉断言的用途。
【要注意的是,JMeter的结果查看树只显示测试失败的断言,测试通过的断言不会显示】
写脚本的过程不再赘述,步骤可以查看每天15分钟JMeter入门篇(一):Hello JMeter
这里直接放上完成后的脚本截图:
运行脚本后,可以在查看结果树中看到返回的报文
有这个响应报文就足够我们学习和讨论了。
JMeter中的的断言
在CSDN首页展现节点上右键——添加——断言,可以根据自己的需要添加断言。
响应断言
每一个http请求正常执行的话都会返回服务器的响应报文,响应断言可以对服务器的响应内容进行检查。
响应断言可以检查的内容包括:
- 响应文本 也就是服务器返回的响应内容
- 响应代码 服务器返回的http代码,200是正常,301是重定向,401是无权限,500是服务器内部错误,更多的Http响应可以自行百度。
- 响应信息 响应代码对应的响应信息,例如200对应的信息就是OK,具体的信息文本可以在结果查看器中的“取样器结果”里看到,分别是
Response code:200
Response message:OK
- 响应头 验证Response Header中的信息,检查失败时的信息需要自己定义,写在“自定义失败消息”里
- 请求推 验证Request Header中的信息
- URL样本 验证的是取样的url,这儿我自己基本没用过。
- 文档(文本) 通过Apache Tika从document提取各种文本并进行匹配,Apache Tika你可以理解是一个语言抽取工具,但是具体我也没用过。
- 忽略状态复选框,忽略http返回状态,如果勾选该复选框,则无论你的响应报文的状态是200还是401,并且会屏蔽你说设置的所有关于响应状态的失败消息,也就是勾选这个复选框,那么JMeter就认为你的响应状态永远是正确的。
- 请求数据 发送给服务器的报文数据,这个在接口自动化测试中经常用到。接口自动化测试中有时我们会通过代码构造报文发送给服务器,然后对系统进行检查。有了“请求数据”断言,我们就可以构造出来的报文本身进行校验,避免发送错误的报文给服务器。
例如我们要校验网站首页中返回的响应报文,应该包含“自动化测试”,当然实际上它不会包含,设置如下。
主义匹配模式是“包含”
然后我们执行脚本,并在结果察看树中,我们可以这个失败的断言
响应断言中其他几种字段的用法类似。只有响应头和请求头需要自己写失败信息。
JSON断言
json断言可以对服务器返回的JSON报文进行校验。刚才网站首页返回的是html,而在b/s系统中前段和后端经常使用json作为数据传输格式。
json断言的界面如下:
json断言的原理如下:
- 首先判断返回的内容是否为一段JSON格式的内容,如果不是JSON,则失败;
- 其次,判断所设置的Assert JSON Path exists是否存在,也就是你写一个JSON 的路径,JMeter判断这个路径是否在json报文中存在,不存在则失败;
- 再次,如果json路径存在,则判断json字段的值是否和预期值一致(Expected Value)
- 如果要校验null值,需要勾选expect null 浮选框
- Invert assertion 勾选这个浮选框后,如果上面的条件满足,则返回失败,注意是失败。
大小断言(Size Assertion)
大小断言可以对响应报文的size进行校验,设置界面如图:
这些字段还是一目了然的。但是这个字段我很少用,真要校验服务器返回的报文是否正确,直接校验里面的内容更靠谱。在性能测试中有时会用它来校验服务是否已经阻塞或者不响应。
JSR223 断言
简单的说就是用javascript脚本去写断言。很少用,估计也不会用到,不详细看
XPath2 Assertion
xpath是xml的查询语言,就像我们写select去查询数据库的内容,我们可以写/bookstore获取xml中的bookstore节点。如果你返回的报文内容是一段xml格式的数据,你可以定义一个XPath2 Assertion对它进行匹配校验。
比较断言(Compare Assertion)
比较断言比较特殊,它的作用有两个,一是替换断言中的字符串,而是比较执行时间。根据官方文档,这个断言严禁用在性能测试中,因为会耗费大量的CPU资源,但是在接口自动化测试中会有很多的应用,因为你可以通过正则表达式替换断言中的文本。放一个官方文档的图:
针对比较断言,JMeter提供了一个比较断言可视化器,来查看它的执行结果,这也是它和其他断言不一样的地方。
HTML断言 (待完善)
对响应类型为html的内容进行匹配。