我正在使用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方法和映射,但这两种方法都没有。
所以现在我试图从响应中获取一个值,并使用该方法将其返回到主文件中。它运行,但它返回链式构建器。
有什么建议吗?
罗布