pm对象API参考
pm
pm:Object
pm对象,含有接口运行关联信息。可利用它获取或设置环境变量和全局变量,且访问请求信息和返回结果信息。
pm:info:Object
pm.info对象,含有接口运行关联信息。
- pm.info.eventName:String:获取当前执行的脚本类型:前置脚本(prerequest),后置脚本(test)。
- pm.info.iterationCount:Number:返回执行循环的总次数,仅集合测试有效。
- pm.info.iteration:Number:获取当前执行循环(iteration)次序,仅集合测试有效。
- pm.info.requestId:String:获取运行中接口用例的唯一ID。
- pm.info.requestName:String:获取运行中接口用例名称。
对于变量的处理
pm.variables
临时变量,Variable SDK 参考。
- pm.variables.toObject():function:获取所有临时变量,结果以对象形式返回。
- pm.variables.has(variableName:String):function:检查某个临时变量是否存在。
- pm.variables.get(variableName:String):function:获取某个临时变量。
- pm.variables.set(variableName:String, variableValue:String):function:设置某个临时变量的名称和值。
- pm.variables.replaceIn(variableName:String):function:用字符串替换指定变量的值,如{{variable_name}}。
pm.environment
环境变量。
- pm.environment.name:String:获取环境名称。
- pm.environment.toObject():function:获取当前环境的所有的变量,结果以对象形式返回。
- pm.environment.clear():function:清除当前环境中所有变量。
- pm.environment.has(variableName:String):function:检查某个环境变量是否存在。
- pm.environment.get(variableName:String):function:获取某个环境变量。
- pm.environment.set(variableName:String, variableValue:String):function:设置某个环境变量的名称和值。
- pm.environment.replaceIn(variableName:String):function:用字符串替换指定变量的值,如{{variable_name}}。
- pm.environment.unset(variableName:String):function:删除某个环境变量。
对于不同类型变量的优先级顺序为: 临时变量 > 环境变量。
以上所有操作都是对本地值进行读写,而不会访问远程值。
对于请求的处理
pm.request
pm.request对象可以在脚本中对请求数据进行访问,Request SDK 参考。在前置脚本中表示即将运行的请求,在后置脚本中,表示已经运行的请求。
pm.request包含了以下结构:
- pm.request.url:Url:获取当前请求的URL。
- pm.request.getBaseUrl():获取运行中环境选择的前置URL。
- pm.request.method:String:获取当前请求的方法,如GET、POST等。
- pm.request.headers:HeaderList:获取当前请求的headers列表。
- pm.request.body:RequestBody:获取当前请求的body体。
- pm.request.headers.add({ key: headerName:String, value: headerValue:String}):function:为当前请求添加指定键和值的header。
- pm.request.headers.remove(headerName:String):function:删除当前请求里指定键的header。
- pm.request.headers.get(headerName:String):function:获取请求里指定名称的header。
- pm.request.headers.upsert({ key: headerName:String, value: headerValue:String}):function:插入指定键和值的header(如果header不存在则新增,如果header已存在则修改)。
- pm.request.auth:获取请求的身份验证信息。
对于响应的处理
pm.response
在后置脚本中pm.response接口请求完成后返回响应信息,Response SDK 参考。
response包含了以下结构:
- pm.response.code:Number:获取响应码。
- pm.response.status:String:获取响应状态。
- pm.response.headers:HeaderList:获取响应头。
- pm.response.responseSize:Number:获取响应大小。
- pm.response.text():Function:以文本形式输出响应体。
- pm.response.json():Function:以json形式输出响应体。
- pm.response.setBody(''):设置响应体。
- pm.response.headers.get:从响应头中获取指定参数的值,Response SDK 参考。
后置脚本中使用“pm.response.headers.get”命令可以获取响应头中指定参数的值。例如想要获取响应Header中date参数的值,那么可以在后置操作中输入如下自定义脚本:
var test = pm.response.headers.get("date"); console.log(test);
对于断言的处理
pm.test
- pm.test(testName:String, specFunction:Function):Function:断言某项结果是否符合预期。
以下示例检查返回响应是否正确:
pm.test("response should be OK to process", function() { pm.response.to.not.be.error; pm.response.to.have.jsonBody(""); pm.response.to.not.have.jsonBody("error"); });
通过回调可选参数done,可用来测试异步方法:
pm.test("async test", function(done) { setTimeout(() => { pm.expect(pm.response.code).to.equal(200); done(); }, 1500); });
- pm.test.index():Function:获取特定位置的测试总数。
pm.expect
- pm.expect(assertion:*):Function:一个普通的断言方法,详细的说明请参照ChaiJS expect BDD library。该方法对于处理来自响应response或变量variables的数据断言非常有用,更多关于pm.expect断言的示例,请参见Assertion library examples。
Response 对象的断言API列表
- pm.response.to.have.status(code:Number):判断响应状态码是否为设置的(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:RegExp):判断响应体中是否等于设置的正则表达式。
- pm.response.to.have.body(optionalValue:String):判断响应体中是否等于设置的字符串。
- pm.response.to.have.jsonBody():判断响应体是否是有效的json结构。
- pm.response.to.have.jsonBody(optionalExpectEqual:Object):判断响应体是否等于json结构里设置的对象。
- pm.response.to.have.jsonBody(optionalExpectPath:String):判断响应体是否包含json结构里设置的路径。
- pm.response.to.have.jsonBody(optionalExpectPath:String, optionalValue:*):
- pm.response.to.have.jsonSchema(schema:Object):判断响应体是否满足定义的json模型。
- pm.response.to.have.jsonSchema(schema:Object, ajvOptions:Object):判断响应体是否满足定义的json模型、校验配置。
pm.response.to.be
pm.response.to.be是一系列内置规则用于实现快速断言。
- pm.response.to.be.info:检查状态码是否为1XX。
- pm.response.to.be.success:检查状态码是否为2XX。
- pm.response.to.be.redirection:检查状态码是否为3XX。
- pm.response.to.be.clientError:检查状态码是否为4XX。
- pm.response.to.be.serverError:检查状态码是否为5XX。
- pm.response.to.be.error:检查状态码是否为4XX或5XX。
- pm.response.to.be.ok:检查状态码是否为200。
- pm.response.to.be.accepted:检查状态码是否为202。
- pm.response.to.be.badRequest:检查状态码是否为400。
- pm.response.to.be.unauthorized:检查状态码是否为401。
- pm.response.to.be.forbidden:检查状态码是否为403。
- pm.response.to.be.notFound:检查状态码是否为404。
- pm.response.to.be.rateLimited:检查状态码是否为429。
对于发送请求的处理
pm.sendRequest
pm.sendRequest:Function用于脚本异步发送HTTP/HTTPS的请求。
- 更多参数信息请查阅Collection SDK 文档 。
- 在前置脚本和后置脚本都可以使用。
- 更多参考:
// 使用字符串URL示例 pm.sendRequest("https://postman-echo.com/get", function(err, resq) { if (err) { console.log(err); } else { pm.variables.set("variable_name", "new_value"); } }); // 完整请求示例 const echoPostRequest = { url: "https://postman-echo.com/post", method: "POST", header: { header_name1: "value1", header_name2: "value2", }, // body 为 x-www-form-urlencoded 格式 body: { mode: "urlencoded", // 此处为 urlencoded // 此处为 urlencoded urlencoded: [ { key: "account", value: "codeartsapi" }, { key: "password", value: "123456" }, ], }, /* // body 为 form-data 格式 body: { mode: 'formdata', // 此处为 formdata // 此处为 formdata formdata: [ { key: 'account', value: 'codeartsapi' }, { key: 'password', value: '123456' } ] } // body 为 json 格式 header: { "Content-Type": "application/json", // 提醒:header中需要添加Content-Type }, body: { mode: 'raw', raw: JSON.stringify({ account: 'codeartsapi', password:'123456' }) } // body 为 raw 或 json 格式 body: { mode: 'raw', raw: 'body内容' } */ }; pm.sendRequest(echoPostRequest, function(err, resq) { console.log(err ? err : resq.json()); }); // 对返回结果进行断言 pm.sendRequest("https://postman-echo.com/get", function(err, resq) { if (err) { console.log(err); } pm.test("response should be OK to process", function() { pm.expect(err).to.equal(null); pm.expect(resq).to.have.property("code", 200); pm.expect(resq).to.have.property("status", "OK"); }); });