如何从 Gatling Expression[String] 中提取字符串

How to get off a string from Gatling Expression[String]

我正在尝试编译如下字符串:

val route = "this/is/my/url/${body2.id}"

其中 body2 是来自先前请求的 json 响应。

所以我尝试用 :

编译这个字符串
val routeExpression = (route).el[String]

我在这个问题上看到了:Getting the String out of a Gatling expression

我应该做类似的事情:

def getRoute = {
  routeExpression.map { route => route }
}

但是这个函数 return 是一个 Validation[Expression[String]]。我怎样才能编译字符串?

干杯。

终于不是问的问题了。事实上,我在会话中保存了所有 json 。但问题是像 ${body2.id} 这样的加特林表达式只有在会话属性像 :

时才有效
Map(body2 -> Map(id -> 45787))

但我的是

Map(body2 -> "{ id: 45787 }")

所以我使用 Jackson 库来解析我的 json 以将其转换为地图,它解决了问题。

编辑

只需按照 Stephane Landelle 所说的那样指定类型即可:

check(jsonPath("$").ofType[Map[String, Any]].saveAs("myJson"))

即使这确实是一个老问题,但由于我也曾为此苦苦挣扎过一次,所以我应该给出我的用例。

最好先将json转换为映射(使用jackson),然后使用起来更容易。

  def jsonToMap(jsonContent: Expression[String]): Expression[Map[String, Object]] = {
    val mapper = new ObjectMapper() with ScalaObjectMapper
    mapper.registerModule(DefaultScalaModule)
    jsonContent.map { json =>
      mapper.readValue(json, classOf[Map[String, Object]])
    }
  }

  def getRoute(bodyMap: Expression[Map[String, Object]]): Expression[String] = {
    bodyMap.map { body2 =>
      "this/is/my/url/${body2.id}"
    }
  }