En-têtes, cookies et paramètres avec REST-assuré

En-têtes, cookies et paramètres avec REST-assuré

1. Vue d'ensemble

Dans ce rapide didacticiel, nous allons explorer quelques scénarios avancés garantis par REST. Nous avons exploré REST-assuré auparavant dans le tutoriela Guide to REST-assured.

Pour continuer,we’ll cover examples that show how to set headers, cookie and parameters for our requests.

La configuration est la même que celle de l'article précédent, alors plongons dans nos exemples.

2. Définition des paramètres

Voyons maintenant comment spécifier différents paramètres pour notre requête, en commençant par les paramètres de chemin.

2.1. Paramètres de chemin

Nous pouvons utiliserpathParam(parameter-name, value) pour spécifier un paramètre de chemin:

@Test
public void whenUsePathParam_thenOK() {
    given().pathParam("user", "eugenp")
      .when().get("/users/{user}/repos")
      .then().statusCode(200);
}

Pour ajouter plusieurs paramètres de chemin, nous utiliserons la méthodepathParams():

@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);
}

Dans cet exemple, nous avons utilisé des paramètres de chemin nommés, mais nous pouvons également ajouter des paramètres sans nom et même combiner les deux:

given().pathParams("owner", "eugenp")
  .when().get("/repos/{owner}/{repo}", "tutorials")
  .then().statusCode(200);

L'URL résultante, dans ce cas, esthttps://api.github.com/repos/eugenp/tutorials.

Notez que les paramètres non nommés sont basés sur un index.

2.2. Paramètres de requête

Voyons ensuite comment nous pouvons spécifier les paramètres de requête à l'aide dequeryParam():

@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);
}

La méthodeparam() agira commequeryParam() avec les requêtes GET.

Pour ajouter plusieurs paramètres de requête, nous pouvons soit chaîner plusieurs méthodesqueryParam(), soit ajouter les paramètres à une méthodequeryParams():

@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. Paramètres de formulaire

Enfin, nous pouvons spécifier les paramètres du formulaire en utilisantformParam():

@Test
public void whenUseFormParam_thenSuccess() {

    given().formParams("username", "john","password","1234").post("/");

    given().params("username", "john","password","1234").post("/");
}

La méthodeparam() agira à vieformParam() pour les requêtes POST.

Notez également queformParam() ajoute un en-têteContent-Type avec la valeur «application/x-www-form-urlencoded».

3. Définition des en-têtes

Ensuite,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);
}

Dans cet exemple, nous avons utiliséheader() pour définir l'en-têteUser-Agent.

Nous pouvons également ajouter un en-tête avec plusieurs valeurs en utilisant la même méthode:

@Test
public void whenUseMultipleHeaderValues_thenOK() {

    given().header("My-Header", "val1", "val2")
      .when().get("/users/eugenp")
      .then().statusCode(200);
}

Dans cet exemple, nous aurons une requête avec deux en-têtes:My-Header:val1 etMy-Header:val2.

Pour ajouter plusieurs en-têtes, nous utiliserons la méthodeheaders():

@Test
public void whenUseMultipleHeaders_thenOK() {

    given().header("User-Agent", "MyAppName", "Accept-Charset", "utf-8")
      .when().get("/users/eugenp")
      .then().statusCode(200);
}

4. Ajout de cookies

Nous pouvons également spécifier un cookie personnalisé à notre demande en utilisantcookie():

@Test
public void whenUseCookie_thenOK() {

    given().cookie("session_id", "1234").when().get("/users/eugenp")
      .then().statusCode(200);
}

Nous pouvons également personnaliser notre cookie en utilisant le cookieBuilder:

@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

Dans cet article, nous avons montré comment nous pouvons spécifier les paramètres de demande, les en-têtes et les cookies lors de l'utilisation de la garantie REST.

Et, comme toujours, le code source complet des exemples est disponibleover on GitHub.