场景:
有多个用户,为指定用户A分配license B,校验license B成功分配给用户A。
问题:
在使用jmeter工具做上述场景的接口自动化测试时,断言是需要筛选用户A(wang si)下的license B的信息。
{ "userIdLicenseSummary": [ { "users": { "firstName": "Zhangsan", "lastName": "wu", "email": "12345875623@163.com" }, "SummaryLicenses": [ { "suspensionStatus": null, "licenseExpiryTimestamp": "2036-12-31T11:59:59.000+00:00", "orderNumber": "89756", "app": "C", "licenseId": "C-89756-31122099-365", "licenseDuration": null }, { "suspensionStatus": null, "licenseExpiryTimestamp": "2025-04-23T08:26:28.600+00:00", "orderNumber": "85274", "app": "D", "licenseId": "D-85274-23042025-6", "licenseDuration": "Monthly" } ] }, { "users": { "firstName": "si", "lastName": "wang", "email": "98522614245@163.com" }, "SummaryLicenses": [ { "suspensionStatus": null, "licenseExpiryTimestamp": "2033-12-31T11:59:59.000+00:00", "orderNumber": "12345", "app": "B", "licenseId": "B-12345-31122099-9", "licenseDuration": null }, { "suspensionStatus": null, "licenseExpiryTimestamp": "2036-12-31T11:59:59.000+00:00", "orderNumber": "89756", "app": "C", "licenseId": "C-89756-31122099-365", "licenseDuration": null }, { "suspensionStatus": null, "licenseExpiryTimestamp": "2025-04-23T08:26:28.600+00:00", "orderNumber": "85274", "app": "D", "licenseId": "D-85274-23042025-6", "licenseDuration": "Monthly" } ] } ], "totalPages": 1 }
方法1:查看返回的json信息,可以通过筛选用户A(wang si)的email信息98522614245@163.com来确定用户A。比如:$..users[?(@.email=="98522614245@163.com")]可以筛选出用户A(wang si)的信息。
{
"firstName": "si",
"lastName": "wang",
"email": "98522614245@163.com"
}
但是我需要的是不是上述users节点下的信息,我需要的是该users节点兄弟节点SummaryLicenses的信息。所以,我思考我定位到users节点下的信息,然后通过定位到的users节点定位到该兄弟节点SummaryLicenses的信息。我在百度和B站查询资料,没有查询到如何通过json定位到其兄弟节点的信息,我放弃了该条思路。
方法2:在网上无法查询到通过json path定位其兄弟节点的信息,我思考是否可以通过定位到其父节点,然后通过父节点来定位到我需要的SummaryLicenses节点信息。有了这想法,我继续在网上查询资料,但没有查询出任何有关的信息。
方法3:前面的2种方法都尝试不成功,我意识到我不能通过定位到user节点的信息来获取其兄弟节点SummaryLicenses的信息。那我可不可以直接定位到user节点的父节点,然后在其父节点上做进一步的筛选呢?
- 第一步定位出userIdLicenseSummary,然后在userIdLicenseSummary下做email的筛选。因为userIdLicenseSummary和email中间还有一个user,我尝试使用@.users.email=="98522614245@163.com来一个节点一个节点的查找。没想到真的成功返回了我需要的信息。
json path:
$.userIdLicenseSummary[?(@.users.email=="98522614245@163.com")]
返回信息:
{
"users": {
"firstName": "si",
"lastName": "wang",
"email": "98522614245@163.com"
},
"SummaryLicenses": [
{
"suspensionStatus": null,
"licenseExpiryTimestamp": "2033-12-31T11:59:59.000+00:00",
"orderNumber": "12345",
"app": "B",
"licenseId": "B-12345-31122099-9",
"licenseDuration": null
},
{
"suspensionStatus": null,
"licenseExpiryTimestamp": "2036-12-31T11:59:59.000+00:00",
"orderNumber": "89756",
"app": "C",
"licenseId": "C-89756-31122099-365",
"licenseDuration": null
},
{
"suspensionStatus": null,
"licenseExpiryTimestamp": "2025-04-23T08:26:28.600+00:00",
"orderNumber": "85274",
"app": "D",
"licenseId": "D-85274-23042025-6",
"licenseDuration": "Monthly"
}
第二步通过定位出来的userIdLicenseSummary信息访问其下个SummaryLicenses节点,然后在其SummaryLicenses节点下筛选出license B。
json path:
$.userIdLicenseSummary[?(@.users.email=="98522614245@163.com")].SummaryLicenses[?(@.app=="B")]
返回信息:
{
"suspensionStatus": null,
"licenseExpiryTimestamp": "2033-12-31T11:59:59.000+00:00",
"orderNumber": "12345",
"app": "B",
"licenseId": "B-12345-31122099-9",
"licenseDuration": null
}
这样就可以将我需要的信息定位出来了。