Anonymous
Запрос Gatling Java будет вызываться только один раз для получения информации для входа в систему для других запросов, к
Сообщение
Anonymous » 28 июн 2024, 07:28
Я хочу, чтобы мой вход в систему выполнялся только один раз, поскольку он управляется сторонней службой, поэтому после того, как токен будет получен один раз в течение всего времени тестов, он не должен выполняться снова. Этот токен должен быть внедрен как заголовок файла cookie для других вызовов API, не меняясь независимо от того, сколько вызовов было выполнено для этих других запросов в рамках одного и того же выполнения тестов. Ниже приведено то, что у меня есть, но, возможно, из-за того, как Гатлинг управляет сеансами, он не работает, и вход в систему выполняется столько раз, сколько вызывают другие API.
Код: Выделить всё
import io.gatling.javaapi.core.ScenarioBuilder;
import io.gatling.javaapi.core.Simulation;
import io.gatling.javaapi.http.HttpProtocolBuilder;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.atomic.AtomicReference;
import static io.gatling.javaapi.core.CoreDsl.*;
import static io.gatling.javaapi.http.HttpDsl.*;
@Slf4j
public class DebugSimulation extends Simulation {
private static final String BASE_URL_DEV = "https://aml-ar-reporting.apps.stl.bnw-dev-pas.mycompany.int";
private static final String BASE_URL_STAGE = "https://dtl.mycompanyconnect.com/";
private static final String ENV = System.getProperty("env");
private static final String BASE_URL = ENV.equals("dev") ? BASE_URL_DEV : BASE_URL_STAGE;
private static final String API_PATH = ENV.equals("dev") ? "" : "aml-account-risk/api";
private static final AtomicReference authCookieRef = new AtomicReference();
private final HttpProtocolBuilder httpProtocol = http
.disableFollowRedirect()
.baseUrl(BASE_URL)
.acceptHeader("application/json")
.header("X-AmlArReporting-CID", "125283")
.header("X-AmlArReporting-ICAs", "5655,9529,14516,15662,20929,31627,31931");
private final ScenarioBuilder scn = scenario("MyScenario")
.exec(session -> {
if (authCookieRef.get() != null) {
System.out.println("User does not need cookie");
return session.set("authCookie", authCookieRef.get());
}
else {
System.out.println("User needs cookie");
}
return session.set("needLogin", true);
})
.doIf(session -> session.contains("needLogin")).then(
exec(http("Login")
.post("/heracles/login")
.header("Content-Type", "application/x-www-form-urlencoded")
.formParam("username", "aml_ar_stg")
.formParam("password", "1234")
.formParam("login-form-type", "token")
.check(status().is(302), header("Set-Cookie").saveAs("authCookie")))
.exec(session -> {
String authCookie = session.getString("authCookie").split(";")[0];
authCookieRef.set("auth_token=" + authCookie);
return session.set("authCookie", authCookieRef.get());
})
)
.exec(http("LastRefreshDate")
.get(API_PATH + "/notifications/last-refresh-date")
.header("cookie", "#{authCookie}")
.check(status().is(200))
);
{
setUp(
scn.injectOpen(atOnceUsers(2))
).protocols(httpProtocol);
}
}
Спасибо.
Подробнее здесь:
https://stackoverflow.com/questions/786 ... ion-for-ot
1719548899
Anonymous
Я хочу, чтобы мой вход в систему выполнялся только один раз, поскольку он управляется сторонней службой, поэтому после того, как токен будет получен один раз в течение всего времени тестов, он не должен выполняться снова. Этот токен должен быть внедрен как заголовок файла cookie для других вызовов API, не меняясь независимо от того, сколько вызовов было выполнено для этих других запросов в рамках одного и того же выполнения тестов. Ниже приведено то, что у меня есть, но, возможно, из-за того, как Гатлинг управляет сеансами, он не работает, и вход в систему выполняется столько раз, сколько вызывают другие API. [code]import io.gatling.javaapi.core.ScenarioBuilder; import io.gatling.javaapi.core.Simulation; import io.gatling.javaapi.http.HttpProtocolBuilder; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.atomic.AtomicReference; import static io.gatling.javaapi.core.CoreDsl.*; import static io.gatling.javaapi.http.HttpDsl.*; @Slf4j public class DebugSimulation extends Simulation { private static final String BASE_URL_DEV = "https://aml-ar-reporting.apps.stl.bnw-dev-pas.mycompany.int"; private static final String BASE_URL_STAGE = "https://dtl.mycompanyconnect.com/"; private static final String ENV = System.getProperty("env"); private static final String BASE_URL = ENV.equals("dev") ? BASE_URL_DEV : BASE_URL_STAGE; private static final String API_PATH = ENV.equals("dev") ? "" : "aml-account-risk/api"; private static final AtomicReference authCookieRef = new AtomicReference(); private final HttpProtocolBuilder httpProtocol = http .disableFollowRedirect() .baseUrl(BASE_URL) .acceptHeader("application/json") .header("X-AmlArReporting-CID", "125283") .header("X-AmlArReporting-ICAs", "5655,9529,14516,15662,20929,31627,31931"); private final ScenarioBuilder scn = scenario("MyScenario") .exec(session -> { if (authCookieRef.get() != null) { System.out.println("User does not need cookie"); return session.set("authCookie", authCookieRef.get()); } else { System.out.println("User needs cookie"); } return session.set("needLogin", true); }) .doIf(session -> session.contains("needLogin")).then( exec(http("Login") .post("/heracles/login") .header("Content-Type", "application/x-www-form-urlencoded") .formParam("username", "aml_ar_stg") .formParam("password", "1234") .formParam("login-form-type", "token") .check(status().is(302), header("Set-Cookie").saveAs("authCookie"))) .exec(session -> { String authCookie = session.getString("authCookie").split(";")[0]; authCookieRef.set("auth_token=" + authCookie); return session.set("authCookie", authCookieRef.get()); }) ) .exec(http("LastRefreshDate") .get(API_PATH + "/notifications/last-refresh-date") .header("cookie", "#{authCookie}") .check(status().is(200)) ); { setUp( scn.injectOpen(atOnceUsers(2)) ).protocols(httpProtocol); } } [/code] Спасибо. Подробнее здесь: [url]https://stackoverflow.com/questions/78680656/gatling-java-request-to-be-called-only-once-to-retrieve-login-information-for-ot[/url]