3.断言的介绍与使用
3.1为什么要使用断言
在上一章JMeter入门指南-2.手动编写一个简单的请求性能测试中,我们对于一个请求进行接口测试,并没有对响应内容进行验证,简单来说,就是只验证了这个接口的联通性,并没有验证这个接口获取的准确性,而断言,则能很好的去验证数据的准确性。
那么,断言究竟要判断什么呢?
3.2如何使用断言
3.2.1查看响应数据
首先,现在JMeter中执行一次脚本,然后我们能在查看结果树中观察到我们的HTTP请求。
可以看到,这里有三个TAB页,分别是取样器结果,请求,响应数据
取样器结果:包含了取样器的一些响应结果,如响应头,响应代码,响应时间,响应大小等数据
请求:为本脚本模拟发送的请求
响应数据:为响应的具体数据,可能是HTML,JSON,XML,DOC等
在响应数据页中,我们可以在响应体中观察响应具体返回的值
请求1:对关键字【测试进行搜索】
请求2:网络超时
请求3:对关键字【简书】进行搜索
可以发现,响应1与响应3都是请求成功,但是请求的结果并不是我们想要的结果,所以需要筛选关键字
3.2.2筛选关键字
在响应体中,一般都能已text格式来表示,此时我们只需要筛选出,本响应独特的,或者是唯一的关键字,来给断言使用。
就如上述三种请求,我们不难发现,我们需要筛选的关键字即为“简书”。
3.2.3添加响应断言
右键需要使用断言的HTTP请求,选择 添加->断言->响应断言
Apply to:
关于此处,一般为Main sample only即可,当请求中有重定向请求时,最后跳转的页面没Main sample only,其余请求为Sub-samples only。
响应文本:服务器响应文本,基本都用这个
响应代码:可以用于判断响应的各种代码
[200 OK 请求成功],[301 Moved Permanently 永久跳转],[302 Found 临时跳转],[303 See Other GET重定向],[304 Not Modified 未修改,使用缓存],[400 Bad Request 请求语法错误],[401 Unauthorized 未授权],[403 Forbidden 禁止访问],[404 Not Found 找不到页面],[500 Internal Server Error 服务器程序错误],[502 Bad Gateway 网关错误],[503 Service Unavailable 服务不可用],[504 Gateway Timeout 服务器超时]
注意,如需要判断响应代码400,404等的错误代码,则需要勾选忽略状态。
一般测试字段都为这两个
包含:返回的结果中包含需要匹配的值,支持正则表达式
匹配:返回的结果中与需要匹配的值相同,支持正则表达式
Equals:返回的结果中与需要匹配的值相同,不支持正则表达式
Substring:返回的结果中包含需要匹配的值,不支持正则表达式
否:若匹配成功则返回失败
或者:多个匹配字段只需要匹配成功一个即为通过
我们添加一个"简书"为断言:
这样就能使搜索条件为"测试"的HTTP请求判断为失败请求
3.2.3添加JSON断言
当HTTP请求得到的响应为JSON时,我们也可以使用JSON断言。
测试连接,本链接能得到一个基本的JSON响应
可以通过JSON转化器将其结构转化的方便观察
在这我创建了一个HTTP脚本,右键HTTP脚本,添加JSON断言,选择 添加->断言->JSON断言
Assert JSON Path exists:这个参数为需要匹配的JSON中的任意参数名称。
若需要获取content,则修改为$.content (获取所有content)
若需要获取A的所有子类,则修改为$..A(获取所有的所有子类)
若只需要获取A的第二个子类,则修改为$..A[1],
当然也可以这样写:$.content.data.allCitySearchLabels.A[1].id,这样便能获取所有A类第二个的ID
为请求添加个断言结果
先用$.content测试:
可以发现$.content能获取content下的所有内容。
$..A:
这个则为A下的所有id,name....的集合
$..A[1]:
则只获取了单个A
$.content.data.allCitySearchLabels.A[1].id:
获取单个ID
Additionally assert value:勾选后可自己填写Expected Value
Match as regular expression :可以使用正则表达式
Expected Value:输入匹配的值
Expect null :匹配结果为null
Invert assertion (will fail if above conditions met):取反操作
添加完成断言后,执行脚本,这样就能看到错误的请求
后续还会陆续添加各种断言的使用。