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.
Comment obtenez-vous un nouveau jeton d'authentification? De la dernière réponse? – RocketRaccoon
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. –