如何从 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}"
}
}
我正在尝试编译如下字符串:
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}"
}
}