json - JMeter:尝试验证随机分配的 json 路径中的两个或多个值
问题描述
我有一个如下所示的 JSON 响应:
{
"results": [
{
"entityType": "PERSON",
"id": 679,
"graphId": "679.PERSON",
"details": [
{
"entityType": "PERSON",
"id": 679,
"graphId": "679.PERSON",
"parentId": 594,
"role": "Unspecified Person",
"relatedEntityType": "DOCUMENT",
"relatedId": 058,
"relatedGraphId": "058.DOCUMENT",
"relatedParentId": null
}
]
},
{
"entityType": "PERSON",
"id": 69678,
"graphId": "69678.PERSON",
"details": [
{
"entityType": "PERSON",
"id": 678,
"graphId": "678.PERSON",
"parentId": 594,
"role": "UNKNOWN",
"relatedEntityType": "DOCUMENT",
"relatedId": 145,
"relatedGraphId": "145.DOCUMENT",
"relatedParentId": null
}
]
}
这个 JSON 响应的问题是 $.results[0] 并不总是相同的,它可能有几十个结果。我知道我可以执行单独的 JSON 断言调用,其中我使用通配符执行 JSON
$.results[*].details[0].entityType
$.results[*].details[0].relatedEntityType 等
但是,我需要在一次 api 调用中验证“PERSON”和“DOCUMENT”是否在同一路径中正确匹配,因为结果每次都以不同的路径返回。
有没有办法在一个 JSON 断言中进行多次调用,还是我使用了错误的工具?
提前感谢您的帮助。
-重力
解决方案
我认为 JSON 断言不够灵活,请考虑切换到JSR223 断言,在此您可以充分灵活地定义所需的任何通过/失败标准。
检查以下内容的示例代码:
- 匹配查询的所有属性值
$.results[*].details[0].entityType
都等于PERSON
- 并且所有匹配的属性值
$.results[*].details[0].relatedEntityType
都等于DOCUMENT
将会:
def entityTypes = com.jayway.jsonpath.JsonPath.read(prev.getResponseDataAsString(), '$.results[*].details[0].entityType').collect().find { !it.equals('PERSON') }
def relatedEntityTypes = com.jayway.jsonpath.JsonPath.read(prev.getResponseDataAsString(), '$.results[*].details[0].relatedEntityType').collect().find { !it.equals('DOCUMENT') }
if (entityTypes.size() != 1) {
SampleResult.setSuccessful(false)
SampleResult.setResponseMessage('Entity type mismatch, one or more entries are not "PERSON" ' + entityTypes)
}
if (relatedEntityTypes.size() != 1) {
SampleResult.setSuccessful(false)
SampleResult.setResponseMessage('Entity type mismatch, one or more entries are not "DOCUMENT" ' + relatedEntityTypes)
}
更多信息:
推荐阅读
- acumatica - BQL“IN<>”语句的问题
- windows - 使用 CMake 在 Windows 上构建 LLVM 的问题
- javascript - 回调(x + y)函数签名混淆
- android - Activity 从抽屉片段中获取方法
- asp.net-core - Blazor 中按钮 onClick 的最简单数据绑定?
- google-cloud-storage - 使用 S3 Java SDK 上传到 GCS:`您在 Content-MD5 或 x-goog-hash 中指定的 MD5 与我们计算的不匹配`
- sql - 我们可以用另一个表中的数据实现一个表,该表具有相同的 ID 但在 SQL 中大小不同?
- java - 如何在 Java 数组上设置新的属性或方法?
- c - Fopen - C中没有这样的文件或目录
- flutter - (M1 Mac) Android Studio 未检测到 Android 模拟器