1. 概述
在本快速教程中,我们将探讨一些Rest-Assured的高级场景。我们之前在教程Rest-Assured指南中探讨了Rest-Assured。
接下来,我们将介绍如何为我们的请求设置标头、cookie和参数的示例。
2. 设置参数
现在,让我们讨论如何为我们的请求指定不同的参数-从路径参数开始。
2.1 路径参数
我们可以使用pathParam(parameter-name, value)来指定路径参数:
@Test
void whenUsePathParam_thenOK() {
given().pathParam("user", "tuyucheng7")
.when().get("/users/{user}/repos")
.then().statusCode(200);
}
要添加多个路径参数,我们可以使用pathParams()方法:
@Test
void whenUseMultiplePathParam_thenOK() {
given().pathParams("owner", "tuyucheng7", "repo", "fullstack-tutorial4j")
.when().get("/repos/{owner}/{repo}")
.then().statusCode(200);
given().pathParams("owner", "tuyucheng7")
.when().get("/repos/{owner}/{repo}", "fullstack-tutorial4j")
.then().statusCode(200);
}
在此示例中,我们使用了命名路径参数,但我们也可以添加未命名参数,甚至可以将两者结合起来:
given().pathParams("owner", "tuyucheng7")
.when().get("/repos/{owner}/{repo}", "fullstack-tutorial4j")
.then().statusCode(200);
在这种情况下,生成的URL是https://api.github.com/repos/tuyucheng/fullstack-tutorials4j。
请注意,未命名参数是基于索引的。
2.2 查询参数
接下来,让我们看看如何使用queryParam()指定查询参数:
@Test
void whenUseQueryParam_thenOK() {
given().queryParam("q", "john")
.when().get("/search/users")
.then().statusCode(200);
given().param("q", "john")
.when().get("/search/users")
.then().statusCode(200);
}
param()方法的行为类似于使用GET请求的queryParam()。
要添加多个查询参数,我们可以链接多个queryParam()方法,或者将参数添加到queryParams()方法:
@Test
void whenUseMultipleQueryParam_thenOK() {
int perPage = 20;
given().queryParam("q", "john").queryParam("per_page", perPage)
.when().get("/search/users")
.then().body("items.size()", is(perPage));
given().queryParams("q", "john", "per_page", perPage)
.when().get("/search/users")
.then().body("items.size()", is(perPage));
}
2.3 表单参数
最后,我们可以使用formParams()指定表单参数:
@Test
void whenUseFormParam_thenSuccess() {
given().formParams("username", "john","password","1234").post("/");
given().params("username", "john","password","1234").post("/");
}
params()方法将为POST请求执行formParams()的生命周期。
另请注意,formParam()添加了一个值为“application/x-www-form-urlencoded”的Content-Type标头。
3. 设置请求头
接下来,我们可以使用header()自定义请求头:
@Test
void whenUseCustomHeader_thenOK() {
given().header("User-Agent", "MyAppName").when().get("/users/tuyucheng7")
.then().statusCode(200);
}
在此示例中,我们使用header()来设置User-Agent标头。
我们还可以使用相同的方法添加具有多个值的标头:
@Test
void whenUseMultipleHeaderValues_thenOK() {
given().header("My-Header", "val1", "val2")
.when().get("/users/tuyucheng7")
.then().statusCode(200);
}
在此示例中,我们将有一个包含两个标头的请求:My-Header:val1和My-Header:val2。
要添加多个标头,我们可以使用headers()方法:
@Test
void whenUseMultipleHeaders_thenOK() {
given().headers("User-Agent", "MyAppName", "Accept-Charset", "utf-8")
.when().get("/users/tuyucheng7")
.then().statusCode(200);
}
4. 添加Cookie
我们还可以使用cookie()为我们的请求指定自定义cookie:
@Test
void whenUseCookie_thenOK() {
given().cookie("session_id", "1234").when().get("/users/tuyucheng7")
.then().statusCode(200);
}
我们还可以使用Cookie.Builder自定义我们的cookie:
@Test
void whenUseCookieBuilder_thenOK() {
Cookie myCookie = new Cookie.Builder("session_id", "1234")
.setSecured(true)
.setComment("session id cookie")
.build();
given().cookie(myCookie)
.when().get("/users/tuyucheng7")
.then().statusCode(200);
}
5. 总结
在本文中,我们演示了如何在使用Rest-Assured时指定请求参数、请求头和cookie。
与往常一样,本教程的完整源代码可在GitHub上获得。