在ELFileBody中传递会话表达式语言变量

时间:2019-05-13 15:15:40

标签: gatling

我在ELFileBody中使用Gatling EL遇到问题。

我有以下执行程序:

exec(myFunction("${myEmail}", otherParameters))

和功能:

def myFunction((email: String) = {
     exec((s: Session) => s.set("email", email))
     .exec(http("MyFunction")
                        .put("/myUrl")
                        .headers(Headers.basic_headers_json)
             .body(ElFileBody("LinkToMyJsonFile"))
                        .asJson
                        .check(status.is(200)))
}

我的myEmail已设置为会话。但是,当exec运行myFunction时,变量在json中将被"${myEmail}"取代,而不是被评估。

您知道如何解决它能够通过myFunction在exec中传递myEmail会话变量吗?

非常感谢

JF

1 个答案:

答案 0 :(得分:1)

您的函数接受一个字符串,然后将其放入会话变量中-因此,当您传入“ $ {myEmail}”时,加特林将该字符串文字放入会话var中。因此,当加特林在ELFile主体中进行替换时,它将完全使用您指定的内容。

我假设您在$ {myEmail}会话var中已经有了想要的电子邮件-为什么不编辑文件以使用$ {myEmail}代替“ $ {email}”呢?

一种更惯用的方法是传递一个Expression [String],对其进行验证并将结果设置为$ {email} var

def myFunction((email: Expression[String]) = {
 exec((s: Session) => email.apply(s) match {
    case Success(address) => s.set("email", address)
    case Failure(error) => {
        println(s"There was an error: $error")
        s
    }
}
...

这将检索$ {myEmail}的值(如果有的话),或者仅是字符串文字,然后将其放入$ {email}变量中。如果您提供的会话变量没有值,则会抛出该错误