打破固定思维,postman深入实践,还可以这样用,Key-Value双变量

业务中有这样一个场景,用户可以分享自己名下的设备,可以分享一个也可以分享多个设备,对应的接口中传递的参数是一个数组,key-value是:"sn[]"-"1234567890abc",value值是变化的,用户名下的设备的数量也是变化的,设备的数量和具体值来自于其他接口的返回,不同帐号返回的设备数量不一样,相同帐号也可以解绑或新增设备,所以在做接口自动化的时候要兼容这两种情况,下面是解决这个问题的先后过程:

方案一:固定sn[]数量,

Body如下:

这种方法要求帐号下只能有4个设备,多余或少于4个设备,接口将报错,不符合预期。

方案二:多设置几组键值对,例如,设置10个sn[],这样帐号下设备数量小于10个的时候,传值如下:

"sn[]": "12345"

"sn[]": "67890"

"sn[]": "abcde"

"sn[]": "fghig"

"sn[]": ""

"sn[]": ""

"sn[]": ""

"sn[]": ""

"sn[]": ""

"sn[]": ""

这种情况兼容了帐号下设备变化的情况,但是接口报参数错误,行不通。

方案三:更不能将含有多个设备的串直接付给sn[],Body如下:

{{devSn1}}值为:“123456110000022,123456110000666,123456110000003,123456110000527”这样会被认为是一个无效的数据,行不通。

因为这个问题,困扰了很多天,在网上查了很多资料,并发了一个问答,同时也问了常用postman的后端技术同学,一直没有得到解决,后来苦思冥想,发现一个问题,就是这段时间一直关注body设置中的Value列,只是考虑将这Value列设置为变量,其实扩展一下思路,左侧的Key列是不是也可以设置成变量?既然实际场景中数组的长度是变化的,那么数组的长度就是一个变量,于是,将Key列sn[]也设置为变量,

方案四:body设置key-value双变量,Body如下:

在Pre-request Script中编写如下代码,将实际的设备赋值给sn[],将用不到的sn[]和value设置为空:

//email:邮件(默认);bluetooth:蓝牙
pm.environment.set("shareType", "bluetooth");

//权限:1=管理员;2普通成员(默认)
pm.environment.set("role", 1)

//将字符串拆分成数组(列表)
var devSnsTemp = pm.environment.get("devSns").toString()

const devSnsArry = devSnsTemp.split(',')

for(i=1; i<=devSnsArry.length; i++){
    pm.environment.set("sn["+i+"]", "sn[]")
    pm.environment.set("devSn"+i, devSnsArry[i-1])
}

//10为预留的参数个数
for(i=devSnsArry.length+1; i<=10; i++){
    pm.environment.set("sn["+i+"]", "")
    pm.environment.set("devSn"+i, "")
}

发送请求后,查看Request Body:

请求成功,符合预期:

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值