scala - Gatling:将 findAll 转换为排序列表
问题描述
我是 scala 和 Gatling 的新手。我正在尝试将 findAll 的结果转换为排序列表,然后返回排序列表的字符串表示形式。我似乎无法使用以下代码执行此操作:
http(requestTitle)
.post(serverUrl)
.body(ElFileBody(sendMessageFile))
.header("correlation-id", correlationId)
.check(status.is(200),
jsonPath("$.data.sendMessage.targetedRecipients").findAll.transform(recipients => {
println("recipients class: " + recipients.getClass)
var mutable = scala.collection.mutable.ListBuffer(recipients: _*)
var sortedRecipients = mutable.sortWith(_ < _)
println("users sorted "+ usersSorted)
usersSorted.mkString(",")
}).is(expectedMessageRecipients))
Recipients 的类型为 scala.collection.immutable.Vector。我以为我可以使用 scala.collection.mutable.ListBuffer 将不可变集合转换为可变集合。任何帮助将不胜感激,谢谢。
解决方案
我不认为您的问题是不变性,而是 JSON 解析与 Gatling 的 .find 和 .findAll 方法。
我会猜测你的反应看起来像......
{"data":{"sendMessage":{"targetedRecipients":[1,4,2,3]}}}
在这种情况下,Gatling 的 .findAll 方法将返回一个向量(它总是在找到某些东西时返回),但它只有一个元素,即 "[1,4,2,3]" - 即:表示 json 数据的字符串,因此对单个元素的集合进行排序自然不会取得任何成果。要让 .findAll 表现得像您期望的那样,您需要一个类似...的响应
{"data":
{"sendMessage":
{"targetedRecipients":
[{"recipientId":1},
{"recipientId":4},
{"recipientId":2},
{"recipientId":3}]
}}}
您可以使用.jsonPath("$..recipientId").findAll
它变成 Id 的 Vector[String]。
因此,假设您确实只是获得了一个值数组的单个字符串表示形式,您可以使用直接转换来生成一个数组并进行排序(正如您在示例中所尝试的那样)
这是一个工作版本
val data = """{"data":{"sendMessage":{"targetedRecipients":[1,4,2,3]}}}"""
def sortedArray : ScenarioBuilder = scenario("sorting an array")
.exec(http("test call")
.post("http://httpbin.org/anything")
.body(StringBody(data)).asJson
.check(
status.is(200),
jsonPath("$.json.data.sendMessage.targetedRecipients")
.find
.transform(_
.drop(1)
.dropRight(1)
.split(",")
.toVector
.sortWith(_<_)
)
.saveAs("received")
))
.exec(session => {
println(s"received: ${session("received").as[Vector[String]]}")
session
})
推荐阅读
- asp.net-core - Azure DevOps 将不带 IIS 的 dotnet 核心包部署到部署组
- sql - varchar 列上的 SQL Pivot
- java - 在 RecycleView 中引用的空对象上的 setLayoutManager
- javascript - 以独特的组合折腾玩家
- python-3.x - 谁能解释一下'def displayRMagicSquare(magic_square)'到底要求什么?
- makefile - makefile rule to update a variable number of targets with a batch compile
- spreadsheet - 用于复制特定单元格值的 Google 脚本
- hyperledger-fabric - 哪些超级账本结构链码方法是实际交易
- amazon-web-services - 以特定分区格式将数据卸载到 redshift
- node.js - 如何在ejs中显示快速错误