繁体   English   中英

如何链接 doIfElse Scala Gatling

[英]How to chain doIfElse Scala Gatling

我们正在尝试将我们的 Gatling 测试从 Scala 迁移到 Java。我们有一个 function,它链接了一些 exec,并且在这之间有一个 doIfElse。 尝试在 Java 上添加相同的内容会影响方法的返回类型,并且对 Scala 不是很熟悉,我们不确定如何将整个登录 function 迁移到 Java class。

Scala版

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")
    }
  }

Java

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)

                );
    }

在此处输入图像描述

谢谢你。

事实证明,java 代码中缺少 else 块。 由于 Java 不支持柯里化函数,gatling 提供了一些方法以将操作链接在一起。 所以基于Gatling docs ,这将达到目的:

.doIfOrElse(session -> session.contains("token")).then(
                        exec(session -> session)
                ).orElse(session -> {...});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM