2017-08-10 3 views
0

Wir verwenden Ruhe in zwei Situationen, in denen ich keine automatische Lösung finden kann. Ich habe das Gefühl, dass mir etwas fehlt.Rest-Assured halten Cookie ODER Autorisierung Header auf dem neuesten Stand

1 #:

bis jetzt Ruhe-Assured wurde automatisch den Sitzungswert vom Server zu aktualisieren. Wir sind kürzlich zu einer neuen Architektur übergegangen, die einen Load Balancer verwendet. Der Server gibt also zusätzlich zu dem alten einen neuen Cookie zurück, der den Lastenausgleich darstellt. Ich finde, dass ich den neuen Cookie programmatisch bekomme und die nächsten Anfragen aktualisiere. kann beruhigt das automatisch für mich tun?

2 #:

andere Server benötigen den Header "Authorization: Inhaber yada.yada.yada". nach jeder Anfrage erneuert werden. Auch hier, wie kann ich Ruhe sagen - Sicher, das für mich automatisch zu tun?

danke Shay

+0

Wie erhalten Sie neue Authentifizierungstoken? Von letzter Antwort? – RocketRaccoon

+0

Ja, ich sende eine "Anmelden" Anfrage mit Schlüssel/Geheimnis. und eine Antwort von JWT bekommen. Von diesem Punkt wird jede Anfrage ein neues JWT in der Kopfzeile zurücksenden, und ich muss dieses Token bei meiner nächsten Anfrage senden. Meine derzeitige Lösung besteht darin, den Header für die nächste Anfrage manuell zu aktualisieren. –

Antwort

1

ich Ihnen AuthFilter automatisch zu liefern Auth-Header, um Ihre Anfragen zu verwenden, empfehlen würde. Aber Sie müssen noch Daten extrahieren - tun Sie es mit einem zusätzlichen Filter:

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

} 

Also ... was ist denn hier happing?

erste Anfrage wird mit Kopf Testauth=default den zweiten mit Testauth=default_updated gemacht werden, und wenn Sie sonst einer Iteration hinzufügen werden, es wäre Testauth=default_updated_updated

Eigentlich GetAuthFilter ein wenig schwierig sein sollten Körper Erwartungen zu respektieren, sieht die Umsetzung von io.restassured.filter.log.StatusCodeBasedLoggingFilter die Antwortdaten extrahieren und drucken.

Auch können Sie FilterContext Wertespeicher verwenden, um Werte zwischen Filtern zu übergeben, externe statische Variable ist nur, um Beispiel zu vereinfachen.

+0

das sieht nach einem sauberen Weg aus, danke –

Verwandte Themen