美文网首页
postman变量+参数化+数据驱动

postman变量+参数化+数据驱动

作者: 北京硕爷 | 来源:发表于2020-09-03 15:26 被阅读0次

    作者:夕夕石(硕爷)

    QQ:2470798103


    一、全局变量、环境变量、集合变量的配置

    Postman中有三种变量:全局变量(Globals)、环境变量(environment)、集合变量/项目变量)

    (1)集合变量/Collection变量/项目变量(variables)

    (对该集合及子文件夹下所有请求生效), 在新建/编辑 Collection -> Variables 中可以添加

    image image

    (2)全局变量(Globals)

    (对所有请求生效), 在 环境管理 -> Globals中添加

    image image

    (3)环境变量(environment)

    可以先看下面的:

    image image
    • VARIAVLE:变量名
    • INITIAL VALUE:共享初始值, 用于团队共享时供别人使用的默认值
    • CURRENT VALUE:当前值, 自己当前使用的变量值(一般我们只用设置这个值即可)
    • Perisit All:保持所有, 将所有的初始值替换为所有的CURRENT VALUE
    • Reset All:重置所有, 将当前所有的CURRENT VALUE重置为与当前初始值一样

    (4)环境

    image

    二、全局变量、环境变量、集合变量的使用

    (1)非脚本情况,使用变量

    请求url,params 参数或 body表格或 JSON/XML 文本中通过 {{变量名}} 使用

    image

    (2)脚本中使用环境变量

    在 Pre-request Script 和 Tests中使用

    • 设置

    设置普通变量

    pm.environment.set("variable_key", "variable_value");
    

    设置嵌套对象类型的变量

    var array = [1, 2, 3, 4];
    pm.environment.set("array", JSON.stringify(array, null, 2));
    
    var obj = { a: [1, 2, 3, 4], b: { c: 'val' } };
    pm.environment.set("obj", JSON.stringify(obj));
    
    • 获取

    普通变量

    pm.environment.get("variable_key");
    

    字符串化对象的变量

    // These statements should be wrapped in a try-catch block if the data is coming from an unknown source.
    
    var array = JSON.parse(pm.environment.get("array"));
    var obj = JSON.parse(pm.environment.get("obj"));
    
    • 清除
    pm.environment.unset("variable_key");
    

    (3)脚本中使用全局变量

    在 Pre-request Script 和 Tests中使用

    • 设置
    pm.globals.set("variable_key", "variable_value");
    
    • 获取
    pm.globals.get("variable_key");
    
    • 清除
    pm.globals.unset("variable_key");
    

    (4)脚本中使用变量

    在 Pre-request Script 和 Tests中使用

    • 获取

    此函数在环境环境、集合变量、全局变量中搜索变量。

    pm.variables.get("variable_key");
    

    三、全局变量、环境变量、集合变量的优先级

    变量优先级

    当变量重名时, 优先级为:
    环境变量 > Collection变量 > 全局变量(Globals)

    四、常用的全局变量

    前提:将如下内容复制到一个json文件中,然后导入postman。

    不想导入或者导入失败的话,也可以将下面文件中的key、value各自粘贴到你的全局变量里面

    {
        "id": "ed7f409a-c35b-441f-8414-fdc3124c36c5",
        "values": [
            {
                "key": "assertNotTimeout",
                "value": "var hasResponse=postman.getResponseHeader('Content-Type')?true:false; if(!hasResponse) tests['服务端在超时前没返回任何数据,请检查相关服务、网络或反向代理设置(以下跳过其他断言)']=false;",
                "enabled": true
            },
            {
                "key": "logParams",
                "value": "if(hasResponse) tests[`[INFO] 请求参数(超时没返回时不解析):${JSON.stringify(request.data)}`]=true;",
                "enabled": true
            },
            {
                "key": "getResponseJson",
                "value": "try{if(hasResponse) var json=JSON.parse(responseBody);}catch(err){ tests['服务端没返回合法的JSON格式,请检查相关服务、网络或反向代理设置(以下跳过其他断言)']=false; tests[`[INFO] 返回:${responseBody}`]=true; console.error(err);}",
                "enabled": true
            },
            {
                "key": "assertType",
                "value": "var assertType=(name,value,type)=>{let isType=(type==='array')? Array.isArray(value):typeof value===type; tests[`${name} 为 ${type}类型(实际值:${value})`]=isType;};",
                "enabled": true
            },
            {
                "key": "assertEqual",
                "value": "var assertEqual=(name,actual,expected)=>{tests[`${name} 等于 ${expected}(实际值:${actual})`]=actual===expected;};",
                "enabled": true
            },
            {
                "key": "assertNotEqual",
                "value": "var assertNotEqual=(name,actual,expected)=>{tests[`${name} 不等于 ${expected}(实际值:${actual})`]=actual!==expected;};",
                "enabled": true
            }
        ],
        "name": "My Workspace Globals",
        "_postman_variable_scope": "globals",
        "_postman_exported_at": "2019-06-17T11:28:20.839Z",
        "_postman_exported_using": "Postman/7.2.0"
    }
    

    作用:在脚本中写入断言,运行单条用例或runner多条后,在pass、fail后显示详细信息,如下:

    (1)显示post请求的请求参数,并生成一条断言

    eval(globals.assertNotTimeout); 
    eval(globals.logParams);//如果上面没超时,返回post请求的请求参数
    

    (2)显示响应的字段值,并生成一条断言

    eval(globals.assertNotTimeout); 
    eval(globals.getResponseJson);
    tests["success字段的值:" + json.success] = true;
    tests["info字段的name字段的值:" + json.info.name] = true;
    

    (3)assertType,判断类型,并生成一条断言

    //判断类型:"string"、"number"
    eval(globals.assertType);
    assertType("username ",pm.response.json().username,"string");
    assertType("username ",pm.response.json().code,"number");
    

    (4)assertEqual,判断是否相等,并生成一条断言

    eval(globals.assertEqual);
    //assertEqual=(name,actual,expected);
    //name为返回的元素key,actual为返回的实际值,expected为预期值
    assertEqual('code ', pm.response.json().code, 2);
    assertEqual('username ', pm.response.json().username, "ZhangYiMing");
    

    (5)assertNotEqual,判断是否不等,并生成一条断言

    eval(globals.assertNotEqual);
    //assertNotEqual=(name,actual,expected);
    //name为返回的元素key,actual为返回的实际值,expected为预期值
    assertNotEqual('code ',pm.response.json().code, 23);
    assertNotEqual('username ',pm.response.json().username , "期望值")
    

    五、参数化

    1、参数化概念

    入参中,不写实际的值,而是写成 {{变量名}} 的形式,就是参数化。

    image

    2、单接口运行

    单接口运行时,这些变量都取自你的环境变量、集合变量、全局变量。

    3、集合运行

    选择你运行的集合名称、环境,直接 run 即可

    image

    六、数据驱动

    1、编辑数据驱动文件

    • (1)新建一个 txt 文件;

    • (2)第一行写参数化的变量名称,用英文逗号隔开;

    • (3)从第二行开始,每一行是一组数据;

    2、run前的设置

    选择集合名称、环境、数据驱动文件、文件类型、迭代次数。之后Run起来。

    image

    3、预览数据驱动文件

    在选定完数据驱动文件后,可以点击 Preview 预览文件内容

    image

    相关文章

      网友评论

          本文标题:postman变量+参数化+数据驱动

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