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: val1
和 My-Header: val2
批量设置多个请求头:
@Test
public void whenUseMultipleHeaders_thenOK() {
given().headers("User-Agent", "MyAppName", "Accept-Charset", "utf-8")
.when().get("/users/eugenp")
.then().statusCode(200);
}
4. 添加 Cookie
使用 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 仓库,建议直接运行体验。