Assertion (断言)
ps:以当前版本5.1.1为例
1.Response Assertion(响应断言)
响应断言是几个断言里比较常用的断言,使用也比较简单。
主要三部分组成
测试字段:选择一个断言的原始内容,可以是响应头,也可以是文本,请求数据等等
匹配规则和调试模式:选择规则,是包含,还是被相等,还是否,或者等等,调试模式中写具体的值。
自定义失败消息: 这个不是必写,就是说假如断言失败返回什么信息。
例如一个接口,预期返回如下{code: 0, data: [], message: success},则可以这么写:
本地启了一个Flask,定义一个接口
浏览器访问效果是
然后jmeter中断言一下 “code”:0
添加一个断言监听器,否则如果断言成功,在结果树里是不显示的(失败了会显示出来)。
可以看到这里不是我们自定义的失败信息,说明断言成功了,另外需要说明的一点是,在响应断言里面,我们必须要写”code”而不是code,因为结果返回的里面就是加了引号的。
2.Size Assertion(大小断言)
这个感觉用的不多,单位是bytes,就是用来判断返回内容的大小。
3.XPath Assertion(XPath断言)
看这个界面,是不是跟Xpath提取器有点像,其实差不多,只不过这里就是用来断言是否存在而不需要找出来赋值变量。针对的是html,xml等文档格式而不是json接口。
例如我要找下百度一下的input。
xpath语句 ://input[@id=”su”]
放到jmeter中
执行以下,看结果
断言成功。
4.Json Assertion(Json断言)
Assert JSON Path exists: 这里写key,例如json中有一个key叫name那么就写 $.name, 就回去断言是否存在这个key。例如有多层,例如data下面的name,$.data.name。
Addltionally assert value: 勾选后,就可以填写Expected Value,在判断是否存在后还回去比较值是否符合预取。
Match as regular expression: 还是作用于Expected value,不想写的那么精准,断言下大概格式,规则和正则差不多。
Expect null: 预期有key但value为null,是一个快速选项,不能与Expected value共存。
json断言也比较简单,一般做测试都知道了接口预期是什么格式,假如是标准的json格式,而你又需要去判断返回值的某些key的value的值,那么使用这个再合适不过了。
举个简单点的例子,跟上面响应断言一下,假如接口返回{“code”:0,”data”:[],”message”:”success”}
想断言一下message这个key的value是success。
执行
断言成功,没有报错。
5.Compare Assertion(比较断言)
摘自网络
比较断言,用来比较两次取样结果,支持正则表达式过滤。一般不建议使用,因为会消耗较多的资源,常用来调试。Compare Assertion与Cpmparison Assertion Visualizer结合使用,前者进行设置,后者进行断言结果显示。
好吧,也没找到什么实例,那就不用了吧。
6.HTML Assertion(HTML断言)
摘自网络
HTML断言可以对HTML代码内容进行断言,支持XHTML和XML。
在HTML断言中利用JTidy来解析HTML代码,JTidy是HTML Tidy的Java实现版本,提供了HTML的语法检查器。JTidy可以用来清除格式不好喝不对的HTML,还提供对整个HTML的DOM分析。
简单点可以用来检测HTML,XHTML, XML语法是否规范。
其中,可以设置允许warning和error个数(Error threshold和Warning threshold)
访问下百度
渣渣百度,语法没all pass,报错了。
7.BeanShell Assertion(BeahShell断言)
看最下面
有一些已经定义好的变量,如果上面那些断言不够你用,那么使用BeanShell语法自己写判断规则吧。
用来访问JMeter的属性:
log对象,可以利用此对象写日志
SampleResult对象,从中获取响应数据、响应码等信息,只读
Respose对象,获取响应数据,只读
Failure,用来设置断言成功与否,Boolean类型
FailureMessage,用来设置失败信息
ResponseData对象,湖区响应数据
ResponseCode,响应码
ResponseMessage,响应信息
ResponseHeaders,响应投信息
RequestHeaders,请求头信息
SampleLabel,取样器Label信息
SamplerData,发送给服务器的数据
Ctx (JMeterContext),JMeter上下文信息,从中可以获取线程数、线程号等信息
Vars(JMeterVariables),获取JMeter中定义的变量,或者设置变量
(JMeterPoperties),获取JMeter中的属性,或者设置属性
其他几个方法:
getResponseDataAsString:从SampleResult获取响应数据
getResponseCode:从SampleResult获取响应消息
getResponseMessage:从SampleResult获取响应消息