如何访问 JsonPath 数组结果的值(空手道断言)
How to access the value of a JsonPath array result (Karate assertion)
我的 JSON 来自 API 的回复:
{
"args": {
"param1": "valueA",
"param2": "valueB"
}
}
我的空手道主张:
# ✅
And match response.args.param1 == "valueA"
# ❌ actual: ["valueB"], expected: "valueB"
And match $..param2 == "valueB"
# ❌ actual: [2], expected: 2, reason: not equal (JSONArray : Integer)
And match $..args.length() == 2
从 我了解到当我使用 JsonPath 通配符时,总是返回一个数组。所以我的问题是如何访问该数组的第一个也是唯一一个元素,以用于我的断言?我尝试附加 [0]
但没有成功。
JsonPath总是returns一个数组,因为它是一个"search"。因此,当您执行 ..
或 *
时 - 就是这样。您必须按索引提取:
* match response..param1 == ['valueA']
* def temp = $..param1
* match temp[0] == 'valueA'
编辑:如果您真的关心 "intent" 从 JsonPath 结果中获取第一个元素,那么您可以这样做:
* def temp = get[0] $..param1
* match temp == 'valueA'
我的 JSON 来自 API 的回复:
{
"args": {
"param1": "valueA",
"param2": "valueB"
}
}
我的空手道主张:
# ✅
And match response.args.param1 == "valueA"
# ❌ actual: ["valueB"], expected: "valueB"
And match $..param2 == "valueB"
# ❌ actual: [2], expected: 2, reason: not equal (JSONArray : Integer)
And match $..args.length() == 2
从 [0]
但没有成功。
JsonPath总是returns一个数组,因为它是一个"search"。因此,当您执行 ..
或 *
时 - 就是这样。您必须按索引提取:
* match response..param1 == ['valueA']
* def temp = $..param1
* match temp[0] == 'valueA'
编辑:如果您真的关心 "intent" 从 JsonPath 结果中获取第一个元素,那么您可以这样做:
* def temp = get[0] $..param1
* match temp == 'valueA'