接口测试 接口,认证列表里有多个渠道号和对应的认证 ID,请问如何让接下来的每个认证渠道取用对应的 ID 呢

米酒 · 2018年11月23日 · 最后由 米酒 回复于 2018年11月23日 · 1452 次阅读

认证列表返回的部分 Json(我只选了两个)如下,不同渠道有不同的认证渠道和状态信息
{
"errCode": "000000",
"errMsg": "成功",
"result": {
"isNeedCert": 1,
"list": [{
"authId": 1810101600005177,
"authChannel": "09",
"authChannelDesc": "完善用户信息",
"authResult": "SUCCESS",
"must": false,
"redirectUrl": ""
}, {
"authId": 1810101000004747,
"authChannel": "08",
"authChannelDesc": "人脸识别",
"authResult": "CREATE",
"must": false,
"redirectUrl": ""
}]
}
}
方法一:(可以实现但是不符合逻辑):循环获取认证列表,正则的匹配数字每次加一,认证列表后面接多个 if 控制器,判断 authchannel,如果一致执行对应的认证接口,由于 authId 和 authChannel 的匹配数字一样,所以每个认证接口里 authId 和 authChannel 是对应的。这样可以完成认证,但认证接口列表执行了多次,不符合要求。结构如下:

方法二:(在认证列表后使用 foreach 控制器,即去掉计数器,直接遍历所有匹配到的 authChannel),这样的话,认证列表执行了一次就可以调用多个 authChannel,但是对应的 authId 却不知道如何调用了。还请大神们指教。
未成功的结构如下:

最佳回复
米酒 回复

在那个请求底下放两个 json 提取器,提取所有的渠道和 id,提取的渠道和 id 是对应的。然后再后续操作。这样可以吧。

共收到 7 条回复 时间 点赞

Json 提取器, $.result.list.0.authId,或者自己写 BeanShell PostProcessor 也行啊

arrow 回复

不能指定位置,不然就跟方法二的一样了;用 BeanShell PostProcessor 感觉要获取匹配数字,两者匹配数字要对应,暂时不知如何获取

米酒 回复

现在想到先正则单个的认证渠道的 json,再进去匹配内部的 authId 和 authChannel,在 foreach 下面使用正则时发现不能匹配到数据,不知为何。现在准备尝试 Beanshell 里正则匹配,可惜一点都不会,,,

$.result.list[?(@.authChannel=="09")].authId 这样可以获取到相应渠道的 id。

詹姆斯 回复

像这样的 authChannel 还有好多个,并且值是服务器返回的不能用在表达式里。现在在考虑提取 $.result.list[*] 里面的 authChannel 和 authId

米酒 回复

在那个请求底下放两个 json 提取器,提取所有的渠道和 id,提取的渠道和 id 是对应的。然后再后续操作。这样可以吧。

詹姆斯 回复

想太多,没结果;越简洁越高效

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册