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

2020-09-03  本文已影响0人  北京硕爷

作者:夕夕石(硕爷)

QQ:2470798103


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

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

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

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

image image

(2)全局变量(Globals)

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

image image

(3)环境变量(environment)

可以先看下面的:

image image

(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、编辑数据驱动文件

2、run前的设置

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

image

3、预览数据驱动文件

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

image
上一篇下一篇

猜你喜欢

热点阅读