美文网首页接口接口测试
[PPJ_08] Postman批量执行 & 数据驱动

[PPJ_08] Postman批量执行 & 数据驱动

作者: Fighting_001 | 来源:发表于2018-10-07 22:52 被阅读296次

    目录结构

    一、批量执行
        【方式1】按Collection中的API自上而下顺序执行
            Step-1:测试集准备
            Step-2:进入Collection Runner界面
            Step-3:配置Collection Runner中的选项,开始批量执行
            Step-4:检查批量执行效果
        【方式2】在Tests中通过设置脚本控制API的执行顺序
    二、数据驱动
            Step-1:数据文件&测试集准备
            Step-2:对测试集执行Run
            Step-3:配置Collection Runner选项
            Step-4:正式执行数据驱动测试,检查执行效果
    

    一、批量执行

    批量执行:若想要批量测试某个集合里面的所有API时,可使用Collection Runner运行每个API,达到批量执行的效果。同时,可进行环境变量(Environment)、选代次数(Iteration)、延迟时间(Delay)、响应日志(Log Response)等的设置。

    【方式1】按Collection中的API自上而下顺序执行
    Step-1:测试集准备

    预先准备好测试集Postman_API_test作为执行的测试集,其内添加多个不同请求的API,如下:

    Step-2:进入Collection Runner界面
    • 方式1:点击Postman界面左上方的【Runner】按钮
    • 方式2:该测试集右侧的三角符号">",再点击所展开弹窗中的【Run】
    Step-3:配置Collection Runner中的选项,开始批量执行

    对Collection Runner界面中的选项配置完成后,点击【Run Postman_API_test】按钮

    Step-4:检查批量执行效果

    执行过程ing...

    执行完成

    【方式2】在Tests中通过设置脚本控制API的执行顺序

    除了默认的自上而下执行顺序(未设置脚本控制),关于API的执行顺序调整,一种方式通过手动拖动左侧Collection中的API来排列顺序;另外一种方式是在API的Tests模块通过设置脚本来控制每个API其后执行的下一个API。

    方式2的适用场景:
    将需要第1个执行的API排放在Collection某个集合中的最上面位置,在该API中的Tests模块编写脚本,控制下一个(第2个)执行的API,再由第2个API的Tests中设置脚本控制第3个执行的API...依次按照设置的顺序执行(1-->2-->3-->...),达到在Collection中构建工作流的效果。

    控制执行先后顺序的脚本格式:

    postman.setNextRequest('下一个接口的名称');
    

    如下,Execution集合中有4个请求(Rq_A、Rq_D、Rq_B、Rq_C)。
    1)若不采用任何脚本控制执行顺序,则Run该集合API的执行先后顺序将会按照默认的自上而下顺序,即:Rq_A-->Rq_D-->Rq_B-->Rq_C

    2)若采用脚本控制执行先后顺序,达到预期效果:Rq_A-->Rq_B-->Rq_C-->Rq_D
    ①Rq_A作为第1个执行的API放在该集合的最上面
    ②然后在Rq_A的Tests模块中填写脚本:

    postman.setNextRequest('Rq_B');
    

    ③Rq_B的Tests中可写or可不写postman.setNextRequest('Rq_C');,因左侧Rq_B的位置下面正好是Rq_C
    ④Rq_C的Tests中填写脚本:

    postman.setNextRequest('Rq_D');
    

    ⑤在最后一个执行的API的Tests中添加终止执行的脚本
    实现当执行完成此API之后,即刻终止,否则可能会进入死循环重复执行(如:A-->B-->C-->D-->B-->C-->D-->B-->C-->D-->...)

    postman.setNextRequest("null");
    

    以上设置完成,记得保存设置。然后执行Run,效果如下:

    二、数据驱动

    数据驱动:当一个接口需要测试很多不同的参数组合时,若采用逐个修改参数值来测试的方式,则效率会比较低。此时,需要每次迭代执行传入不同的参数进行测试,通过导入外部数据文件进行参数化,即可实现大量数据的自动化执行。

    Step-1:数据文件&测试集准备

    数据文件:
    文件名称:data.json
    文件类型:applicaton/json
    json数据内容:

    [{
    "uname": "test00001",
    "pwd": "111111"
    },{
    "uname": "test00002",
    "pwd": "222222"
    },{
    "uname": "test00003",
    "pwd": "333333"
    }]
    

    测试集:
    测试集名称:Data_Driver
    请求URL:https://postman-echo.com/get?uname={{uname}}&pwd={{pwd}}
    请求方式:GET
    传递参数:uname,pwd

    Step-2:对测试集执行Run
    Step-3:配置Collection Runner选项

    在正式执行测试之前,可点击Collection Runner界面上【Preview】按钮,预览检查所导入的data.json数据是否按照预期配置的进行迭代。
    若符合预期,则开始执行;若与预期不符合,则需要重新修改配置,or排查所导入data.json数据的正确性,完全无误后再作执行。

    Step-4:正式执行数据驱动测试,检查执行效果

    点击Collection Runner界面上的【Run Data_Driver】按钮,正式开始执行测试

    执行完成:包含3次迭代的执行结果

    PS:
    若以上执行结果中出现如下异常提示:
    "An error occured while running this request. Open DevTools for more info."
    "Data unavailable(Only data about the top 10 historical runs is stored)"

    可参看此文:
    [Postman] Data unavailable(Only data about the top 10 historical runs is stored)_解决方案

    相关文章

      网友评论

      • 思_念:您好,我想问一下,响应断言可以用数据驱动吗,比如说我维护一个数据文件,里面有两列。第一列用做请求参数,第二列写在tests中用做对应的响应结果
      • 啊一哈:你好 我想问下 要是每次迭代可能返回的code不一样 怎么在tests中做判断啊?
        Fighting_001:是指Status Code状态码的响应断言么,利用Postman提供的函数比如:
        //检验响应的状态码是否为200(执行结果:200,Pass;非200,Fail)
        pm.test("Status code is 200", function () {
        pm.response.to.have.status(200);
        });
      • cooling2016:你好认真呀,每天都在写文章,我两个月都没写了
        Fighting_001:@cooling2016 OK,看来Jenkins CI这方面你应用的应该比较熟悉了哈
        cooling2016:@Fighting_001 有空可以研究下postman newman jenkins的数据驱动自动化,测试数据文件怎么用相对路径
        Fighting_001:额,也没有每天,就比较随意,差不多每隔几天整理一下比较基础的东东,不然有时候长时间不用容易忘记

      本文标题:[PPJ_08] Postman批量执行 & 数据驱动

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