1. 概述
在本快速教程中,我們將探索一些高級的 REST-assured 場景。我們在教程《REST-assured 指南》中之前已經探索過 REST-assured。
為了繼續,我們將涵蓋展示如何為我們的請求設置標題、cookie 和參數的示例。
設置方式與上一篇文章相同,讓我們深入研究我們的示例。
2. Setting Parameters
現在,我們來討論如何為我們的請求指定不同的參數——從路徑參數開始。
2.1. Path Parameters
我們可以使用 pathParam(parameter-name, value) 來指定路徑參數:
@Test
public void whenUsePathParam_thenOK() {
given().pathParam("user", "eugenp")
.when().get("/users/{user}/repos")
.then().statusCode(200);
}
要添加多個路徑參數,我們將使用 pathParams() 方法:
@Test
public void whenUseMultiplePathParam_thenOK() {
given().pathParams("owner", "eugenp", "repo", "tutorials")
.when().get("/repos/{owner}/{repo}")
.then().statusCode(200);
given().pathParams("owner", "eugenp")
.when().get("/repos/{owner}/{repo}","tutorials")
.then().statusCode(200);
}
在這個例子中,我們使用了命名字段參數,但我們也可以添加未命名的參數,甚至將兩者結合:
given().pathParams("owner", "eugenp")
.when().get("/repos/{owner}/{repo}", "tutorials")
.then().statusCode(200);
生成的 URL,在這種情況下是 https://api.github.com/repos/eugenp/tutorials.
請注意,未命名的參數是基於索引的。
2.2. Query Parameters
接下來,讓我們看看如何使用 queryParam(): 確定查詢參數:
@Test
public 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() 方法將像 queryParam() 與 GET 請求一樣工作。
要添加多個查詢參數,我們可以鏈式調用多個 queryParam() 方法,或者將參數添加到 queryParams() 方法:
@Test
public 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. Form Parameters
最後,我們可以使用 formParam(): 確定表單參數:
@Test
public void whenUseFormParam_thenSuccess() {
given().formParams("username", "john","password","1234").post("/");
given().params("username", "john","password","1234").post("/");
}
param() 方法將像 formParam() 與 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);
}
在這個例子中,我們使用了 header() 來設置 User-Agent 請求頭。
我們還可以使用相同的函數添加具有多個值的請求頭:
@Test
public void whenUseMultipleHeaderValues_thenOK() {
given().header("My-Header", "val1", "val2")
.when().get("/users/eugenp")
.then().statusCode(200);
}
在這個例子中,我們將有一個包含兩個請求頭的請求:My-Header:val1 和 My-Header:val2。
要添加多個請求頭,我們將使用 headers() 方法:
@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。