REST Assured API 测试 Skill:把接口场景落成可执行自动化
API 自动化测试测的是接口行为。用户能否创建订单、未授权请求返回什么、重复提交会不会多扣库存,这些规则和测试框架无关。REST Assured 的角色很明确:把已经确认的 API 场景落成 Java 项目能执行、能进 CI 的测试类。
api-test-restassure Skill 用于读取多种 API 材料,整理场景、断言、测试数据和证据要求,再生成 REST Assured 自动化。它不会替团队发明状态码,也不会把未执行的代码包装成测试结果。
Awesome QA Skills 按语言和测试阶段组织 Skill。通用安装方式见系列总览;本文讲通用 API 测试怎样落到 REST Assured。
先准备接口测试材料
OpenAPI、Swagger、Postman/Bruno Collection、接口文档、需求说明和既有测试都可以成为输入。选择哪一种不重要,版本和业务规则必须清楚。
开始前至少写明:
- 接口版本、基础地址和认证方式;
- 本次覆盖的接口与业务链路;
- 成功、权限、参数校验、状态冲突等关键场景;
- 测试数据的创建、清理与隔离方式;
- Java 版本、JUnit、构建工具和既有测试目录。
例如,接口文档写了“创建订单”,却没有说幂等请求的返回语义。Skill 应把它列为待确认,而不是在测试里随手写一个 409。看起来完整的猜测,通常会在回归门禁里找回来。
先写清场景,再生成框架代码
API 测试场景可以独立于 REST Assured 存在:
场景:已登录用户创建订单
前置:库存 book-001 为 2;用户拥有 buyer 权限
请求:POST /api/orders,body 为 { "sku": "book-001", "quantity": 1 }
预期响应:201;返回订单 ID、sku 和 PENDING 状态
预期副作用:库存变为 1;发布 order.created 事件
证据:测试报告、失败响应、构建号
每项预期都对应一个可验证的接口规则。响应断言覆盖状态码、错误码和关键字段;有状态变化时,再检查数据库、事件或下游调用。这里的规则可以复用给其他框架,变化的是测试代码的语法和项目集成方式。
从输入材料到回归入口
先让 Skill 输出场景清单,再生成 Java 测试类。把业务规则、测试数据和构建入口分开存放,后续换框架或换环境时不必重新整理全部上下文:
docs/openapi.yaml # 路径、参数、schema
docs/order-rules.md # 幂等、库存和权限规则
src/test/java/support/ApiSpec.java
src/test/java/api/OrdersApiTest.java
build/test-results/ # JUnit 结果与失败响应
场景清单至少列出请求、预期响应、状态变化、数据负责人和待确认项。生成的 RequestSpecification、fixture 和断言应当接入已有测试基础设施,避免并行维护两套认证和环境配置。
REST Assured 在这里做什么
REST Assured 用 Java 链式 API 发送请求、校验响应,并和 JUnit、Gradle 或 Maven 进入同一套测试流程。认证、基础地址和公共 Header 可以放在 RequestSpecification 中,业务测试保持聚焦。
String orderId = given()
.spec(ApiSpec.authenticated(token))
.contentType(ContentType.JSON)
.body(Map.of("sku", "book-001", "quantity", 1))
.when()
.post("/api/orders")
.then()
.statusCode(201)
.body("sku", equalTo("book-001"))
.body("status", equalTo("PENDING"))
.extract().path("id");
assertThat(orderRepository.findById(orderId)).isPresent();
项目若已有认证 helper、Testcontainers、fixture 或断言库,Skill 应复用它们。公共配置集中处理,测试方法表达具体业务场景,维护时会轻松很多。
用 Skill 生成第一版用例
安装:
npx skills add https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh/testing-types/api-test-restassure -g
调用时,把通用 API 规则和 Java 框架约束一起给出:
请使用 api-test-restassure Skill。
接口材料:docs/openapi.yaml、docs/order-rules.md
测试范围:创建订单的成功、未登录、库存不足、重复提交
测试数据:现有 Testcontainers 配置;每个用例结束后清理
项目约定:Java 21、JUnit 5、Gradle;现有测试目录为 src/test/java/api
交付:生成或更新 REST Assured 测试类,列出覆盖场景、未确认规则和未执行命令。
复用已有 RequestSpecification、认证和断言约定;不要创建平行的测试基础设施。
响应断言覆盖状态码、错误码和关键字段;有状态变化时检查必要副作用。
不要把文档中没有定义的业务规则当成事实。
生成后先核对场景是否逐条对应接口材料,再执行项目测试:
./gradlew test --tests api.OrdersApiTest
Maven 项目使用项目约定的测试命令。测试报告、失败请求和响应、构建号才是执行证据;生成文件仍然需要运行验证。
怎么判断已经接入
| 检查项 | 最低要求 | 失败时的处理 |
|---|---|---|
| 场景覆盖 | 成功、权限、参数、状态冲突都有明确结果 | 回到接口材料补规则 |
| 可重复执行 | 每次运行创建自己的数据并完成清理 | 修正 fixture 或 Testcontainers |
| 失败可定位 | 请求、响应、版本和 run ID 能对应同一次运行 | 补 Allure/JUnit 输出字段 |
| CI 可判定 | Gradle/Maven 退出码与门禁规则一致 | 修正插件和测试筛选参数 |
先接一条高价值链路。它在开发机和 CI 都能稳定复跑以后,再扩展分页、并发和跨服务场景。
这类 API 自动化最容易踩的坑
- 只给 Skill 一个 URL,没有接口版本、账号和业务范围,生成结果只能猜。
- 把 Collection 的一次绿色执行当成 Java 回归证据,实际没有接入 Gradle 或 Maven。
- 所有用例共用固定订单号、Token 或库存,顺序一变就互相污染。
- 只断言 HTTP 状态码,错误体、对象映射和关键副作用变化没有被发现。
- 生成了测试类,却没有报告、失败响应和构建号,问题无法回溯。
先看测试类能否被构建工具发现,再看报告能否回到具体请求。代码能编译只是入口成立,不能替代一次真实运行。
REST Assured 与其他 API 自动化框架的区别
接口场景、验收规则和证据要求可以共享。框架按项目栈选,负责把它们变成可维护的代码。
| 框架 | 适合的项目栈 | 生成产物 |
|---|---|---|
| REST Assured | Java、JUnit、Gradle 或 Maven | Java 测试类 |
| Supertest | Node.js、JavaScript、TypeScript | Supertest 测试脚本 |
| Pytest | Python | Pytest 接口测试 |
| Bruno | Collection 驱动的接口调试与回归 | Bruno Collection 与脚本 |
项目从 Supertest 迁移到 REST Assured 时,业务场景和接口规则依然有效。需要调整的是语言、断言库、数据工具和 CI 命令。
相关 Skill
| Skill | 何时接入 |
|---|---|
| API 契约测试 | OpenAPI、字段或错误语义发生变化 |
| 回归测试选择 | 需要按改动范围挑选接口回归集合 |
| 测试报告 | 需要把命令、报告、失败信息交给评审或 CI |
先确认接口行为,再用 REST Assured 交付 Java 自动化。框架是执行层,业务规则才是测试真正要保护的东西。
常见问题
没有 OpenAPI 也能用吗?
可以。提供现有 Collection、接口文档、调用示例或需求说明;没有定义的状态码、错误码和业务规则要明确标为待确认。
可以把 Bruno Collection 直接交给这个 Skill 吗?
可以。它是 API 材料来源之一。最终交付是 REST Assured Java 测试类,Bruno 不需要成为 Java 项目依赖。
什么时候可以接入发布门禁?
当本地与 CI 使用同一命令、测试数据可重置、失败报告能定位到请求和版本时,就可以纳入门禁。
参考
- Awesome QA Skills 项目主页:https://github.com/naodeng/awesome-qa-skills
- REST Assured Skill:https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh/testing-types/api-test-restassure
- REST Assured Skill 详情页:https://inaodeng.com/zh-cn/qaskills/api-test-restassure/