postman中如何在A接口请求前需要获取B接口的返回值作为参数

       postman官网地址:https://www.postman.com/
       为了更灵活地构造请求以及处理响应数据,postman提供了Pre-request-Script和Tests,在这两个标签中可以编写js代码辅助测试,Pre-request-Script为预处理其实就是接口请求前执行的js脚本,同理Tests为测试脚本就是接口响应后执行的js脚本,基于Pre-request-Script和Tests我们提供以下解决方案在不同场景下。

变量赋值取值的方式

       经常我们会遇到这样的场景,在请求A接口时 我们需要获取B接口返回的值 (如:登录接口返回的安全令牌access_token) 才能进行A接口的请求 ,在postman中 我们一般通过变量赋值取值的方式,如下:

       1)B接口成功请求并设置全局变量access_token,输出日志。
在这里插入图片描述在这里插入图片描述       2)设置全局变量access_token成功
在这里插入图片描述
       3)A接口通过access_token变量获取来安全令牌
在这里插入图片描述

基于预处理内置请求动态添加请求参数

       上面的方式基本解决不同接口之间传递参数的问题,但是不够优雅,首先需要分别点击两个接口,先点击B接口设置变量然后再点击A接口获取变量 第一操作稍显啰嗦 第二如果遇到更复杂的场景 可能不太适应 :

  1. 在Collections Runner中,多个接口都需要B接口返回的参数值如 A和C接口都需要B接口的返回值
    ,A接口先拿到返回值但是会对返回值进行删改,导致C接口无法使用并请求 (实际场景就类似每个令牌只能使用一次,用完失效)。
  2. 多个接口都需要B接口返回的参数值 但是为了方便日志记录每个接口都需要一个独立的返回值,进行隔离,防止日志输出混淆等。

       基于以上场景 我们可以在每个需要B接口返回值的请求执行前 独自去调用B接口,可以在Pre-request-Scrip预处理中发送请求获取返回值 然后添加请求参数 即为每个请求内置获取B请求返回值 Pre-request-Scrip脚本 如下:

pm.sendRequest("https://ip:port/xxxxxx/security/login", function (err, res) {
    console.log(response.json());
     var  access_token  = res.json().access_token;
    //pm.environment.set("access_token", access_token);//这里也可以通过变量方式
    pm.request.addQueryParams("access_token="+access_token);
    console.log("access_token:"+access_token);
});

       但这里有个小问题, postman 提供的pm.sendRequest函数 默认只能发送get请求,如果你需要发送post请求(如我这里通过post请求获取安全令牌)
在这里插入图片描述
       因为sendRequest函数第一个参数要么接收url默认就是get请求,要么就是一个request所以我们可以自己构造post请求 如下:

var data = {key1:"value1",key2:"value2",key3:"value3"};
const getTokenRequest ={
    url:'http://ip:port/xxxx/v1/security/login',
    method:'POST',
    header: 'Content-Type: application/json',  //注意要在Header中声明内容使用的类型 否则报错
    body:{
        mode:'raw', 
        raw:JSON.stringify(data)
    }
};

//发送登录请求获取安全令牌
pm.sendRequest(getTokenRequest, function (err, res) {
    console.log(res.json());
    var  access_token  = res.json().access_token;
    //pm.environment.set("access_token", access_token); //这里也可以通过变量来实现
    pm.request.addQueryParams("access_token="+access_token);//添加请求参数
    console.log("access_token:"+access_token);
    
});

       这里只演示get请求addQueryParams动态添加参,如果是post请求需要修改request body中的参数值,可能改变不了(postman 规定request body不可变,文档地址),可以使用设置变量的方式。
在这里插入图片描述

输出结果
在这里插入图片描述

       下次就算单独测试接口,也可以单独点击 自动去请求登录接口然后自动添加请求参数不需要手动。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值