![](/img/trans.png)
[英]How to validate a response and extract a value from Response body in Rest Assured?
[英]How to extract cookies from a REST Assured response using common code
使用 REST Assured(4.3.3,來自 Java)我可以自由地操作基礎測試類中的請求和響應規范對象,這樣當實際測試需要請求規范來執行實際調用時,它是“預配置”的常見的說法。 例如:
public abstract class TestBase
protected RequestSpecification request() {
return given()
.cookies(globalCookies)
.port(serverPort)
.log().ifValidationFails()
.then()
.log().ifValidationFails()
.given();
}
}
public class ActualTest extends TestBase {
@Test
public void test1() {
String content = request().get("/some").then()
.statusCode(200)
.extract()
.body().asString();
}
}
我現在想做的是“預配置”規范以在請求之間保留 cookie。 我正在使用RequestSpecification.cookies(Cookies)
要發送的 cookie 列表,但我找不到任何方法來指示規范在獲取Response
實例之前提取返回的 cookie。 但是,此類實例僅在調用RequestSender
方法之一后才可用,而我無法在基本代碼中執行此操作。
下面概述了我考慮過的解決此問題的方法,但前兩個非常笨拙,第三個可能完全錯誤,因為它與“內部”子包中的類發生沖突。 有沒有“正確”的方法來做到這一點?
saveCookies()
,它接受ValidatableResponse
一個實例,它可以在該實例上調用extract()
並獲取 cookie。 然后每次測試都必須使用該方法。public abstract class TestBase
// ...
protected ValidatableResponse saveCookies(ValidatableResponse r) {
saveGlobalCookies(r.extract().detailedCookies());
return r;
}
}
public class ActualTest extends TestBase {
@Test
public void test1() {
String content = saveCookies(request().get("/some").then())
.statusCode(200)
.extract()
.body().asString();
}
}
ValidatableResponse
,並將最終結果(如果需要)返回給調用者。public abstract class TestBase
// ...
<T> T cookieRequest(Function<RequestSender, ValidatableResponse> exec, Function<ValidatableResponse, T> post) {
ValidatableResponse vr = exec.apply(request());
saveGlobalCookies(vr.extract().detailedCookies());
return post.apply(vr);
}
}
public class ActualTest extends TestBase {
@Test
public void test1() {
String content = cookieRequest(r->r.get("/some").then(),
r->r.extract().body().asString());
}
}
ResponseSpecificationImpl
擴展實例(拖動RequestSpecificationImpl
和TestSpecificationImpl
)。您可以使用CookieFilter
來滿足您的需求。
cookie 過濾器可用於跟蹤服務器發送的所有 cookie 並在后續請求中使用它們
您可以通過兩種方式使用此類:
RestAssured.filters(new CookieFilter());
CookieFilter cookieFilter = new CookieFilter();
//Request 1
given().filter(cookieFilter).get("/x");
//Request 2
given().filter(cookieFilter).get("/y");
想要查詢更多的信息:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.