后端应用技术后端开发者

Postman Scripting

2018-05-23  本文已影响15人  keith666

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

// 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.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.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.test('environment to be production', function () {
      pm.expect(pm.environment.get('env')).to.equal('production');
  });
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
上一篇下一篇

猜你喜欢

热点阅读