玩转Jmeter之jmeter元器件断言4
Jmeter常见的断言:
<1>. 使用响应断言 -- 可以满足大多数的需求
匹配范围:
Main sample and sub-samples:匹配范围为当前父取样器,及子取样器
Main sample only :仅当前父取样器(默认)
Sub samples only:仅子取样器
JMeter Variable:变量值进行匹配
匹配对象:
(1)响应文本:响应服务器返回的文本内容,http协议排除header部分
(2)响应代码:匹配响应代码,比如http请求中‘200’代表成功
(3)响应信息:匹配响应信息,处理成功返回‘成功’或者“ok”字样
(4)响应头:匹配响应头中的信息
(5)URL样本:匹配URL链接中的内容
忽略状态: 如果勾选,不会强制检查响应状态码,直接断言内容
匹配规则:
包括:响应内容包括需要匹配的内容就算成功。可以写正则表达式
匹配:响应内容要完全匹配内容,不区分大小写
equals:完全相等,区分大小写
substring:响应内容包括匹配内容即为成功,区分大小写
否:匹配规则取反
或者:如果一次检查多项内容,勾选后除非全部失败,否则即为断言通过。
测试模式:预期结果
<2>.*持续时间断言:
判断是否在给定的时间内返回响应结果,有的接口响应可能比较慢,需要设置下断言持续时间
<3>.JSON断言:
Assert JSON Path Exist:json path表达式
Additionally assert value:文本验证,此处是完全匹配
Match as regular expression:支持正则表达式匹配。如果勾选,预期结果可以是正则表达式:比如 [0-9]{8}
Expected value:预期结果值
Expect null:判定返回为null
Invert assertion:倒置断言结果--上面的条件满足,反而是失败
判断方式:
如果响应结果不是json格式的,fail
如果json path找不到元素,fail
如果json path找到元素,没有设置条件,pass
如果json path找到元素了,不符合条件,fail
如果json path找到元素,且符合条件,pass
如果json path返回的是一个数组,迭代判断是否有元素符合条件,有则pass,无则fail
<4>.Xapth断言:
验证 html或xml响应中是否包含 xpath表达式的节点
Use Tidy:当需要处理的页面是HTML格式时,必须选中该选项;如果是XML或XHTML格式,则取消选中
<5>. 自由断言: BeanShell 断言
(1). Bean Shell常用内置变量
JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:
log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);
Ctx:该变量引用了当前线程的上下文,使用方法可参考:org.apache.jmeter.threads.JMeterContext。
ResponseCode:响应状态码
ResponseMessage:响应信息
Vars - (JMeterVariables):操作jmeter变量
这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:
a) vars.get(String key):从jmeter中获得变量值
b) vars.put(String key,String value):数据存到jmeter变量中
Props :操作jmeter属性,该变量引用了JMeter的配置信息,可以获取Jmeter的属性,它的使用方法与vars类似,但只能put进去String类型的值
a) props.get("START.HMS");
b) props.put("PROP1","1234");
Prev - (SampleResult):获取前面的sample返回的信息,常用方法:
a) getResponseDataAsString():获取响应信息
b) getResponseCode() :获取响应code
(2). 除了可以使用beanshell的内置变量外,主要通过 Failure 和 FailureMessage来设置断言结果
示例:
if ("200".equals(""+ResponseCode) == false)
{
// 响应码不等于200时,设置断言失败,并输出失败信息
Failure=true ;
FailureMessage ="响应状态码非200,是 " + ResponseCode + "." ;
print ( "the return code is " + ResponseCode);
log.info( "the return code is " + ResponseCode);
} else {
// 响应码等于200时,设置断言成功,并输出成功信息
Failure=false;
FailureMessage = "响应状态码正确" + ResponseCode;
}
(3). 直接使用${name},引用系统变量
总结:jmeter断言可以使用多个,其中响应断言可以添加多个,json断言只针对请求响应内容是json才使用,如果请求返回的是html或者xml,
则需要添加xpath断言