Мне нужно вызвать API сообщения с помощью Rest-assured, который использует
X-XSRF Token in the header
XSRF-TOKEN and JSESSIONID in the cookie
Для этой операции в Почтальоне я выполняю следующие шаги
- Получите страницу входа (Метод: Get)
- Теперь нажмите API входа / аутентификации (метод: POST) (Если не указано выше, 2 шага, я дважды вызываю сам API аутентификации) a.) При первом вызове API аутентификации я получаюниже ошибка Ошибка: не удалось проверить предоставленный токен CSRF, так как ваш сеанс не был найден. б.) Второй раз, когда я называю это, будет успешным
- Теперь нажмите Post API, чтобы создать запись
Я должен автоматизировать этот поток с помощью Rest Assured, и ниже мой код
Ниже приведены две проблемы. Пожалуйста, помогите мне исправить это
когда я нажимаю метод get для входа в систему, не генерируется страница sessionID, которую мне нужно разместитьв файле cookie JSESSIONID
API входа / аутентификации вызывается дважды, (я использую аутентификацию формы)
открытый класс Login {
SessionFilter sessionFilter = new SessionFilter();
private class SessionData
{
private String csrf;
private String session;
public SessionData(String header, String sessionId){this.csrf = header;this.session = sessionId;}
public String getCsrf(){return csrf;}
public String getSessionId(){return session;}
}
protected SessionData login(String username, String password) {
Response getLoginPage =
given().log().all().
filter(sessionFilter).
when().
get("/").
then().log().all().
extract().response();
String loginPage_csrf = getLoginPage.getCookies().get("XSRF-TOKEN");
System.out.println("1st response end get login page :" + loginPage_csrf );
Response login_cred =
given().log().all().
auth().form(username,password,new FormAuthConfig("/api/authentication", "j_username", "j_password").withLoggingEnabled()).
header("X-XSRF-TOKEN",loginPage_csrf).
filter(sessionFilter).
when().
post("/api/authentication").
then().log().all().
extract().response();
String Loggedin_csrf = login_cred.getCookies().get("XSRF-TOKEN");
System.out.println("2nd response authentication :" + Loggedin_csrf );
return new SessionData(Loggedin_csrf, sessionFilter.getSessionId());
}
@Test
public void create_role() throws IOException
{
RestAssured.baseURI = "https://apitest.com";
SessionData sessionData = login("admin", "admin");
final Response response =
(Response) given().log().all().
contentType("application/json; charset=UTF-16").
header("X-XSRF-TOKEN", sessionData.getCsrf()).
filter(sessionFilter).
body(getString("JSON Files/Roles_Section/CreateRole.JSON")).
when().
post("/api/authority").then().log().all();
response.body().prettyPrint();
Assert.assertEquals(response.getStatusCode(),HttpStatus.SC_ACCEPTED);
}
// read Payload from JSON file
public String getString(String path) throws IOException {return new String(Files.readAllBytes(Paths.get(path)));}
}