1. 概述

本文将深入探讨 REST-assured 的高级用法。在之前的教程《REST-assured 指南》中,我们已经介绍了基础用法。本文将重点演示如何为请求设置请求头、Cookie 和参数

环境配置与之前文章相同,我们直接进入实战示例。

2. 设置参数

2.1 路径参数

使用 pathParam(parameter-name, value) 指定路径参数:

@Test
public void whenUsePathParam_thenOK() {
    given().pathParam("user", "eugenp")
      .when().get("/users/{user}/repos")
      .then().statusCode(200);
}

添加多个路径参数有两种方式:

@Test
public void whenUseMultiplePathParam_thenOK() {
    // 方式1:使用 pathParams() 批量设置
    given().pathParams("owner", "eugenp", "repo", "tutorials")
      .when().get("/repos/{owner}/{repo}")
      .then().statusCode(200);

    // 方式2:混合使用命名参数和匿名参数
    given().pathParams("owner", "eugenp")
      .when().get("/repos/{owner}/{repo}","tutorials")
      .then().statusCode(200);
}

⚠️ 匿名参数按索引顺序匹配,最终生成的 URL 为:https://api.github.com/repos/eugenp/tutorials

2.2 查询参数

使用 queryParam() 添加查询参数:

@Test
public void whenUseQueryParam_thenOK() {
    given().queryParam("q", "john").when().get("/search/users")
      .then().statusCode(200);

    // 简写形式:param() 在 GET 请求中等同于 queryParam()
    given().param("q", "john").when().get("/search/users")
      .then().statusCode(200);
}

添加多个查询参数的两种方式:

@Test
public void whenUseMultipleQueryParam_thenOK() {
    int perPage = 20;
    
    // 方式1:链式调用
    given().queryParam("q", "john").queryParam("per_page",perPage)
      .when().get("/search/users")
      .then().body("items.size()", is(perPage));   
     
    // 方式2:批量设置
    given().queryParams("q", "john","per_page",perPage)
      .when().get("/search/users")
      .then().body("items.size()", is(perPage));
}

2.3 表单参数

使用 formParam() 设置表单参数:

@Test
public void whenUseFormParam_thenSuccess() {
    // 显式使用 formParam
    given().formParams("username", "john","password","1234").post("/");

    // 简写形式:param() 在 POST 请求中等同于 formParam()
    given().params("username", "john","password","1234").post("/");
}

formParam() 会自动添加 Content-Type: application/x-www-form-urlencoded 请求头

3. 设置请求头

使用 header() 自定义请求头:

@Test
public void whenUseCustomHeader_thenOK() {
    given().header("User-Agent", "MyAppName").when().get("/users/eugenp")
      .then().statusCode(200);
}

为同一请求头设置多个值:

@Test
public void whenUseMultipleHeaderValues_thenOK() {
    given().header("My-Header", "val1", "val2")
      .when().get("/users/eugenp")
      .then().statusCode(200);
}

这会生成两个请求头:My-Header: val1My-Header: val2

批量设置多个请求头:

@Test
public void whenUseMultipleHeaders_thenOK() {
    given().headers("User-Agent", "MyAppName", "Accept-Charset", "utf-8")
      .when().get("/users/eugenp")
      .then().statusCode(200);
}

使用 cookie() 添加自定义 Cookie:

@Test
public void whenUseCookie_thenOK() {
    given().cookie("session_id", "1234").when().get("/users/eugenp")
      .then().statusCode(200);
}

通过 Cookie Builder 精细化控制 Cookie 属性:

@Test
public void whenUseCookieBuilder_thenOK() {
    Cookie myCookie = new Cookie.Builder("session_id", "1234")
      .setSecured(true)
      .setComment("session id cookie")
      .build();

    given().cookie(myCookie)
      .when().get("/users/eugenp")
      .then().statusCode(200);
}

5. 总结

本文演示了在 REST-assured 中设置请求参数、请求头和 Cookie 的核心方法。这些技巧能帮你更灵活地控制 HTTP 请求,避免在接口测试中踩坑。

完整示例代码已上传至 GitHub 仓库,建议直接运行体验。


原始标题:Headers, Cookies and Parameters with REST-assured | Baeldung