2017-08-10 1 views
0

nous utilisons repos-assuré dans deux situations où je ne peux pas trouver une solution automatique. J'ai le sentiment qu'il me manque quelque chose.Rest-Assured cookie keep OU entête d'autorisation à jour

1 #:

jusqu'à présent Rest-Assured a été mise à jour automatiquement la valeur de la session du serveur. nous avons récemment migré vers une nouvelle architecture qui utilise un équilibreur de charge. donc le serveur retourne en plus à l'ancien, un nouveau cookie représentant l'équilibreur de charge. Je trouve mon auto obtenant le nouveau cookie par programme et mettant à jour les demandes suivantes. peut être assuré faire le automatiquement pour moi?

2 #:

autres serveurs nécessitent l'en-tête "Authorization: Bearer yada.yada.yada". à renouveler après chaque demande. Ici aussi comment puis-je dire repos-Assuré de le faire automatiquement pour moi?

merci shay

+0

Comment obtenez-vous un nouveau jeton d'authentification? De la dernière réponse? – RocketRaccoon

+0

oui, j'envoie une demande de "connexion" avec clé/secret. et obtenir une réponse de JWT. à partir de ce point, toute requête va renvoyer un nouveau JWT dans l'en-tête, et j'ai besoin d'envoyer ce jeton lors de ma prochaine demande. ma solution actuelle consiste à mettre à jour l'en-tête pour la prochaine demande manuellement. –

Répondre

1

Je vous recommande d'utiliser AuthFilter pour fournir automatiquement en-tête auth à vos demandes. Mais vous avez encore besoin d'extraire des données - le faire avec un filtre supplémentaire:

import io.restassured.RestAssured; 
import io.restassured.builder.ResponseBuilder; 
import io.restassured.filter.FilterContext; 
import io.restassured.filter.OrderedFilter; 
import io.restassured.response.Response; 
import io.restassured.specification.FilterableRequestSpecification; 
import io.restassured.specification.FilterableResponseSpecification; 
import org.testng.annotations.Test; 

import static io.restassured.RestAssured.given; 

public class ReuseRestAssuredResponse { 

    private static String authVal = "default"; 

    @Test 
    public void sampleTest() { 
     RestAssured.filters(new SetAuthFilter(), new GetAuthFilter()); 
     given() 
       .log().all() 
       .when() 
       .get("https://httpbin.org/get") 
       .then() 
       .log().all(); 

     given() 
       .log().all() 
       .when() 
       .get("https://httpbin.org/get") 
       .then() 
       .log().all(); 
    } 

    class SetAuthFilter implements OrderedFilter { 

     @Override 
     public Response filter(FilterableRequestSpecification filterableRequestSpecification, FilterableResponseSpecification filterableResponseSpecification, FilterContext filterContext) { 
      filterableRequestSpecification.header("Testauth", authVal); 
      return filterContext.next(filterableRequestSpecification, filterableResponseSpecification); 
     } 

     @Override 
     public int getOrder() { 
      return DEFAULT_PRECEDENCE - 1; 
     } 
    } 

    class GetAuthFilter implements OrderedFilter { 

     @Override 
     public Response filter(FilterableRequestSpecification filterableRequestSpecification, FilterableResponseSpecification filterableResponseSpecification, FilterContext filterContext) { 
      Response response = filterContext.next(filterableRequestSpecification, filterableResponseSpecification); 
      authVal = response.body().path("headers.Testauth") + "_updated"; 
      return response; 
     } 

     @Override 
     public int getOrder() { 
      return DEFAULT_PRECEDENCE; 
     } 
    } 

} 

Alors ... qu'est-ce happing ici?

première demande sera faite avec en-tête Testauth=default la seconde avec Testauth=default_updated, et si vous allez ajouter d'autre une itération il serait Testauth=default_updated_updated

En fait GetAuthFilter devrait être un peu difficile à respecter les attentes du corps, voir la mise en œuvre de io.restassured.filter.log.StatusCodeBasedLoggingFilter qui extrait les données de réponse et les imprime.

Vous pouvez également utiliser FilterContext valeurs de stockage pour passer des valeurs entre les filtres, variable statique externe est juste pour simplifier l'exemple.

+0

cela ressemble à un moyen propre de le faire, merci –