在Gatling中将值传递给多个文件

时间:2017-10-31 19:03:29

标签: scala gatling

我正在使用Gatling为我公司的基于Web的应用程序设计软件测试。经过多次迭代后,我进入了一个设计,我认为这将使我公司的测试人员能够轻松地根据需要轻松更改参数,但这非常复杂。包含场景,设置和模拟调用的主文件都包含在一个文件中,然后通过我们正在测试的其他每个函数的方法连接到不同的文件。

我的问题是,当使用其中一个函数文件登录我们的API时,它会发送一个包含会话令牌的响应。重要的是我能够将该令牌的值传递回主文件,以便我可以将其用作其他函数方法中的参数。我在将此令牌的实际值传递给主文件时遇到问题。

以下是该方法的示例代码:

object BasicLogin {
   def login ( hostparam:String, controlparam:String, usernameparam:String, passwordparam:String) : (ChainBuilder, String) = {

      val user = usernameparam

      val password = passwordparam

      val host = hostparam
      val controlid = controlparam
      val logintype = "user"



      val jsonrequest = """{"logintype":"""" + logintype + """",
            "controlid":"""" + controlid + """",
            "user":"""" + user + """",
            "password":"""" + password + """",
            "host":"""" + host + """"
            }"""

      val loginChain = exec(http("Login")
          .post("sample.url.com")
          .body(StringBody(jsonrequest))
          .asJSON
          .check(jsonPath("$..result").is("true"))
          .check(jsonPath("$..session")
          .find
          .saveAs("currentSession")))

        val accessToken: String = exec(session => {
           val sessionid = session("currentSession").as[String]
           println("token: " + sessionid)
           session })  
           .toString

        return (loginChain, accessToken)
    }
}

这是我的代码调用登录方法:

val host = "IPaddress"
  val controlid = "IDcontroller"
  val username = "JDoe"
  val password = "TerriblePassword"

  val result = BasicLogin.login(host, controlid, username, password)
  val basiclogin:ChainBuilder = result._1
  val currentSession:String = result._2

  println("Session: " + currentSession)
  println("Login: " + basiclogin)

以下是我的回应:

Session: ChainBuilder(List(io.gatling.core.action.builder.SessionHookBuilder@6f70f32f))
Login: ChainBuilder(List(io.gatling.http.action.sync.HttpRequestActionBuilder@3dd69f5a))

我在许多不同的地方进行过搜索,但在类似的问题上找不到太多。我知道Gatling是以多演员的形式进行的,并不确定这是否可行。我已经使用了save as方法,并尝试使用Gatling DSL调用该值,但没有运气。我原本试图在没有方法的情况下使用值,但是失败了。我也尝试了set方法和映射,但这两种方法都没有。

所以现在我试图从响应中获取一个值,并使用该方法将其返回到主文件中。它运行,但它返回链式构建器。

有什么建议吗?

罗布

0 个答案:

没有答案