Postman进阶篇(七)-在pre-request script或test script中请求接口(pm.sendRequest)

  • 在之前的文章中介绍过postman中的两个脚本——pre-request script或test script。
    pre-request script详细介绍Test script详细介绍
  • 在这两个位置不仅仅是可以对请求参数或是返回结果进行处理,甚至可以在这两个位置请求接口,并使用返回值。
  • 这是个非常好用的功能。比如请求购买前需要先通过登录接口获取token,这种情况下可以直接在pre-request script请求登录接口,并将返回值中的token设置为接口请求参数

一、pm.sendRequest() 方法

  • postman的脚本中,使用pm.sendRequest()方法进行接口请求,格式如下:
    pm.sendRequest("https://postman-echo.com/get", function (err, response) {
          
          
        console.log(response.json());
    });
    
    • pm.sendRequest() 总共传入两个参数:
      1. 第一个是接口请求参数,可以直接是URL(这种情况默认发送get请求),也可以使用JSON格式提供完整的请求配置,包括标头、方法、正文等
      2. 第二个参数是接口返回结果,可以在控制台打印出需要的数据,也可以在此对返回值进行处理。
  • 发送请求之后,脚本内的请求也会在console中打印,颜色为稍浅的灰色。
    (之间专栏也有介绍过控制台,文章地址:console控制台
    在这里插入图片描述
  • 与正常的接口请求的日志放在一起可以看到明显的颜色区分
    在这里插入图片描述

二、在脚本中进行GET请求

  • 如果只需要使用到URL进行get请求,可以直接使用填入URL,可以直接使用上述的示例
    • 将"https://postman-echo.com/get" 替换为需要请求的接口URL即可:
    pm.sendRequest("https://postman-echo.com/get", function (err, response) {
          
          
        console.log(response.json());
    });
    
  • 如果需要用的header,则可以将请求参数填入json,如下:
    • 定义一个const变量,按格式填入参数
    const getRequest = {
          
          
      url: 'https://postman-echo.com/get',
      method: 'GET',
      header: {
          
          
        'Content-Type': 'application/json',
        'X-Foo': 'bar'
      },
    };
    
    • 再将参数代入pm.sendRequest() 方法中,完整代码:
    const getRequest = {
          
          
    	  url: 'https://postman-echo.com/get',
    	  method: 'GET',
    	  header: {
          
          
    	    'Content-Type': 'application/json',
    	    'X-Foo': 'bar'
    	  },
    	};
    pm.sendRequest(getRequest, function (err, response){
          
          
      console.log(response.json());
    });
    
  • 发送请求后可以从console中看到脚本中的请求带有getRequest 变量中设置的请求头。
    在这里插入图片描述

三、在脚本中进行POST请求

  • POST请求与GET相比更复杂一些。不仅需要传body,body的模式也需要设置

1. body为raw模式

  • 同样也是将参数填入const变量中
  • body中设置 mode设置为raw,并且raw参数需要使用字符串上传
const postRequest = {
    
    
  url: 'https://postman-echo.com/post',
  method: 'POST',
  header: {
    
    
    'Content-Type': 'application/json',
    'X-Foo': 'bar'
  },
  body: {
    
    
    mode: 'raw',
    raw: JSON.stringify({
    
     key: 'this is json' })
  }
};
pm.sendRequest(postRequest, function (err, response){
    
    
  console.log(response.json());
});
  • 请求之后可以从console中看到,脚本中发送了post请求,并带有postRequest 变量中设置的body
    在这里插入图片描述

2. body为x-www-form-urlencoded模式

  • body中设置 mode设置为“urlencoded”,并且参数需要以urlencoded格式上传
    const postRequest = {
          
          
        url: 'https://postman-echo.com/post',
        method: 'POST',
        header: "Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
        body: {
          
                
            mode: 'urlencoded', 
            urlencoded: "key=this is key&key2=this is key2"
            }
        };
    	    
    pm.sendRequest(postRequest, function (err, response) {
          
          
        console.log(response.json());
    })
    
  • 点击发送接口请求
  • 从console中查看结果,可以看到在当前接口请求之前,运行pre-request script时发送了post请求,并带有postRequest 变量中设置的body
    在这里插入图片描述

3. body为form-data模式

  • body中设置 mode设置为“formdata”
  • 并且formdata参数的格式需要以如下格式填写:
    [{
          
          key: "key1",value: "value1"},{
          
          key: "key2",value: "value2"}]
    
  • 完整代码如下:
    const postRequest = {
          
          
        url: 'https://postman-echo.com/post',
        method: 'POST',
        header: "Content-Type: multipart/form-data",
        body: {
          
                
            mode: 'formdata', 
            formdata: [{
          
          key: "key1",value: "value1"},{
          
          key: "key2",value: "value2"}]
            }
        };
    pm.sendRequest(postRequest, function (err, response) {
          
          
        console.log(response.json());
    })
    
  • 发送接口后,从console中查看结果,脚本中请求的参数使用了代码里设置的变量
    在这里插入图片描述

4. body为xml模式

  • body中设置 mode设置为“raw”,并且raw参数内上传xml的代码,但需要转为字符串形式。
  • 完整代码如下:
    const postRequest = {
          
          
        url: 'https://postman-echo.com/post',
        method: 'POST',
        header: "Content-Type: application/xml",
        body: {
          
                
            mode: 'raw', 
            raw: '<xml>value</xml>'
            }
        };
    pm.sendRequest(postRequest, function (err, response) {
          
          
        console.log(response.json());
    })
    
  • 发送接口之后,同样可以从console中查看结果
    在这里插入图片描述

四、将脚本中接口返回值设置为变量

  • 文章的上半部分都在介绍如何在脚本中发送请求
  • 现在来介绍,请求结果返回之后如何使用
  • 在专栏之前的文章中介绍过postman中的变量,变量配合脚本使用,可以实现接口之间的参数传递
    postman中的变量-详细介绍
  • 这里通过参数传递来实现脚本中请求接口的运用
  • 在之前的例子中,脚本中请求接口只有,只是单纯的将返回值打印在console控制台:
    const postRequest = {
          
          
        url: 'https://postman-echo.com/post',
        method: 'POST',
        header: "Content-Type: multipart/form-data",
        body: {
          
                
            mode: 'formdata', 
            formdata: [{
          
          key: "key",value: "test_value"}]
            }
        };
    pm.sendRequest(postRequest, function (err, response) {
          
          
        console.log(response.json()); // 将返回值打印在console控制台
    })
    
  • 可以将接口返回值设置为全局变量或是环境变量,然后在接口请求中引用变量。
  • 以创建全局变量举例,使用pm.globals.set(“variable_key”, “variable_value”)方法创建全局变量。
  • 修改脚本代码如下:
    const postRequest = {
          
          
        url: 'https://postman-echo.com/post',
        method: 'POST',
        header: "Content-Type: multipart/form-data",
        body: {
          
                
            mode: 'formdata', 
            formdata: [{
          
          key: "key",value: "test_value"}]
            }
        };
    pm.sendRequest(postRequest, function (err, response) {
          
          
        console.log(response.json());
        pm.globals.set("test", response.json()["form"]["key"]);
    })
    
    • 修改点:在接口请求之后,将请求值设置为一个全局变量,变量的key为“test”
      pm.globals.set("test", response.json()["form"]["key"]);
      
  • 请求头中引用变量“test”
    在这里插入图片描述
  • 发送接口
  • 因为脚本写在pre-request script标签页下,所以脚本中的接口会先请求
  • 根据脚本中的返回值,“response.json()[“form”][“key”]”最后等于"test_value"在这里插入图片描述
  • 之后,发起当前的接口请求
  • 可以看到请求头中的“test”参数的值为"test_value",证明脚本运行成功了
    在这里插入图片描述

附录:postman系列文章目录

零基础入门接口功能测试教程-目录

—————————————————————————————————
postman系列文章内所使用的示例文件已经上传到了本人运营公众号【软件测试必备技能】
在这里插入图片描述
有需要可点击文章下发二维码,前往领取~
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40883833/article/details/127191427