• 沒有找到結果。

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()”.