当前位置 博文首页 > 繁华似锦Fighting:『政善治』Postman工具 — 8、Postman中Pre-r

    繁华似锦Fighting:『政善治』Postman工具 — 8、Postman中Pre-r

    作者:繁华似锦Fighting 时间:2021-05-12 18:18

    目录
    • 1、Pre-request Script介绍
    • 2、常用SNIPPETS(片段)说明
      • (1)获取变量脚本:
      • (2)设置变量脚本:
      • (3)清空变量脚本:
      • (4)Send a request代码片段
      • (5)总结:
    • 3、示例1
    • 4、示例2

    Postman测试沙箱其实是结合JS脚本和内置断言函数,来完成测试中的断言功能,在请求发起前后实现部分测试操作。

    常用功能:

    • 请求前脚本(pre-request scripts)设置请求前置操作如设置变吊等。
    • 请求后脚本(tests)对状态码、响应头、响应正文等信息进行断言操作。

    1、Pre-request Script介绍

    Pre-request Script是请求发送之前需要执行的代码片段。

    提示:在一个请求或者一个集合都可以定义Pre-request Script,在集合中定义Pre-request Script,表示集合中的每一个请求发送前,都需要执行Pre-request Script中的js脚本。

    作用或者需求:准备数据。

    • 请求参数中包含一个随机数。
    • 请求header中包括一个时间戳。
    • 请求参数需要加密。

    等等。

    点击请求中的Pre-request Script标签项,如下图:

    image

    我们可以在上图看到,在Pre-request Script标签页的右侧边栏中,Postman为我们提供了一些常用的代码模版。

    提示我们:

    Pre-request scripts are written in JavaScript.
    and are run before the request is sent.
    请求前脚本是用JavaScript编写的。
    并在发送请求之前运行。
    
    Learn more about pre-request scripts。
    点击这里,可以学习更多关于pre-request scripts的资料。
    

    学习关于pre-request scripts的更多用法,点击下面链接:

    https://learning.postman.com/docs/postman/scripts/pre_request_scripts/

    2、常用SNIPPETS(片段)说明

    (1)获取变量脚本:

    • Get an environment variable
      // 获取一个环境变量
      // 1.pm表示postman
      // 2.environment表示环境变量
      // 3.get表示获取
      pm.environment.get("variable_key");
      
    • Get a global variable
      // 获取一个全局变量
      pm.globals.get("variable_key");
      
    • Get a variable
      // 获取一个变量(本地)
      pm.variables.get("variable_key");
      
    • 获取集合变量的脚本
      var collectionVariable = pm.collectionVariables.get("variable_key");
      
    • 获取数据变量的脚本
      var iterationData = pm.iterationData.get("variable_key");
      

    (2)设置变量脚本:

    • Set an environment variable
      // 设置一个环境变量
      // 1.pm表示postman
      // 2.environment表示环境变量
      // 3.set表示设置
      pm.environment.set("variable_key", "variable_value");
      
    • Set a global variable
      // 设置一个全局变量
      pm.globals.set("variable_key", "variable_value");
      
    • 设置一个变量(本地)
      pm.variables.set("variable_key", "variable_value");
      
    • 设置一个集合变量
      pm.collectionVariables.set("variable_key", "variable_value");
      
    • 设置一个数据变量
      pm.iterationData.set("variable_key", "variable_value");
      

    (3)清空变量脚本:

    • Clear an environment variable
      // 清空一个环境变量
      // 1.pm表示postman
      // 2.environment表示环境变量
      // 3.unset表示清空
      pm.environment.unset("variable_key");
      
    • Clear a global variable
      // 清空一个全局变量
      pm.globals.unset("variable_key");
      
    • 其他的变量同理。

    (4)Send a request代码片段

    Postman提供了一个“Send a request”代码段,他是已经封装好的发送请求的方法

    pm.sendRequest("https://postman-echo.com/get", function (err, response) {
        console.log(response.json());
    });
    
    // 其中,https://postman-echo.com/get表示要发送的请求。
    // function中的err表示请求返回的错误信息,response表示响应内容。
    // console.log()是postman封装的查看日志的方法,可以调出postman的console控制台来查看代码运行情况,方便调试。
    

    注意:该代码段默认只能发送get请求,且这样直接使用的话无法指定请求头等信息,当然大部分情况下我们不需要单独指定一些请求信息,Postman可以自动帮我们完成准备工作。

    示例:在Pre-request Script中自定义发送一个Post请求

    // Pre-request Script 中的js代码
    // 定义请求数据体
    var data = {
        "userName":"admin",
        "password":"123456"
    }
    
    // 从环境变量中获取token请求服务地址
    var ip = pm.environment.get("ip");
    var port = pm.environment.get("port"); 
    
    // 定义请求
    const loginRequest = {
      //url: 'http://'+ ip+':'+ port +'/login',
      url: 'http://httpbin.org/post',
      method: 'POST',
      header: ['Content-Type:application/json', 'token:123456'],
      body: {
        mode: 'raw',
        raw: JSON.stringify(data)
      }
    };
    
    // 发送请求
    pm.sendRequest(loginRequest, function (err, response) {
        console.log(response.json());
    });
    

    代码说明:

    • const:是js中用来定义变量的关键字,由const定义的变量不可以修改,而且必须初始化。
    • url:表示要发送的请求url。
    • method:指定请求方法。
    • header:定制请求头信息(很重要,因为你要传json格式的数据的话,需要在这里定义请求头为Content-Type:application/json)。
    • body:表示请求body中携带的参数。
    • JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个JSON字符串。
    • 定义好const变量后再由sendRequest()来发送请求即可。
    • header的写法可以是:
      // 一条头信息
      header: 'Content-Type:application/json',
      
      // 多条头信息
      // 形式一
      header:[
              	{"key1":"XXX","value1":"XXX"},
              	{"key2":"XXX","value2":"XXX"}
              ]
      
      // 形式二
      header:[
               'key1:XXX',
               'key2:XXX'
           ]
      

    (5)总结:

    对于Postman中的变量管理,我们最好手动管理,也就是自己手动设置环境变量和全局变量,最好不用脚本来管理Postman中的变量。

    3、示例1

    我们以“新增学院”接口为例,如下图:

    image

    我们可以在Pre-request Script进行提交数据的准备。

    编写如下JavaScript代码:

    // 随机生成一个3位数字的id
    var dep_id = Math.floor(Math.random()*1000);
    pm.environment.set("depid" , dep_id); //设置到环境变量中
    
    // 随机生成学院名称dep_name
    // 随机生成一个10位的字符串
    var data = Math.random().toString(36).slice(-10) ;
    var dep_name = data+"学院";
    pm.environment.set("dep_name" , dep_name);//设置到环境变量中
    
    // 随机生成院长的名字
    var first_name = ["赵","钱","孙","李","刘"];
    var last_name = ["子鼠","丑牛","寅虎","牟兔","辰龙","巳蛇"];
    var master_name = first_name[Math.floor(Math.random() * (first_name.length))] +last_name[Math.floor(Math.random() * (last_name.length))];
    pm.environment.set("master_name" , master_name);//设置到环境变量中
    
    // 随机生成口号
    var slogan_str = ["吃饭","睡觉","打豆豆"];
    var slogan = slogan_str[Math.floor(Math.random() * (slogan_str.length))];
    pm.environment.set("slogan" , slogan);//设置到环境变量中
    
    //代码很low,就是演示。
    

    然后填写Post请求,以Json格式数据为例,参数中引用Pre-request Script脚本中添加到环境变量中的变量。

    image

    这样就能够完成自动生成数据,来完成接口的测试。

    提示

    我们在实际工作中,不用这种方式准备数据,上面的例子只是说明Pre-request Script的作用。

    在实际工作中,我们使用参数化来批量准备数据。

    在接口测试中,有些参数是需要自动生成的,且这些参数并不参与逻辑关系。

    比如说时间戳,并不会参与接口中的逻辑关系,只起到校验的作用。我们提交的时间戳参数,要和服务器的时间戳进行对比,比如我们上传的时间戳和服务器的时间戳不能超过5秒钟,如果超过5秒则不能请求成功。

    所以我们需要在Pre-request Script中把时间戳生成,然后保存到环境变量中,最后再提交的参数中获取到环境变量中的刚刚保存的时间戳数据。(就如同上面步骤)

    // js获取当前时间戳
    // 第一种方法:(这种方法只精确到秒)
    var timestamp = Date.parse(new Date()); //1613702922000
    
    // 第二种方法:
    var timestamp = (new Date()).valueOf(); //1613702956959
    
    // 第三种方法:(推荐)
    var timestamp = new Date().getTime(); //1613703043378
    
    pm.environment.set("timestamp" , timestamp);//设置到环境变量中
    

    请求头中所需要的数据也是一样的操作。

    还有一点要提示的,如果在发送请求之后,提示js代码有错误,可以点击Postman下边框的Console控制台,来查看错误的详细信息。

    4、示例2

    同理,我们也可以在Body中使用其他的数据提交格式,来接收使用Pre-request Script定义在环境变量中的数据。

    如下图:

    image

    参考:https://www.cnblogs.com/hanmk/p/10200887.html

    bk