美文网首页工具
Postman使用手册之实战

Postman使用手册之实战

作者: 多夏_zoey | 来源:发表于2018-11-05 15:49 被阅读88次

    主要介绍使用postman进行web api接口主流程场景的回归测试及测试过程中数据构造;主要用到的是get/post请求;以及使用过程中常用的参数化,简单的tests检查点以及如何取登录后的cookies

    一、环境准备

    1)在chrome中安装插件postman interceptor,这个截图是我已经安装好的

    2)安装postman app

    二、使用postman拦截post/get请求

    1)打开Request Capture开关,并添加filter过滤你希望拦截的请求

    2)启动postman app

    3)postman中的interceptor开关打开

    4)在chrome浏览器操作,发现请求被拦截在postman的history下

    5)在collection下新建一个collection

    点击切换到history下,点击请求后面的+,直接把请求放到刚刚新建的collection中,方便后期调试

    6)导出保存的请求文件

    三、调试及参数化post/get请求

    以上通过interceptor插件安装的postman app是插件版本的,没有控制台窗口,不方便调试,此时可以在postman官网重新下载个非插件版的app,直接启动这个app

    1)导入之前保存的脚本

    2)参数化可变的值,从environment文件读取变量

    PS:postman读取环境变量常见的有4种,本篇介绍从environment文件中读取

    点击manage environments->点击add

    然后编辑刚新建的环境变量文件,输入需要引用的变量名和变量值,点击update

    在请求中引用环境变量,默认方式{{变量名}}

    3)在Pre-request Script 和Tests编写脚本

    Pre-request Script 是在请求发送前执行,Tests主要用于添加校验点以及获取response body中值作为下个请求中的参数;

    PS:postman常用的方法,可参看官方文档

    https://www.getpostman.com/docs/v6/postman/scripts/test_examples

    4)调试打印变量,使用cosole.log(需要打印的内容)

     首先在Tests中使用cosole.log()方法,比如

    打开console

    点击send发送请求,发现控制台会打印出值

    四、runner 运行collection

    点击runner-->选择需要执行的collection-->选择需要用到的环境变量文件-->设置运行参数

    PS:常见4类变量作用域:

    Global: 全局变量,postman中所有请求都可以访问或者修改;

    Environment: 构造请求时可以选择使用某个Environment,这样就可以访问或者修改该Environment下的所有变量;

    Local: 脚本中定义的变量,只对脚本的当前作用域有用;

    Data: 只有在使用 Collection Runner 的时候,可以通过导入 Data Files 来构造当前测试集中用到的数据。

    作用域:Global<Collection<environment<local

    1)关于变量引用遇到的问题

    如果environment设置的变量,collection运行结束后environment中值无法变更

    参考:https://www.cnblogs.com/majunBK/articles/9447021.html

    原因:runner运行设置前没有勾选keep variable value,如果不勾选keep variable value,则运行Collection Runner中修改的任何变量都不会影响Postman主应用中对应的环境变量值,在Collection Runner运行完成后恢复environment原始的值

    如果运行时勾选keep variable value,则Collection Runner运行完成后Postman主应用中对应的环境变量值变更,主要使用场景:比如第一个collection执行结束后环境变量值需要变更作为第二个collection执行环境变量值的输入

    2、遇到的问题

    1)runner时报错Data unavailable(Only data about the top 10 historical runs is stored)

    详细原因:https://www.jianshu.com/p/b6e934e4601e

    可能解决的办法:

    1)调整请求执行顺序

    2)在容易出现这个错请求的上一个请求tests中加等待时间

    setTimeout(()=>console.log('等待'), 3000);

    3、常用的方法总结

    参考文档https://www.getpostman.com/docs/v6/postman/scripts/test_examples

    1)取cookies里面的token

      var token = postman.getResponseCookie("a9a68f4fefd3b693f10be4a89799dc48").value

      console.log('token123',token);

      pm.environment.set("token", token);

    2)环境变量

    //清楚上一次执行保存的值

    pm.globals.unset(onlineTradeNo);

    //将订单号传入环境变量

    pm.globals.set("onlineTradeNo",onlineTradeNo.data[0].tid);

    //获取环境变量

    pm.globals.get("AdminIdOne");

    3)返回状态校验200

    //校验response返回200

    tests["Status code is 200"] = responseCode.code === 200;

    4)获取response里面的tid

    //获取response的body中生成的订单号,如果不是数组的话可直接取

    var onlineTradeNo = JSON.parse(responseBody);

    console.log("onlineTradeNo",onlineTradeNo.data[0].tid);---数组写法

    console.log("onlineTradeNo", onlineTradeNo.data.tid);---非数组

    5)从环境变量获取数组中1个值

    //取环境变量中待审核的订单状态

    var array=pm.environment.get("data_entry");

    var value=JSON.parse(array)[0];

    // console.log("value is"+" "+value);

    //校验状态是否是期望值是否=audit

    pm.test("applyStatus is audit", function () {

        var jsonData = pm.response.json();

        // console.log(jsonData.data.applyStatus);

        pm.expect(jsonData.data.applyStatus).to.eql(value);

    });

    6)Tests中设置等待时间

    setTimeout(()=>console.log('等待'), 3000);

    7)在Tests中通过设置脚本控制API的执行顺序

    参考文档:https://www.jianshu.com/p/a3b4794ab283

    当前请求Tests中添加:postman.setNextRequest('下一个需要执行请求名称')

    最后1个请求Tests中添加:postman.setNextRequest("null")

    8)for循环的使用,比如根据一个出库单可以查询出2条库存流水,需要把库存流水值相加

    //获取出库单(可能是多条)和出库数量(相加)

    var DN=pm.environment.get("deliveryOrder");

    var number=parseFloat(pm.environment.get("delivery_num"));

    var newstocks=0;

    for(var i in jsonData.data.data){

        if(jsonData.data.data[i].relatedNo == DN){

        newstocks += jsonData.data.data[i].newChangeStocks;

       }

    }

      pm.expect(newstocks).to.eql(number)

    相关文章

      网友评论

        本文标题:Postman使用手册之实战

        本文链接:https://www.haomeiwen.com/subject/otysxqtx.html