簡體   English   中英

如何使用通用代碼從 REST Assured 響應中提取 cookie

[英]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方法之一后才可用,而我無法在基本代碼中執行此操作。

下面概述了我考慮過的解決此問題的方法,但前兩個非常笨拙,第三個可能完全錯誤,因為它與“內部”子包中的類發​​生沖突。 有沒有“正確”的方法來做到這一點?

  1. 添加一個基本方法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();
  }
}
  1. 使用接受 lambdas 的基本方法,以便可以攔截潛在的中間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());
  }
}
  1. 實例化ResponseSpecificationImpl擴展實例(拖動RequestSpecificationImplTestSpecificationImpl )。

您可以使用CookieFilter來滿足您的需求。

cookie 過濾器可用於跟蹤服務器發送的所有 cookie 並在后續請求中使用它們

您可以通過兩種方式使用此類:

  1. 靜態設置:
RestAssured.filters(new CookieFilter());
  1. 指定您想要的請求:
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM