簡體   English   中英

如何在放心的情況下跨多個請求保持相同的會話?

[英]How to maintain same session across multiple requests in rest-assured?

先決條件:使用 Java 進行放心的 api 測試

步驟1. 啟動 URL 並獲取登錄票- 下面的代碼片段獲取登錄票

RestAssured.baseURI = "https://ve4al10p:453";
RestAssured.useRelaxedHTTPSValidation();
Response res = 
   given().
        header("Content-Type","application/json").
    when().
        post("/i/login?action=lt").
    then().
        assertThat().statusCode(200).
        extract().response();
    res.prettyPrint();

輸出:通知登錄票

lt":"LT-12370-j4znjFQkGMXMjlT3uKJ"

步驟 2. 使用登錄票並使用用戶名和密碼進行登錄。 我提取了登錄票並傳遞給下一個請求(續片段)。

 CookieFilter cookieFilter = new CookieFilter();
 Response res1 = given(). 
    filter(cookieFilter).
    header("Content-Type","application/json").
    queryParam("lt",loginticket). 
    queryParam("username","user1"). 
    queryParam("password","pass1"). 
when().
    post("/i/login?service=https://ve4al10p:443/spa").  
then().
    assertThat().statusCode(200).
    extract().response();
res1.prettyPrint();

輸出:注意它再次創建了一個新的登錄票,這意味着一個新的會話並沒有給出預期的輸出。

**"lt":"LT-12369-u6osMkesdg6RQu9JPoDARL4D"**

注意:我還注意到上述請求的會話,兩者都不同。

預期輸出:我想使用相同的登錄票並保持相同的會話。

您可以從登錄中獲取 SessionID/cookie,並將其作為 SessionID 傳遞給下一個請求作為標頭以維護單個會話。

例如:

String JsessionID = given().header(h1).body(payload).when().post(basepath).thenReturn().cookie("JSESSIONID");
given().headers(JsessionID).body(body).when().post();

用cookie發送請求怎么樣? 假設您在登錄成功后在 cookie 中獲得了 access_token,您可以在 cookie 中的 access_token 內發送請求:

String token = given()
    .contentType(ContentType.JSON)
    .body(payload)
    .log()
    .all()
.when()
    .post(loginUrl)
    .thenReturn()
    .cookie("access_token");

Cookie tokenCookie = new Cookie.Builder("access_token", token)
    .setSecured(true)
    .setComment("some comment")
    .build();

assertEquals(given()
    .cookie(tokenCookie)
    .when()
    .get(nextRequest)
    .statusCode(), 200);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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