【问题标题】:How to maintain same session across multiple requests in rest-assured?如何放心地跨多个请求保持相同的会话?
【发布时间】:2020-06-19 02:20:45
【问题描述】:

Pre-req:使用 Java 进行可靠的 api 测试

步骤 1。启动 URL 并获取登录票 - 下面的代码 sn-p 以获取登录票

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 步. 使用登录票并使用用户名和密码进行登录。 我提取了登录票并传递给下一个请求(续 sn-p)。

 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"**

注意:我还注意到上述请求的会话,两者都不同。

预期输出:我想使用相同的登录票并保持相同的会话。

【问题讨论】:

    标签: rest web-services rest-assured web-api-testing


    【解决方案1】:

    您可以从登录中获取 SessionID/cookie,并将其作为 SessionID 作为标头传递给下一个请求,以维护单个会话。

    例如:

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

    【讨论】:

      【解决方案2】:

      用 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);
      

      【讨论】:

        猜你喜欢
        • 2018-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        • 2013-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多