Apifox的断言像一个自动检查员,在请求完成后立刻证实响应数据的正确性,将手动检查变为自动化证实。
断言的三大组成部分
每个断言都由三个部分组成,共同决定了检查什么和怎么查:
断言对象:要检查的具体内容。响应状态码、响应体JSON字段、响应头等。
比较方式:证实断言对象和预期值关系的思路。等于、包含、大于、存在、正则一致等。
预期值:你希望断言对象一致的结果。200、“success”、/^\d{11}$/(手机号正则)等。
怎样配置一个断言
进入配置界面:在接口的运行或调试标签页,切换到 后置操作 选项卡。
添加断言操作:点击添加操作,从列表中选择 断言。
设置断言规则:在弹出窗口中,依次选择或填写“断言对象”、“比较方式”和“预期值”。
用法
掌握以下技能,能让断言更强大、更高效。
使用 JSONPath 提取数据
证实JSON响应体。JSONPath 表达式用来准确定位断言对象。
基本格式:以 $ 表示根节点,使用点号.或方括号[]访问字段或数组。
常用表达式:
$.code:检查根节点下的code字段。
$.data.users[0].name:检查data下users数组第一个元素的name字段。
$.data.items.length():获取数组长度(可用于断言列表数量)。
运用多样化的比较方式
根据证实目标,灵活选择比较方式:
证实固定值:使用 “等于”、“不等于”。
证实文本:使用 “包含”、“不包含”、“正则一致”。
证实数字或长度:使用 “大于”、“小于”、“大于等于”。
证实字段存在性:使用 “存在”。
配置多个断言进行
一个接口可以添加多个断言,它们会按顺序执行,对响应进行全方面检查。如,一个登录接口可以同时断言:状态码为200、响应码code为0、响应信息message包含“成功”、响应体data中存在token字段。
断言和检查响应的区别
Apifox还有一项 检查响应功能,主要用于比对实际返回的JSON结构是不是和接口文档中预先定义的数据模型(Schema)一致,如字段类型、是不是必需等。而“断言”更不同于具体的业务值。两者可以结合使用。
在自动化流程中使用断言
断言是后置操作的一部分,可和前置操作和其他后置操作串联,创建复杂测试流。
执行顺序:按照全局前置 → 目录/分组前置 → 接口前置 → 发送请求 → 全局后置 → 目录/分组后置 → 接口后置的顺序。断言一般在接口后置阶段执行。
结合提取变量:可以在断言前的后置操作中,使用 提取变量操作,从响应中取出值(如token)存入变量。后续接口或断言中即可用{{variable}}语法直接引用该变量。
实战示例
假设一个获取用户信息的接口返回如下JSON:
json
{
"status": 200,
"success": true,
"data": {
"id": 12345,
"name": "张三",
"age": 30,
"email": "zhangsan@example.com",
"hobbies": ["阅读", "跑步"]
}
}
可以分层次配置断言:
基础状态:比较方式Response status code,预期值等于200,确定HTTP请求成功。
业务状态:比较方式Response JSON -> $.success,预期值等于true,确定业务思路成功。
数据完整性:比较方式Response JSON -> $.data.name,预期值存在-,确定重点字段存在。
数据准确性:比较方式Response JSON -> $.data.age,预期值大于0,证实年龄为合理正数。
数据格式:比较方式Response JSON -> $.data.email,预期值:正则一致^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$,证实邮箱格式正确。
数组数据:比较方式Response JSON -> $.data.hobbies.length() ,预期值大于0,证实爱好列表非空。
调试排错
实时预览:在断言配置框输入JSONPath时,右侧会实时显示提取出的值,这是调试表达式最直接的方法。
查看报错:断言失败时,结果会确定指出哪个断言失败、预期值和实际值各是多少,这是定位问题的第一手信息。
检查数据:如果JSONPath无法提取到值,先检查返回的JSON结构是不是和预期一致