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中支持在三个地方编写脚本:
- collection
- folder
- request
其中collection和folder中脚本的入口如下:
image.png1.2 执行流程
Postman中事件可分为四种:
- Pre-Request
- Request
- Response
- Test
其中Pre-Request和Test支持编写脚本。
具体的执行顺序如下:
execOrder.png1.3 控制台
有两种:
- Postman Console:菜单栏中依次打开
View-Show Postman Console
- 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:*)