常用的断言:
- 响应断言
- BeanShell 断言
1、响应断言
-
作用:断言用于验证取样器请求或对应的响应数据是否返回了期望的结果。
-
界面如下:
Apply to: -
Main sample and sub-samples
范围包括主取样器与所有子取样器。 -
Main sample only
范围仅限于主取样器。 -
Sub-samples only
范围仅限于所有子取样器。 -
JMeter Variable Name to use
范围包括使用的JMeter变量。
要测试的响应字段: -
响应文本:服务器响应文本,一般普通Http响应,就是察看结果树中的响应数据。
-
响应代码:指的是Reponse code响应代码,对于Http请求,比如:404,200等。但当我们要验证404,501等响应代码时,需要勾选“ignore status”,因为当http响应代码为400,500时,jmeter默认这个请求是失败的。
-
响应信息:指的是Reponse messsage,对于Http请求,比如OK,Not Found等。
-
响应头:响应头信息。
-
请求头:请求头信息。
-
URL样本:请求的URL,对于Http请求,若有重定向,则包含重定向后的URL。
-
文档(文本):通过Apache Tika各种类型的文档中提取文本。jmeter会用ApacheTika去解析服务器响应内容,会消耗内存,一般不选。
-
忽略状态:见响应代码。
-
请求数据:请求数据信息。
模式匹配规则: -
包括:返回结果包括指定的内容,支持正则匹配。
-
匹配:
(1) 相当于equals,当返回值固定时,可以返回值做断言,效果与equals相同。
(2) 正则匹配:用正则表达式匹配返回结果,但必须全部匹配,即正则表达式必须能匹配整个返回值,而不是返回值的一部分。 -
相等:返回结果与指定断言完全一致。
-
字符串:与“包括”差不多,都是指返回结果包括你指定的内容,不支持正则。 否:就相当于取反。如果上面断言结果为true,勾选“否”后,最终断言结果为false。如果上面断言结果为false,勾选“否”后,则最终断言结果为true。
-
否:见字符串。
-
或者:比如写了两个断言,一个可以成功,一个不会成功,勾选或者之后,请求会成功,不勾选或者,请求会失败。即真假为真。
注意:
Contains和Matches模式支持Perl5类型的正则表达式;
Equals和Substring模式使用文本字符串,不支持正则表达式;
我还发现断言中的正则不能匹配汉字,汉字是什么就写什么,用[\u4e00-\u9FA5]{2}这样匹配就会报错。
2、BeanShell 断言
-
作用:BeanShell断言可以使用beanshell脚本来执行断言检查,可以用于更复杂的个性化需求,使用更灵活,功能更强大。
-
界面如下:
-
示例:检验返回代码是否是200
-
代码如下:
//create by ybb
String responseData = prev.getResponseDataAsString(); //获取请求的返回结果
String code = prev.getResponseCode(); //获取请求的返回code码
String requestData = prev.getSamplerData(); //获取发出的请求数据
if( !code.equals("200") ){
//如果请求的相应状态码不是200
FailureMessage = "响应状态码不是:200,而是:" + code + ",请求失败!"; //自定义的失败信息
log.info(FailureMessage); //在日志里打印失败的信息
log.info("Request: " + requestData); //在日志里面打印失败的请求体
Failure = true; //表示断言失败
}
-
检验返回结果是否包含我自己定义的value值
-
代码如下:
//create by ybb
String value = "要断言的内容";
//获取请求的返回结果
String responseData = prev.getResponseDataAsString();
//判断返回结果是否包含value
if(responseData.indexOf(value)!= -1){
Failure = false;
FailureMessage = "包含" + value;
log.info(FailureMessage);
}else{
Failure = false;
FailureMessage = "不包含" + value;
log.info(FailureMessage);
}
参考博客:https://zhuanlan.zhihu.com/p/72917999
https://www.cnblogs.com/xiehong/p/11475105.html