I just announced the new Spring 5 modules in REST With Spring:

>> CHECK OUT THE COURSE

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.

I just announced the new Spring 5 modules in REST With Spring:

>> CHECK OUT THE LESSONS