jmeter断言
断言:验证服务器返回的数据是否满足我们的要求
即LR中的检查点,是对响应结果做一个判断,我们在请求一个网址时会有返回数据,那怎么判断请求是正确的呢,就需要对某一字段或内容进行匹配,如果跟预想的一样就认为请求是正确的,否则是失败的
使用断言的目的:在request的返回层面增加一层判断机制(因为request成功了,并不代表结果一定正确)
针对何时使用JMeter断言,下面给出了一些建议:
(1)请求使用的是来自“CSV数据集配置”的数据
(2)使用的HTTP的POST、PUT、PATCH方法
(3)登录和注销后
(4)当2xx status codes同时在正面测试和负面测试中返回
(5)在API性能测试中
(6)在功能测试中
(7)有SOAP / XML-RPC请求
需要注意:断言消耗内存,谨慎使用
断言类型
如果没有断言只能人工对比对接口返回的数据,接口很多时,比对数据的过程就会非常耗时,而且也容易出错,可以通过Fiddler抓包http请求来设置
1、响应断言
在使用该断言时,需要熟练使用正则表达式,如果请求中使用了变量,响应内容里写${variable}
抓包查看Resopnse.png
允许用户通过添加模式字符串来比较验证服务器返回的响应,Jmeter提供了很多种匹配规则,断言中设置要测试的模式,实际响应的内容与设计的字符串进行匹配,如果返回的内容包含了字符串,则认为该次测试通过,否则就是失败(模式中的内容也可以参数化)
对断言做判断,只需添加【监听器--断言结果】
1)如果断言成功,显示的是HTTP请求名称
2)若失败,则会显示请求名称和失败的原因(“Test failed XXXXXX”内容)
PS:一个Sampler可以添加多个断言,根据你的检查需求来添加相应的断言,当Sampler下所有的断言都通过了,才算成功 比如在测接口时,返回值是True,只能说明接口是通的,还得继续验证返回的data值是否正确
- Apply to:一般情况下,使用默认的就行,如果一次发送多个请求(Ajax请求,GET或POST),就需要根据实际断言需要选择其他选项了。
- 要测试的响应字段:根据实际需要选择
- 响应文本
服务器响应文本,一般情况下,我们都是勾选改选项,用于验证服务器返回值。 - Document(text)
通过Apache Tika从各种的文档中提取的文本进行验证,包括响应文本,pdf、word等等各种格式。jmeter会用Apache Tika去解析服务器响应内容,耗内存、也耗时间,解析易失败,尽量少用或不用。多用响应文本方式来进行断言验证 - URL样本
对请求的url进行断言,如果请求没有重定向(302),那么该url即为请求的url;如果有重定向(切跟随重定向),那么url则包含了请求url和重定向url。 - 响应代码
即http响应代码,例如200,404等等,需要注意: 由于jmeter默认情况下认为4xx,5xx时该请求失败,所以在断言这类响应代码时,需要同时勾选Ingore Status,才能正常去做断言。 - 响应信息
即响应代码对应的信息,例如OK, Not Found等等这类的。 - Ingore Status 请参见4响应代码的使用说明。
- 响应文本
如下常见类似是响应信息,即http响应头信息,主要用于断言当响应头带有唯一或特定意义
HTTP/1.1 200 Ok
HTTP/1.1 302 Found
Response Header : 响应头信息,例如
Server: Tengine
Date: Thu, 12 Mar 2015 09:43:52 GMT
Content-Type: text/html
Content-Length: 260Connection: close
Location: http://www.baidu.com/404.html
Response Headers
- 模式匹配规则:支持正则表达式
- 包括:返回结果包括指定的内容,当返回值固定时,可以使用返回值做断言,效果和equals相同
- 匹配:用正则表达式必须能匹配整个返回值,而不是返回值的一部分
- Equals:返回结果与你指定结果完全一致
- Substring:返回结果是指定结果的字串,不支持正则字符串
- 否:相当于取反,即如果上述断言结果为true,勾选“否”选项后,则最终断言结果为false
- 要测试的模式:要匹配的响应值(字符串或正则表达式),即接口测试结果的期望值或者其他期望值