1. REST API 测试的核心验证点,状态码、响应体结构、Header、错误处理的系统化测试策略?
REST API 测试的核心验证点包括状态码、响应体结构、Header 和错误处理,请给出系统化的测试策略?
- 状态码语义与业务场景的对应(2xx/4xx/5xx)
- 响应体结构、字段类型与约束的验证
- Header 的验证(Content-Type、Cache-Control、自定义头等)
系统化 REST API 测试应从四个维度分层验证。一是状态码:按请求语义断言正确状态码,如 GET 成功返回 200、POST 创建返回 201、删除返回 204、参数错误返回 400、未认证返回 401、无权限返回 403、不存在返回 404、冲突返回 409、服务端异常返回 500,并验证错误码与业务场景一一对应。二是响应体结构:用 JSON Schema 校验字段的存在性、类型、必填、nullable 与枚举取值范围,并验证数据边界(空数组、超长字段、null 值)。三是 Header:验证 Content-Type、Cache-Control、ETag、Location、Retry-After、分页头等,尤其关注响应头与应用语义(如可缓存性)的一致性。四是错误处理:验证错误响应体格式统一(含 error code、message、details、trace id),能够区分客户端错误与服务端错误,且错误信息不泄露内部堆栈。实践上应构建断言分层框架,把"状态码—结构—数据—Header"作为独立断言层,配合属性驱动测试与边界值,形成可复用的契约基座。
状态码反映 HTTP 语义,结构反映数据契约,Header 反映传输与缓存语义,错误处理反映可诊断性。四者单独验证会遗漏交叉问题,因此需要系统化分层而非零散断言。统一错误格式与 trace id 是生产可观测性的关键,也是测试应主动验证的隐式契约。
// REST Assured 分层断言示例
given().baseUri("https://api.example.com")
.header("Authorization", "Bearer " + token)
.param("page", 1)
.when().get("/users")
.then()
.statusCode(200) // 状态码
.header("Content-Type", containsString("application/json"))
.body("data", hasSize(20)) // 结构
.body("code", equalTo(0)) // 业务码
.body("data[0].name", notNullValue()) // 字段约束
.body("meta.traceId", not(empty())); // 可诊断性