首页 > 解决方案 > Gatling 同时使用 session.set 和 feed

问题描述

如果我使用.get("/***/quotes-${endPoint}/quotes?source=rtbp&userid=test&symbol=${pTypeSymbol}${authM}${pEqSymbol}")然后 ${pEqSymbol} 工作,但 ${pTypeSymbol} 将是 ${pEqSymbol}这是不正确的例子 get 它应该在下面的代码中

val getApiKeyScenario = scenario("getApiKey")
    .feed(getApiKeyData)
    .feed(pEqSymbolFeed)
    .feed(pOptionSymbol)
    .feed(pOtherSymbol)
    .exec(session => session
      .set("endPoint", "v1")
      .set("pTypeSymbol", "${pEqSymbol}")
      .set("authM", "&apikey=***********"))
    .exec(http("getApiKeyRequest")
      .get("/******/quotes-${endPoint}/quotes?source=rtbp&userid=test&symbol=${pTypeSymbol}${authM}")
      .check(status.is(200))
      .check(checkIf(doLogResponse) {
        bodyString.saveAs("pResponse")
      })
    )
    .doIf(doLogResponse) {
      logResponse()
    }

如果我尝试.set("pTypeSymbol", pEqSymbolFeed.readRecords.head("pEqSymbol"))将是循环如果我尝试.set("pTypeSymbol", s"${pEqSymbol.isDefined}")未找到:值 pEqSymbol 如果我尝试s"${pEqSymbol}"未找到:值 pEqSymbol

我现在登录的是GET *******/quotes-v1/quotes?source=rtbp&userid=test&symbol=${pEqSymbol}&apikey=****** 但应该是GET *******/quotes-v1/quotes?source=rtbp&userid=test&symbol="Here my value from feed"&apikey=******

标签: session-variablesfeedgatling

解决方案


请阅读官方文档

此表达式语言仅适用于传递给 Gatling DSL 方法的字符串值。当实例化 Gatling 模拟时,此类字符串仅被解析一次。

例如 queryParam("latitude", session => "${latitude}") 不起作用,因为参数不是字符串,而是返回字符串的函数。

在您的示例中,您不需要复制pEqSymbolpTypeSymbol,您可以直接编写:

.exec(session => session
      .set("endPoint", "v1")
      .set("authM", "&apikey=***********"))
    .exec(http("getApiKeyRequest")
      .get("/******/quotes-${endPoint}/quotes?source=rtbp&userid=test&symbol=${pEqSymbol}${authM}")
      )
    )

但是如果你坚持复制,你必须使用Session API

.set("pTypeSymbol", session("pEqSymbol").as[String])

推荐阅读