聊一聊接口测试如何校验返回结果的正确性
接口测试如何验证返回结果的正确性,可能需要从基本的HTTP状态码开始,比如200表示成功,404找不到资源等等。但状态码正确不代表返回的数据没问题,所以下一步应该检查数据结构是否符合预期,比如JSON格式的字段是否正确,类型是否匹配。然后可能需要验证具体的字段值,比如创建用户后返回的ID是否非空,或者订单金额是否正确。
还要进一步考虑到数据一致性,比如数据库里的数据是否和接口返回的一致,这时候可能需要查库验证。还有业务逻辑的正确性,比如下单接口是否真的减少了库存,或者状态流转是否正确。异常情况的处理也很重要,比如参数错误时是否返回了合适的错误码和提示信息。
性能方面可能也需要考虑,比如响应时间是否在可接受范围内,虽然这可能属于性能测试的范畴,但有时候接口测试也会涉及。还有安全方面的校验,比如敏感信息是否加密,或者权限控制是否到位。另外,数据格式的校验,比如日期格式、邮箱格式是否正确,这些细节也不能忽视。
接口测试中的参数传入非法参数时接口的行为是否符合预期,这时候需要提醒不仅要测试正常情况,还要覆盖各种异常场景。还有性能和安全方面,虽然可能不是接口功能测试的核心,但也是确保接口正确性的重要部分。
️一、基础校验️HTTP状态码
校验返回的HTTP状态码是否符合预期(如200表示成功,400表示请求错误,500表示服务端错误等)。
示例:assert response.status_code == 200
️响应头部
检查Content-Type是否符合接口定义(如application/json)。
验证安全相关头部(如CORS策略、Cache-Control等)。
️二、 数据结构校验️JSON Schema校验
使用JSON Schema验证响应数据的结构、字段类型、必填字段等。
展开全文工具支持:jsonschema(Python)、Ajv(JavaScript)、Postman的Schema断言。
示例:
#python
schema = {
"type": "object",
"properties": {
"id": {"type": "number"},
"name": {"type": "string"},
"is_active": {"type": "boolean"}
},
"required": ["id", "name"]
}
assert validate(response.json(), schema)
字段存在性与类型
直接断言关键字段是否存在且类型正确。
示例:assert isinstance(response.json()["id"], int)
️三、业务逻辑校验️字段值正确性
验证返回数据的具体值是否符合业务规则:
订单金额是否计算正确。
时间戳是否为合理范围。
关联ID是否匹配(如创建资源后返回的ID是否存在于数据库中)。
示例:assert response.json()["total_price"] == 100.0
️数据一致性
数据库校验:调用接口后,检查数据库中的数据是否与接口返回一致。
python
# 假设接口创建了一个用户
db_user = database.query("SELECT * FROM users WHERE id = ?", response.json()["id"])
assert db_user.name == response.json()["name"]
跨接口校验:调用A接口后,通过B接口验证结果(如支付后查询订单状态)。
️业务规则验证
校验业务状态流转(如订单状态从“待支付”变为“已支付”)。
校验关联数据变化(如扣减库存、积分增加等)。
️四、异常场景校验️错误码与错误信息
验证非法请求时返回的错误码和提示信息是否明确。
示例:
assert response.json()["code"] == "INVALID_PARAMETER"
️边界值与异常输入
测试空值、超长字符、负数、非法格式等场景。
示例:传递user_id=0或amount=-100时是否返回错误。
️响应时间
校验接口响应时间是否在可接受范围内(如<500ms)。
示例:assert response.elapsed.total_seconds() < 0.5
️敏感数据脱敏
验证返回的敏感字段(如手机号、身份证)是否脱敏。
示例:assert response.json()["mobile"] == "185****2886"
️安全头与权限
检查未授权访问时是否返回403。
验证Token失效场景。