如何在jmeter中使用json提取器提取筛选条件为A的节点相邻节点B的信息

场景:

有多个用户,为指定用户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节点的父节点,然后在其父节点上做进一步的筛选呢?

  1. 第一步定位出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
                }

这样就可以将我需要的信息定位出来了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值