Как поддерживать один и тот же сеанс для нескольких запросов в состоянии покоя?

Предварительно требуется:Надежные тесты API с Java

Шаг 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"**

Примечание. Я также заметил сеансы для вышеуказанных запросов, и оба они разные.

Ожидаемый результат: я хочу использовать тот же входной билет и поддерживать те же сеансы.


person sridattas    schedule 06.03.2020    source источник


Ответы (2)


вы можете получить SessionID/cookie из входа в систему и передать его как SessionID следующему запросу в качестве заголовка для поддержания одного сеанса.

например:

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

Как насчет отправки запроса с куки? Допустим, вы получили access_token в cookie после успешного входа в систему, вы можете отправить запрос в access_token в cookie:

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);
person Daniel Deng    schedule 15.11.2020