界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
开发与工程 · SKILL.md

rest-assured

rest-assured

【开发与工程】REST Assured Java library for testing REST APIs. Covers HTTP requests, JSON/XML validation, and Spring Boot integration. USE WHEN: user mentions "rest assured", "api test java", "rest api test", asks about "given when then", "RestAssured", "HTTP test", "JSON validation" DO NOT USE FOR: Unit tests - use `junit`; E2E browser tests - use Selenium; Web…

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: rest-assured description: | REST Assured Java library for testing REST APIs. Covers HTTP requests, JSON/XML validation, and Spring Boot integration.

USE WHEN: user mentions "rest assured", "api test java", "rest api test", asks about "given when then", "RestAssured", "HTTP test", "JSON validation"

DO NOT USE FOR: Unit tests - use junit; E2E browser tests - use Selenium; WebSocket testing - use dedicated tools; Non-Java projects - use language-specific HTTP clients allowed-tools: Read, Grep, Glob, Write, Edit

REST Assured - Quick Reference

Deep Knowledge: Use mcp__documentation__fetch_docs with technology: rest-assured for comprehensive documentation.

When NOT to Use This Skill

  • Unit Tests - Use junit with Mockito for isolated tests
  • E2E Browser Tests - Use Selenium or Playwright
  • WebSocket Testing - Use dedicated WebSocket testing tools
  • Non-Java Projects - Use language-specific HTTP clients
  • GraphQL APIs - Consider GraphQL-specific testing tools

Pattern Essenziali

GET Request

given()
    .baseUri("http://localhost:8080")
    .contentType("application/json")
.when()
    .get("/api/v1/users/1")
.then()
    .statusCode(200)
    .body("name", equalTo("John"));

POST Request

given()
    .contentType("application/json")
    .body("""
        {"name": "John", "email": "john@example.com"}
        """)
.when()
    .post("/api/v1/users")
.then()
    .statusCode(201)
    .body("id", notNullValue());

Spring Boot Integration

@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);
    }
}

Authentication

// Bearer Token
given().header("Authorization", "Bearer " + token)

// Basic Auth
given().auth().basic("user", "pass")

Hamcrest Matchers Comuni

MatcherUso
equalTo(value)Exact match
notNullValue()Not null
hasSize(n)Collection size
containsString(str)String contains

Anti-Patterns

Anti-PatternWhy It's BadSolution
Hardcoding base URINot portable across environmentsUse RestAssured.baseURI or config
Not setting contentTypeRequest may fail or be misinterpretedAlways set contentType for POST/PUT
Ignoring status codesSilent failuresAlways assert status code
Not using path parametersHard to read, error-proneUse {id} placeholders
Testing too much in one testHard to debugOne endpoint/scenario per test
No authentication testingSecurity gapsTest auth headers, tokens
Not validating response schemaAPI contract violationsUse JSON schema validation

Quick Troubleshooting

ProblemLikely CauseSolution
"Connection refused"Server not runningStart server, verify port
"Expected status 200 but was 500"API error or wrong requestCheck server logs, validate request body
"Cannot deserialize JSON"Wrong content type or body formatVerify Content-Type header, check JSON
Authentication failsMissing/wrong tokenCheck Authorization header
TimeoutSlow API or network issueIncrease timeout or investigate performance
"Path not found"Wrong URL or methodVerify endpoint exists, check HTTP method

Reference Documentation

我的收藏