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


作者:夕夕石(硕爷)

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,941评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,397评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,345评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,851评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,868评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,688评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,414评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,319评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,775评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,945评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,096评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,789评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,437评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,993评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,107评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,308评论 3 372
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,037评论 2 355