Postman中用JS脚本来控制批量运行时接口的执行顺序

1、需求场景

事情是这样的,测试某个需求经常要用到新账号,需要注册,问题来了:
1、如果每次都手动去前台注册,效率太低了…
2、关联表比较多,直接数据库插入也不可行…
3、其实可以用Python来实现,但需要从头开始写代码…

n、想着Postman已经有调试过的现成的注册流程接口,何不在Postman中用runner来批量执行注册相关的接口,实现自动注册,似乎这个方法是目前最快捷的了,话不多说,打开Postman就是一顿猛操做

2、需求分析

先来分析一下需要批量执行的接口有哪些:
注册流程相关的api有2个,分别是:

  • 发送验证码api
  • 注册api

要想实现自动化,就得需要Postman连接数据库查询相关的数据来替代手工操作,涉及到查询和更新数据库的api有3个,分别是:

  • 查询手机号api(查询手机号是否存在于数据库user表中,即是否已注册过)
  • 更新手机号api(如果手机号已注册,则更新wow_user表中指定id的mobile字段值,即让该手机号变为未注册过)
  • 查询验证码api(发送验证码后,查询数据库member_find表mobile字段值为手机号的数据,即手机号收到的验证码)

整个操作流程下来总共有5个api请求,他们的顺序和关系如下图:

查询手机号
是否注册
更新手机号
发送验证码
查询验证码
注册

ps:Postman可以通过Xmysql工具生成的API对数据库进行查询和更新,之前写过相关的文章,有兴趣的可以去看看【使用Xmysql实现Postman连接数据库,进行数据的查询和更新】,此处不再赘述,本文主要是写写Postman工具中,通过JS脚本来控制接口之间的执行顺序问题

从以上流程图可以看出,有两条分支可以走,走那条分支取决于当前手机号是否已注册过,所以我们可以在【查询手机号】这个api请求后,添加后置JS脚本,用于判断手机号是否已注册,进而控制接下来该执行哪个分支的接口。

3、需求实现

将整个自动注册流程下来总共有5个api请求调试好,接口名称如下:
在这里插入图片描述

【敲重点】!!!
Postman中有个沙箱环境,里面有很多内置的测试脚本,都是比较基础的,一般用于各种断言;获取响应内容的某个字段将其设置为环境变量,作为下一个接口的入参;等等

本次还需要实现的:控制在runner运行时接口执行的顺序 ,在内置脚本中是没有的。
当runner集合中包含多个请求运行时,postman会默认按照线性顺序来执行这些接口请求的,如果想要改变接口的执行顺序,需执行setNextRequest相关命令

操作方法:
(1)在前置脚本Pre-request Script或后置脚本Tests中指定
(2)指定后续请求的名称
(3)具体的脚本是:postman.setNextRequest(“接口名称”)

postman.setNextRequest("接口名称");

下面是在【查询手机号】api请求的后置脚本Tests中需要写上的完整的JS脚本

//获取到json返回的内容
responseData = JSON.parse(responseBody)
//判断当前手机号是否被注册 ,响应内容如果为空说明手机号未注册,不为空,则已注册
if(responseData == 0){  
    tests["当前手机号为未注册账号"] = true === true;
    //当前手机号未注册则执行正常手机号注册流程
    postman.setNextRequest("发送验证码");
}
else{
    tests["当前手机号已经注册"] = true === true;
    //将id复制给user_id
    var user_id = responseData[0].id;
    //设置user_id为环境变量
    pm.environment.set("user_id",user_id);
    //当前手机号已注册则执行更新手机号的接口,使手机号变为未注册
    postman.setNextRequest("更新手机号");
}

完成调试后,点击runner运行器,选择上图中的文件夹“自动注册流程”,确定运行即可完成自动注册

下图是走的手机号未注册的分支的执行结果:
在这里插入图片描述

下图是走的手机号已注册的分支的执行结果:
在这里插入图片描述

4、踩过的坑

因对JS脚本并不是很熟悉,在写的过程中遇到了问题,最开始写的条件判断语句是下面这样的时候,报错了:
在这里插入图片描述
从上述错误猜测,条件判断if后面的语句并没有执行,而是执行else后面的语句了,明明响应内容为空,为什么没有执行if后面的语句呢?
原来在JS中,[]==[]执行结果是false,并不是true,而[]==0的执行结果却是true
在这里插入图片描述

知道问题原因就好办了,只需要把if判断语句改一下,即判断响应内容是否等于0即可
即:
将if(responseData == []) 改成
if(responseData == 0) 或
if(responseData.length == 0)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值