我們正在嘗試將我們的 Gatling 測驗從 Scala 遷移到 Java。我們有一個函式可以鏈接一些 exec 并在它們之間有一個 doIfElse 。嘗試在 Java 上添加相同的內容會影響方法的回傳型別,并且對 Scala 不是很熟悉,我們不確定如何將整個登錄函式遷移到 Java 類。
斯卡拉版本
def loginFlow() = group("Login Flow") {
{
login
}
}
def login(): ChainBuilder = exec { session =>
// Need to construct dynamic urls here and store in session as they won't be evaluated while the scenario is running
session.set("authorize_url", s"${getBaseUrl()}/authorize")
.set("redirect_uri", s"${getRedirectURI(Config.TARGET_ENV)}")
.set("client_id", Config.getProperty("client_id", "152ced50-1369-4b19-8b26-8f3d5d9bfd6a.hmhco.com"))
}.doIfOrElse(session => session.contains("token")) {
// If a token is provided for the user, don't login
exec { session =>
logger.debug("Using a provided token")
session
}
} {
exec { session =>
val username = session("username").as[String]
val password = session("password").as[String]
logger.debug(s"Logging In with user: ${username}/${password}")
session.set("nonce", "99999")
}
}
爪哇
public ChainBuilder loginFlow() {
return group("Login Flow").on(exec(login()));
}
public ChainBuilder login() {
return exec(session -> {
Session newSession = session.set("authorize_url", getBaseUrl());
session.set("redirect_uri", getRedirectURI());
session.set("client_id", Config.getProperty("client_id", "152ced50-1369-4b19-8b26-8f3d5d9bfd6a.hmhco.com")) // Missing semicolon. When it's added the return type for the method changes.
return newSession;
})
.doIfOrElse(session -> session.contains("token")).then(
exec(session -> session)
);
}

謝謝你。
uj5u.com熱心網友回復:
事實證明,Java 代碼中缺少 else 塊。由于 Java 不支持 curried 函式,gatling 提供了一些方法來將動作鏈接在一起。所以基于Gatling docs,這可以解決問題:
.doIfOrElse(session -> session.contains("token")).then(
exec(session -> session)
).orElse(session -> {...});
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/480337.html
