在调试生成的JMeter脚本时,可以通过使用断言的方式验证接口的返回信息是否正确,断言可以创建在任何目录下(包括测试计划、线程组、取样器),添加路径为:右键单击左侧某个菜单 - '添加' - '断言',如下图所示:
常用的断言有响应断言、JSON断言、大小断言、断言持续时间。
响应断言
用于检查任何形式的响应信息是否符合预期
- 右键单击取样器,添加'响应断言'
- 选中响应断言,在右侧窗口中可以修改响应断言的名称
- 在右侧窗口的'测试字段'中选择'响应文本',在'模式匹配规则'中选择字符串,点击'添加'按钮,在测试模式窗口中输入要检查的内容,比如'百度一下,你就知道',这样就会自动检查返回的响应体中是否包含这个字符串
- 响应代码(Response Code):校验响应返回的状态码,比如'200'
- 响应信息(Response Message):校验响应代码对应的响应信息,比如'OK'
- 响应头(Response Header):校验整个响应头的内容
- 请求头(Request Header):校验整个请求头的内容
- 请求数据(Request Data):校验整个请求体的数据
Contains:返回结果包括指定的内容,支持正则表达式
Matches:返回结果完全等于指定的内容,支持正则表达式
Equals:返回结果完全等于指定的内容,不支持正则表达式
Substring:返回结果包括指定的内容,不支持正则表达式
Not:比如希望返回结果中不包含'百度一下'这几个字
Or:右侧窗口中,可以通过点击'添加'按钮多次新增多个校验规则,默认多个规则之间是'与'的关系,即需要同时满足这些条件。
JSON断言
返回的结果是JSON格式的数据,可以使用'JSON断言'进行校验。比如这个连接https://www.atstudy.com/api/consume/Lecturer/10021
- 右键单击取样器,添加'JSON断言'
- 在'Assert JSON Path exists'栏中填写JSON path路径,比如'$.nickName',勾选'Additionally assert value'选项,在'Expected Value'栏中填写期望值
- 执行请求,这时JMeter会检查在响应的JSON字符串的根节点下的nickName节点的值是否等于'肖老师',如果验证通过,则结果树中显示正常结果,不显示断言相关信息,如下图所示
JsonPath语法
JSON断言之所以能够读取JSON字符串中的特定信息,是因为使用了一种叫做 JsonPath的语言。JsonPath将JSON字符串当成一棵树,通过一些语法规则遍历树中的节点,常用的语法规则如下:
JsonPath描述$表示根节点@当前节点.表示层级关系[]表示数据的下标*表示所有节点..表示所有符合条件的节点?()表示过滤操作
{
"id": 10021,
"nickName": "肖老师",
"avatar": "//cdn.atstudy.com/user/769b40a50d544d0988ba9f11a842c9a3.JPG",
"title": "测试讲师",
"introduction": "<p><span style=\"font-size:14px\">拥有13年软件测试从业经验,及软件测试培训经验,对大型软件系统有深厚的测试实践及管理经验。熟悉各种测试工具和测试理论,对性能测试和配置管理有深刻的认识。</span></p>
",
"projectExpr": null,
"trainingExpr": null,
"courses": [
{
"id": 1000009,
"courseSetId": 4,
"title": "性能测试与LoadRunner基础培训",
"icon": "//cdn.atstudy.com/course/16000754590278060.png",
"mode": 1,
"chargeMode": 2,
"price": "1580.00",
"sales": 1510,
"promotionPrice": null,
"tags": [ ],
"liveStartTime": 0,
"isLive": false
},
{
"id": 1000010,
"courseSetId": 4,
"title": "性能测试与LoadRunner基础培训",
"icon": "//cdn.atstudy.com/course/16000754590278060.png",
"mode": 1,
"chargeMode": 1,
"price": "0.00",
"sales": 1510,
"promotionPrice": null,
"tags": [ ],
"liveStartTime": 0,
"isLive": false
}
]
}
JsonPath表达式含义结果$.title获取根节点下title节点的值[
"测试讲师"
]$.courses[1]获取根节点下courses节点的列表中第二项内容[
{
"id": 1000010,
"courseSetId": 4,
"title": "性能测试与LoadRunner基础培训",
"icon": "//cdn.atstudy.com/course/16000754590278060.png",
"mode": 1,
"chargeMode": 1,
"price": "0.00",
"sales": 1510,
"promotionPrice": null,
"tags": [],
"liveStartTime": 0,
"isLive": false
}
]$.courses.*获取根节点下courses节点的所有内容[
{
"id": 1000009,
"courseSetId": 4,
"title": "性能测试与LoadRunner基础培训",
"icon": "//cdn.atstudy.com/course/16000754590278060.png",
"mode": 1,
"chargeMode": 2,
"price": "1580.00",
"sales": 1510,
"promotionPrice": null,
"tags": [],
"liveStartTime": 0,
"isLive": false
},
{
"id": 1000010,
"courseSetId": 4,
"title": "性能测试与LoadRunner基础培训",
"icon": "//cdn.atstudy.com/course/16000754590278060.png",
"mode": 1,
"chargeMode": 1,
"price": "0.00",
"sales": 1510,
"promotionPrice": null,
"tags": [],
"liveStartTime": 0,
"isLive": false
}
]$.courses..id获取根节点下courses节点下所有id的值[
1000009,
1000010
]$..id获取根节点下所有id的值[
10021,
1000009,
1000010
]$.courses[?(@.price>500)]获取获取根节点下courses节点的列表中,满足price大于500的项的内容[
{
"id": 1000009,
"courseSetId": 4,
"title": "性能测试与LoadRunner基础培训",
"icon": "//cdn.atstudy.com/course/16000754590278060.png",
"mode": 1,
"chargeMode": 2,
"price": "1580.00",
"sales": 1510,
"promotionPrice": null,
"tags": [],
"liveStartTime": 0,
"isLive": false
}
]
大小断言
判断响应内容的大小(字节为单位)
- 右键单击取样器,添加'大小断言'
- 选中大小断言,在右侧窗口中可以修改大小断言的名称,如下图所示:
- 在右侧窗口的'响应字段大小'中选择'完整响应',在'Size to Assert'中输入预期的字节大小,并选择对应的比较类型,如下图所示:
- 响应字段大小响应字段大小允许用户选择校验的目标,包括:- 完整响应:即所有响应内容- 响应头:响应头的内容- 响应的消息体:即响应体的内容- 响应代码:响应的状态码,如'200'- 响应信息:响应状态码的信息,如'OK'
断言持续时间
判断规定时间内是否收到响应数据,如果超时即校验失败,实际响应时间可查看结果树中的loadtime
- 右键单击取样器,添加'断言持续时间'
- 选中断言持续时间,在右侧窗口中可以修改断言持续时间的名称,如下图所示:
- 在右侧窗口的'断言持续时间'栏中输入持续时间(单位是毫秒),如下图所示:
版权归原作者 小杜℃ 所有, 如有侵权,请联系我们删除。