API管理工具之Postman脚本编写

原文地址: https://www.jianshu.com/p/ff5de99dffe2

1. 基本介绍

Postman中支持脚本的编写,可以利用脚本来实现变量的设置,参数的增加以及结果的测试等等。

使用场景介绍:比如我们在用户token,一段时间后过期,每次要重新手动替换比较麻烦吧?更不符合自动化的理念。

解决方案:在登录的Test脚本更新环境中的token中的变量。

如下示例:

if(responseBody){
    let obj=JSON.parse(responseBody);
    pm.environment.set('token',obj.token);
}

1.1 可编写脚本的位置

Postman中支持在三个地方编写脚本:

  1. collection
  2. folder
  3. request

其中collection和folder中脚本的入口如下:

image.png

1.2 执行流程

Postman中事件可分为四种:

  1. Pre-Request
  2. Request
  3. Response
  4. Test

其中Pre-Request和Test支持编写脚本。

具体的执行顺序如下:

execOrder.png

1.3 控制台

有两种:

  1. Postman Console:菜单栏中依次打开View-Show Postman Console
  2. DevTools:菜单栏中依次打开View-Developer-Show DevTools

打开之后就可以看到脚本中的输出日志了。

2. 脚本编写

脚本有pre-request和test两种,所在位置如下:

image.png

注:不同的脚本中可用的变量也有所差异,使用异常会导致报错。

2.1 Pre-request scripts

在请求发送之前执行,可用于设置环境变量。

如设置时间戳

示例:

pm.environment.set("timestampHeader",new Date());

2.2 Test scripts

在收到返回结果后执行,可用于验证返回结果。

示例:

// example using pm.response.to.have
pm.test("response is ok", function () {
    pm.response.to.have.status(200);
});

更多示例可查看Test examples

3. Postman Sandbox

Postman之所以支持脚本的编写是因为Sandbox,这是一个JavaScript的运行环境。

3.1 环境变量

postman.setEnvironmentVariable(variableName, variableValue): Sets an environment variable “variableName”
postman.getEnvironmentVariable(variableName): Returns the value of an environment variable “variableName”
postman.clearEnvironmentVariable(variableName): Clears the environment variable named “variableName”
postman.clearEnvironmentVariables(): Clears all environment variables
// 环境变量对象
environment: A dictionary of variables in the current environment // environment["foo"]

要选中一个环境才能正确执行

3.2 全局变量

postman.setGlobalVariable(variableName, variableValue): Sets a global variable “variableName”
postman.getGlobalVariable(variableName): Returns the value of a global variable “variableName”
postman.clearGlobalVariable(variableName): Clears the global variable named “variableName”
postman.clearGlobalVariables(): Clears all global variables
// 全局变量对象
globals: A dictionary of global variables // globals["bar"]

3.3 其他对象

request {object}: Postman makes the request object available to you while writing scripts. 
responseTime {number} Test-only: The response time in milliseconds 
...

Test-only表示该变量只在Test脚本中可用,在Pre-request中无法使用。

4. Postman Sandbox API reference

  • pm.sendRequest:
// example with a plain string URL
pm.sendRequest('https://postman-echo.com/get', function (err, res) {
    if (err) {
        console.log(err);
    } else {
        pm.environment.set("variable_key", "new_value");
    }
});
  • pm.globals
pm.globals.has(variableName:String):function → Boolean
pm.globals.get(variableName:String):function → *
pm.globals.set(variableName:String, variableValue:String):function
pm.globals.unset(variableName:String):function
pm.globals.clear():function
pm.globals.toObject():function → Object
  • pm.environment
pm.environment.has(variableName:String):function → Boolean
pm.environment.get(variableName:String):function → *
pm.environment.set(variableName:String, variableValue:String):function
pm.environment.unset(variableName:String):function
pm.environment.clear():function
pm.environment.toObject():function → Object
  • pm.expect(assertion:*):Function → Assertion
  pm.test('environment to be production', function () {
      pm.expect(pm.environment.get('env')).to.equal('production');
  });
  • Response Assertion API in test scripts
pm.response.to.have.status(code:Number)
pm.response.to.have.status(reason:String)
pm.response.to.have.header(key:String)
pm.response.to.have.header(key:String, optionalValue:String)
pm.response.to.have.body()
pm.response.to.have.body(optionalValue:String)
pm.response.to.have.body(optionalValue:RegExp)
pm.response.to.have.jsonBody()
pm.response.to.have.jsonBody(optionalExpectEqual:Object)
pm.response.to.have.jsonBody(optionalExpectPath:String)
pm.response.to.have.jsonBody(optionalExpectPath:String, optionalValue:*)

5. Reference

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

推荐阅读更多精彩内容

  • 一、Pre Request Scripts Postman v0.10+ 版本支持pre-request scri...
    常大鹏阅读 68,423评论 4 69
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,654评论 18 139
  • Postman是一款强大的API接口测试工具,有许多不容易发现的好用的功能,下面简单介绍其中一部分功能。详细内容可...
    selfboot阅读 8,449评论 6 25
  • 读一本书,最坏也最好的事,是在书里看到自己的影子。原来一直惧怕却又抑制不住成为的那个样子,不想切断却又不想再去关联...
    乐喜阅读 283评论 0 1
  • 13 其中的关键核心点是,不同涉众的关注点的分割。我有我自己的关注点,你有你的关注点,不同的关注点汇聚到一起,而关...
    玩哲阅读 12,218评论 12 94