如何从Gatling Expression [String]中取出一个字符串

时间:2015-03-30 11:27:34

标签: scala gatling

我正在尝试编译一个字符串,如:

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 }
}

但此函数返回验证[Expression [String]]。我怎么能得到编译的字符串?

干杯。

2 个答案:

答案 0 :(得分:0)

最后问题不在于问题。实际上我在会话中保存了所有json。但问题是像$ {body2.id}这样的表达只有在会话属性如下时才有效:

Map(body2 -> Map(id -> 45787))

但我的是

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

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

修改

只需要指定类型为Stephane Landelle说:

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

答案 1 :(得分:0)

即使这确实是一个古老的问题,但由于我也为此而苦苦挣扎,因此我应该给出用例。

最好先转换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}"
    }
  }