2.4 接口自动化用例
2.4.5 设置测试检查点
检查点说明
测试检查点又名断言,通过检查接口响应是否符合预期,判定系统是否满足预期。
在接口自动化用例详情中,测试步骤的“检查点”页签中可以定义测试检查点。
检查点内容包括属性、比较符和目标值定义。
字段 说明
1. 普通提取表达式(非“$”开头),例如“item.name”。
取字段中的值,支持嵌套取值。详细介绍请参见响应体
(JSON)检查。
从响应体中提取数组时,下标可以是数字,也可以是
“key:value”表达式,详细介绍请参见示例:根据给定的
key:value从响应体中获取字符串。
2. JsonPath表达式(“$.”或“$[”开头),例如
“$.store.book[0].title”。
属性 item.name 高级提取
类型
字符串提取
类型值 0、5
字段 值
● 响应体中的属性param2 不等于 test
● 响应体中的属性param3 等于 TEST
● 响应体中的属性param4 包含 tri
● 响应体中的属性param5 不包含 tri
正则比 较
正则表达式 是 ● 响应体中的属性param1
正则表达式 ^[A-Za-z0-9]
{1,32}$
● 响应体中的属性param2 不是空
● 响应体中的属性param2 JSON数组为非空数组
比较类
● 响应体中的属性param2 是JSON数组类型
检查响应体对象中字段名为“status”的值,检查点配置如下:
2. 检查响应体(JSON)中某个数组的对象的字段值(数组条件采用下标确定对象,
下标从0开始)。例如:
响应体结构如下:
检查响应体“result”数组的第1个元素对象字段名为“userId”的值,检查点配 置如下:
3. 检查响应体(JSON)中某个数组的对象的字段值(数组条件采用模糊匹配功能确 定对象)。例如:
响应体结构如下:
a. 检查响应体“result”数组下“name”是“啤酒”的所有对象取第1个之后获 取id的值,检查点配置如下:
说明
当获取的数组下的对象只有一个,“[0]”可以省略,示例中的表达式可以写为
“result[name==啤酒].id”。
b. 检查响应体“result”数组下“name”是“啤酒”的并且“obj”对象下属性
“a”的值是“2”的对象的id值,检查点配置如下:
变量检查
检查比较全局变量,局部变量,响应提取后的变量值和目标值。例如:
● 检查全局变量“hostIp”的值是否等于“127.0.0.1”。
● 检查局部变量“local”的值是否等于“text”。
● 检查响应提取后的变量“name”的值是否等于“白酒”。
> 大于(数值) age>20
>= 大于等于(数值) age>=20
< 小于(数值) age<20
<= 小于等于(数值) age<=20
数组下标支持以“&&”连接的多组“key:value”条件,表示提取的JSON串需要同时
● 若value值为空对象,则需要使用$null,即key==$null.
● 若value值是null串("null"),则使用null,即key==null。
● 若value值是空串(""),则可以不写,即key==。
以下面的响应体(JSON格式)为例:
{ "status": "success",
"result": [
},
提取条件 表达式
获取result数组中name是白酒的数据。 result[name==白酒]
获取result数组中name不是啤酒、且数
量大于20的数据。 result[name!=啤酒&&数量>20]
获取result数组中name是空对象、且
array数组中id小于等于2的数据。 result[name==$null&&array[id<=2]]
获取result数组中name是null串、且obj
对象的属性a等于2的数据。 result[name==null&&obj.a==2]
获取result数组中name是空串("")的
数据。 result[name==]
若需要检查(JSON格式)name是白酒、且数量大于20的数据是不是“[{"name": "白 酒","数量": "30","地址": "A3库房10号货架","obj": {"a": 1,"b": "test","c": "测试
"},"array": [{"id": 3,"name": "aaa"},{"id": 4,"name": "bbb"}]}]”,则检查点各字段的 配置可参考下表:
字段 值
来源 响应体(JSON)
属性 result[name!=啤酒&&数量>20]
比较符 等于(字符串)
目标值 [{"name": "白酒","数量": "30","地址": "A3库房10号货架","obj": {"a":
1,"b": "test","c": "测试"},"array": [{"id": 3,"name": "aaa"},{"id":
4,"name": "bbb"}]}]
示例:根据 JsonPath 从响应体中获取数据
"title": "Moby Dick",
● $.store.book[0].title
● $['store']['book'][0]['title']
JsonPath表达式与其对应的含义如下表所示:
JsonPath表达式 含义描述
$.store.book[*].author 所有书籍的作者
$..author 所有作者
$.store.* 所有的东西,包括书籍和自行车
$.store..price 所有东西的价格
$..book[2] 第三本书
$..book[-2] 倒数第二本书
$..book[0,1] 前两本书
$..book[:2] 从索引 0(包括)到索引 2(不包括)的
$..book[?(@.isbn)] 所有有isbn的书
$.store.book[?(@.price < 10)] 商店里所有价格小于10的书
$..book[?(@.price <= $['expensive'])] 商店里所有不“贵”的书
$..book[?(@.author =~ /.*REES/i)] 所有作者匹配正则表达式.*REES(忽略大 小写)的书籍
$..* 所有内容
说明
若使用length函数或者size函数,则多次调用时不要使用深度扫描(即“..”符号)例如
“$..book.length()”返回书的数量,此时需要确定路径,改为“$.store.book.length()”.