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.
Wie erhalten Sie neue Authentifizierungstoken? Von letzter Antwort? – RocketRaccoon
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. –