关于 rest-assured
面向 Java HTTP API 测试的 REST Assured 速查技能,涵盖请求模式、断言、身份验证与故障排查。
主要功能
- 01GET 与 POST 请求模式
- 02状态码和响应体断言
- 03Bearer 与 Basic 身份验证
- 04Spring Boot 测试配置
- 05常见故障排查
适用场景
- 01测试 Java API 端点
- 02检查状态码和 JSON 字段
- 03验证经过身份验证的请求
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ claude-dev-suite/ claude-dev-suite --skill rest-assured安装后在 Claude Code 中输入/rest-assured确认已加载。
详细介绍
REST Assured - 快速参考
深入了解:使用
mcp__documentation__fetch_docs,并将技术标识设为:rest-assured,以获取完整文档。
不适合使用此技能的场景
- 单元测试 - 使用
junit和 Mockito 进行隔离测试 - 端到端浏览器测试 - 使用 Selenium 或 Playwright
- WebSocket 测试 - 使用专用的 WebSocket 测试工具
- 非 Java 项目 - 使用针对相应语言的 HTTP 客户端
- GraphQL API - 考虑使用专用的 GraphQL 测试工具
基本模式
GET 请求
given()
.baseUri("http://localhost:8080")
.contentType("application/json")
.when()
.get("/api/v1/users/1")
.then()
.statusCode(200)
.body("name", equalTo("John"));
POST 请求
given()
.contentType("application/json")
.body("""
{"name": "John", "email": "[email protected]"}
""")
.when()
.post("/api/v1/users")
.then()
.statusCode(201)
.body("id", notNullValue());
Spring Boot 集成
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class UserApiTest {
@LocalServerPort
private int port;
@BeforeEach
void setUp() {
RestAssured.port = port;
}
@Test
void shouldGetUsers() {
given()
.when().get("/api/v1/users")
.then().statusCode(200);
}
}
身份验证
// Bearer Token
given().header("Authorization", "Bearer " + token)
// Basic Auth
given().auth().basic("user", "pass")
常见 Hamcrest 匹配器
| 匹配器 | 用法 |
|---|---|
equalTo(value) | 完全匹配 |
notNullValue() | 不为 null |
hasSize(n) | 集合大小 |
containsString(str) | 字符串包含 |
反模式
| 反模式 | 不利之处 | 解决方案 |
|---|---|---|
| 将基础 URI 硬编码 | 无法在不同环境间移植 | 使用 RestAssured.baseURI 或配置 |
| 未设置 contentType | 请求可能失败或被错误解析 | POST/PUT 请求始终设置 contentType |
| 忽略状态码 | 错误可能被悄然忽略 | 始终断言状态码 |
| 不使用路径参数 | 难以阅读且容易出错 | 使用 {id} 占位符 |
| 在单个测试中测试过多内容 | 难以调试 | 每个测试覆盖一个端点或场景 |
| 不测试身份验证 | 存在安全漏洞 | 测试身份验证标头和令牌 |
| 未验证响应架构 | 违反 API 契约 | 使用 JSON 架构验证 |
快速故障排除
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| "Connection refused" | 服务未运行 | 启动服务并验证端口 |
| "Expected status 200 but was 500" | API 错误或请求错误 | 检查服务日志并验证请求体 |
| "Cannot deserialize JSON" | 内容类型或请求体格式错误 | 验证 Content-Type 标头并检查 JSON |
| 身份验证失败 | 缺少令牌或令牌错误 | 检查 Authorization 标头 |
| 超时 | API 响应缓慢或网络问题 | 增加超时时间或排查性能问题 |
| "Path not found" | URL 或方法错误 | 验证端点是否存在并检查 HTTP 方法 |
参考文档
评论
支持 Markdown