🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快
在使用Jmeter进行性能测试或者接口自动化测试工作中,经常会用到的一个功能,就是断言,断言相当于检查点,它是用来判断系统返回的响应结果是否正确,以此帮我们判断测试是否通过。
本文主要介绍几种常用的断言:响应断言、JSON断言、BeanShell 断言
一、响应断言
-
响应断言是最常用的一种断言方法,它可以对各种返回类型的结果进行断言,比如Test、html、application/json等
-
在需要进行断言的Sample,点击右键》添加》断言》响应断言
![](https://i-blog.csdnimg.cn/blog_migrate/ed18388d8675c6a176ac2374ff792089.png)
- Apply to选项默认即可,Main sample only(仅作用于父节点取样器)
![](https://i-blog.csdnimg.cn/blog_migrate/f6b0af7b2b94232bfeca45a1a40ce878.png)
- 测试字段常用的有响应文本(对响应结果进行断言)、响应头(对响应头文件进行断言)
![](https://i-blog.csdnimg.cn/blog_migrate/3f0a3fe45f67f09c36323c7fa5d1f242.png)
- 模式匹配规则常用有包括(响应结果包括断言的内容),相等(响应结果和断言结果相同)
![](https://i-blog.csdnimg.cn/blog_migrate/8d1440d4f89346021a8993f6145a19bb.png)
- 测试模式可以添加你需要断言的部分,如果是包括,就可以添加多个
![](https://i-blog.csdnimg.cn/blog_migrate/cde8a591287a1af5346fc319929b9fb9.png)
- 执行测试,断言通过则显示绿色
![](https://i-blog.csdnimg.cn/blog_migrate/ae3309fc64697f655fc7a80ffb802cee.png)
- 把断言改成响应结果不存在的字段,执行结果,显示红色,断言结果显示系统响应结果不包含"测试断言"字段
![](https://i-blog.csdnimg.cn/blog_migrate/f88bcf4b23b2d8b7c91bdc2e2a788ff7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0ee57e39ada80a73e701c8764d3717b1.png)
二、JSON断言
- JSON断言也是测试工作中经常用到的一种断言方法,它只能针对响应结果是applicaton/json格式的请求进行断言
![](https://i-blog.csdnimg.cn/blog_migrate/a380bbeae93951d03225dbee19ad40fe.png)
-
在需要进行断言的Sample,点击右键》添加》断言》JSON断言
-
我们使用json断言,一般是断言某个字段值是否返回的是我们需要的,所以需要写JSON PATH(不会写的看本人另外一篇文章有介绍如何写),下图使用正则模式匹配返回的结果包含40就认为响应结果满足要求,断言配置和响应结果如下所示:
-
下面展示断言结果为常量时,如何进行断言设置,如下图所示
三、BeanShell断言
-
BeanShell断言支持各种开发语言,本文介绍使用java编写断言,使用BeanShell断言的好处是可以自由发挥,比如当断言失败,提示预期结果、实际结果,或者失败时把结果输出到日志
-
在需要进行断言的Sample,点击右键》添加》断言》BeanShell断言
![](https://i-blog.csdnimg.cn/blog_migrate/0b6e72708c3233a88b37569ac08a9469.png)
- 如果使用包含匹配,只需要修改预期结果即可,预期结果需要写在双引号之间,中间的双引号需要添加\转义,如下:
![](https://i-blog.csdnimg.cn/blog_migrate/72a1c15714dddc66c9c219fecc38a135.png)
String response = "";
String Str = "{\"errNo\":\"403\""; //预期结果,需要校验的字段
response = prev.getResponseDataAsString(); //获取当前请求响应结果
if(response == ""){
Failure = true;
FailureMessage = "系统无响应,获取不到响应数据!";
//对比数据库内容和响应内容,私用euqals方法判断是否一致
}
else if(response.contains(Str) == false){
//把断言失败置为真
Failure = true;
String Msg = "\n系统返回响应结果与期望结果不一致!请排查是性能问题,还是程序代码问题"; FailureMessage = Msg + "\n" + "期望结果:\n" + Str + "\n" + "响应内容: \n" + response +"\n";
}
- 使用完全相等匹配,并且失败时,输出结果到日志,本次把预期结果改错,所以会输出响应结果到错误日志,代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/79b1e5cf28fafd6358b211c5f87bc28d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/677dd0fef62c8156c9a2e082e4bb3660.png)
String response = "";
String Str = "{\"errNo\":\"401\""; //预期结果,需要校验的字段
response = prev.getResponseDataAsString(); //获取当前请求响应结果
if(response == ""){
Failure = true;
FailureMessage = "系统无响应,获取不到响应数据!";
log.info(FailureMessage);
//对比数据库内容和响应内容,私用euqals方法判断是否一致
}
else if(response.equals(Str) == false){
//把断言失败置为真
Failure = true;
String Msg = "\n系统返回响应结果与期望结果不一致!请排查是性能问题,还是程序代码问题"; FailureMessage = Msg + "\n" + "期望结果:\n" + Str + "\n" + "响应内容: \n" + response +"\n";
log.info(FailureMessage);
}
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
![](https://i-blog.csdnimg.cn/direct/270ad803ddaf4c50a481b0735db35840.png)
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。
![](https://i-blog.csdnimg.cn/blog_migrate/b5e58cb990edfc97288895b3e59c4a3e.jpeg)