1. Overview
In this quick tutorial, we’ll explore some REST-assured advanced scenarios. We explored REST-assured before in the tutorial a Guide to REST-assured.
To continue, we’ll cover examples that show how to set headers, cookie and parameters for our requests.
The setup is the same as the previous article, so let’s dive into our examples.
2. Setting Parameters
Now, let’s discuss how to specify different parameters to our request – starting with path parameters.
2.1. Path Parameters
We can use pathParam(parameter-name, value) to specify a path parameter:
@Test public void whenUsePathParam_thenOK() { given().pathParam("user", "eugenp") .when().get("/users/{user}/repos") .then().statusCode(200); }
To add multiple path parameters we’ll use the pathParams() method:
@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); }
In this example, we’ve used named path parameters, but we can also add unnamed parameters, and even combine the two:
given().pathParams("owner", "eugenp") .when().get("/repos/{owner}/{repo}", "tutorials") .then().statusCode(200);
The resulting URL, in this case, is https://api.github.com/repos/eugenp/tutorials.
Note that the unnamed parameters are index-based.
2.2. Query Parameters
Next, let’s see how we can specify query parameters using 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); }
The param() method will act like queryParam() with GET requests.
For adding multiple query parameters, we can either chain several queryParam() methods, or add the parameters to a queryParams() method:
@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
Finally, we can specify form parameters using formParam():
@Test public void whenUseFormParam_thenSuccess() { given().formParams("username", "john","password","1234").post("/"); given().params("username", "john","password","1234").post("/"); }
The param() method will act life formParam() for POST requests.
Also note that formParam() adds a Content-Type header with the value “application/x-www-form-urlencoded“.
3. Setting Headers
Next, we can customize our request headers using header():
@Test public void whenUseCustomHeader_thenOK() { given().header("User-Agent", "MyAppName").when().get("/users/eugenp") .then().statusCode(200); }
In this example, we’ve used header() to set the User-Agent header.
We can also add a header with multiple values using the same method:
@Test public void whenUseMultipleHeaderValues_thenOK() { given().header("My-Header", "val1", "val2") .when().get("/users/eugenp") .then().statusCode(200); }
In this example, we’ll have a request with two headers: My-Header:val1 and My-Header:val2.
For adding multiple headers, we’ll use the headers() method:
@Test public void whenUseMultipleHeaders_thenOK() { given().header("User-Agent", "MyAppName", "Accept-Charset", "utf-8") .when().get("/users/eugenp") .then().statusCode(200); }
4. Adding Cookies
We can also specify custom cookie to our request using cookie():
@Test public void whenUseCookie_thenOK() { given().cookie("session_id", "1234").when().get("/users/eugenp") .then().statusCode(200); }
We can also customize our cookie using cookie Builder:
@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. Conclusion
In this article, we’ve shown how we can specify request parameters, headers, and cookies when using REST-assured.
And, as always, the full source code for the examples is available over on GitHub.