pm 对象 API

全局方法

pm

  1. pm:Object

pm对象包含了接口(或测试集)运行的相关信息,并且可以通过它访问需要发送的请求信息和发送后返回的结果信息。另外还可以通过它getset环境变量和全局变量。

  1. pm.info:Object

pm.info 对象包含了接口(或测试集)运行的相关信息。

  • pm.info.eventName:String

    当前执行是什么类型的脚本:前置脚本(prerequest),或后置脚本(test)。

  • pm.info.iteration:Number

    当前执行第几轮循环(iteration),仅集合测试有效。

  • pm.info.iterationCount:Number

    本次执行需要循环的总轮数,仅集合测试有效。

  • pm.info.requestName:String

    当前正在运行的接口用例名称

  • pm.info.requestId:String

    当前正在运行的接口用例名称的唯一 ID

pm.sendRequest

pm.sendRequest:Function

pm.sendRequest 用途为在脚本内异步发送 HTTP/HTTPS 请求。

  • 该方法接受一个 collection SDK 兼容的 request 参数和一个 callback 函数参数。 callback 有 2 个参数,第一个是 error ,第二个是 collection SDK 兼容的 response。更多信息请查阅 Collection SDK 文档
  • 在前置脚本和后置脚本都可以使用。
  1. // 简单个 GET 请求示例
  2. pm.sendRequest("https://postman-echo.com/get", function(err, res) {
  3. if (err) {
  4. console.log(err);
  5. } else {
  6. pm.environment.set("variable_key", "new_value");
  7. }
  8. });
  9. // 完整的 request 参数示例
  10. const echoPostRequest = {
  11. url: "https://postman-echo.com/post",
  12. method: "POST",
  13. header: {
  14. headername1: "value1",
  15. headername2: "value2",
  16. },
  17. // body 为 x-www-form-urlencoded 格式
  18. body: {
  19. mode: "urlencoded", // 此处为 urlencoded
  20. // 此处为 urlencoded
  21. urlencoded: [
  22. { key: "account", value: "apifox" },
  23. { key: "password", value: "123456" },
  24. ],
  25. },
  26. /*
  27. // body 为 form-data 格式
  28. body: {
  29. mode: 'formdata', // 此处为 formdata
  30. // 此处为 formdata
  31. formdata: [
  32. { key: 'account', value: 'apifox' },
  33. { key: 'password', value: '123456' }
  34. ]
  35. }
  36. // body 为 json 格式
  37. header: {
  38. "Content-Type": "application/json", // 注意:header 需要加上 Content-Type
  39. },
  40. body: {
  41. mode: 'raw',// 此处为 raw
  42. raw: JSON.stringify({ account: 'apifox', password:'123456' }), // 序列化后的 json 字符串
  43. }
  44. // body 为 raw 或 json 格式
  45. body: {
  46. mode: 'raw',
  47. raw: '此处为 body 内容',
  48. }
  49. */
  50. };
  51. pm.sendRequest(echoPostRequest, function(err, res) {
  52. console.log(err ? err : res.json());
  53. });
  54. // 对返回结果进行断言
  55. pm.sendRequest("https://postman-echo.com/get", function(err, res) {
  56. if (err) {
  57. console.log(err);
  58. }
  59. pm.test("response should be okay to process", function() {
  60. pm.expect(err).to.equal(null);
  61. pm.expect(res).to.have.property("code", 200);
  62. pm.expect(res).to.have.property("status", "OK");
  63. });
  64. });

参考:

pm.variables

pm.variables: Variable SDK 参考

临时变量。不同类型的变量,有不同的优先级,不同类型变量的优先级顺序为: 临时变量 < 环境变量 < 全局变量

  • pm.variables.has(variableName:String):function → Boolean: 检查是否存在某个临时变量。
  • pm.variables.get(variableName:String):function → *: get 单个临时变量。
  • pm.variables.set(variableName:String, variableValue:String):function → void: set 单个临时变量。
  • pm.variables.replaceIn(variableName:String):function: 以真实的值替换字符串里的包含的动态变量,如{{variable_name}}
  • pm.variables.toObject():function → Object: 以对象形式获取所有临时变量。

pm.iterationData

pm.iterationData:

测试数据变量,因为测试数据是单独管理的,暂不支持在脚本中直接设置测试数据变量,但是您可以在脚本中访问测试数据变量,如下。

  • pm.iterationData.has(variableName:String):function → Boolean: 检查是否存在某个测试数据变量。
  • pm.iterationData.get(variableName:String):function → *: get 单个测试数据变量。
  • pm.iterationData.replaceIn(variableName:String):function: 以真实的值替换字符串里的包含的动态变量,如{{variable_name}}
  • pm.iterationData.toObject():function → Object: 以对象形式获取所有测试数据变量。

pm.environment

  • pm.environment.name:String: 环境名。
  • pm.environment.has(variableName:String):function → Boolean:检查是否存在某个环境变量。
  • pm.environment.get(variableName:String):function → *:get 单个环境变量。
  • pm.environment.set(variableName:String, variableValue:String):function:set 单个环境变量。
  • pm.environment.replaceIn(variableName:String):function:以真实的值替换字符串里的包含的动态变量,如{{variable_name}}
  • pm.environment.toObject():function → Object:以对象形式获取当前环境的所有变量。
  • pm.environment.unset(variableName:String):function: unset 单个环境变量。
  • pm.environment.clear():function:清空当前环境的所有变量。

注意:

以上所有操作都是读写的本地值,而不会读写远程值

pm.globals

  • pm.globals.has(variableName:String):function → Boolean:检查是否存在某个全局变量。

  • pm.globals.get(variableName:String):function → *:get 单个全局变量。

  • pm.globals.set(variableName:String, variableValue:String):function:set 单个全局变量。

  • pm.globals.replaceIn(variableName:String):function:以真实的值替换字符串里的包含的动态变量,如{{variable_name}}

    如前置脚本,获取请求参数的值如果包含变量,则需要使用 pm.globals.replaceIn 才能将变量替换会真正的值。

  • pm.globals.toObject():function → Object:以对象形式获取所有全局变量。

  • pm.globals.unset(variableName:String):function: unset 单个全局变量。

  • pm.globals.clear():function:清空当前环境的全局变量。

注意:

以上所有操作都是读写的本地值,而不会读写远程值

pm.request

pm.request: Request SDK 参考

request 是接口请求对象。在前置脚本中表示将要发送的请求,在后置脚本中表示`已经发送了的请求。

request 包含了以下结构:

  • pm.request.url:Url: 当前请求的 URL。
  • pm.request.headers:HeaderList:当前请求的 headers 列表。
    • pm.request.method:String 当前请求的方法,如GETPOST等。
  • pm.request.body:RequestBody: 当前请求的 body 体。
  • pm.request.headers.add({ key: headerName:String, value: headerValue:String}):function: 给当前请求添加一个 key 为headerName的 header。
  • pm.request.headers.remove(headerName:String):function: 删除当前请求里 key 为headerName的 header
  • pm.request.headers.upsert({ key: headerName:String, value: headerValue:String}):function: upsert key 为headerName的 header(如不存在则新增,如已存在则修改)。

以下部分 API 仅在后置脚本中可用

pm.response

pm.response: Response SDK 参考

在后置脚本中 pm.response 接口请求完成后返回的 response 信息。

response 包含了以下结构:

  • pm.response.code:Number
  • pm.response.status:String
  • pm.response.headers:HeaderList
  • pm.response.responseTime:Number
  • pm.response.responseSize:Number
  • pm.response.text():Function → String
  • pm.response.json():Function → Object

pm.cookies

pm.cookies: CookieList SDK 参考

cookies 为当前请求对应域名下的 cookie 列表。

  • pm.cookies.has(cookieName:String):Function → Boolean

    检查是否存在名为cookieName的 cookie 值

  • pm.cookies.get(cookieName:String):Function → String

    get 名为cookieName的 cookie 值

  • pm.cookies.toObject:Function → Object

    以对象形式获取当前域名下所有 cookie

  • pm.cookies.jar().clear(pm.request.url)

    清空全局 cookies

注意

pm.cookies 为接口请求后返回的 cookie,而不是接口请求发出去的 cookie。

pm.test

  1. pm.test(testName:String, specFunction:Function):Function

该方法用来断言某个结果是否符合预期。

以下示例为检查返回的 respone 是否正确:

  1. pm.test("response should be okay to process", function() {
  2. pm.response.to.not.be.error;
  3. pm.response.to.have.jsonBody("");
  4. pm.response.to.not.have.jsonBody("error");
  5. });

通过 callback 的可选参数 done ,还可用来测试异步方法:

  1. pm.test("async test", function(done) {
  2. setTimeout(() => {
  3. pm.expect(pm.response.code).to.equal(200);
  4. done();
  5. }, 1500);
  6. });
  • pm.test.index():Function → Number

    Get the total number tests from a specific location.

pm.expect

  1. pm.expect(assertion:*):Function Assertion

pm.expect 是一个普通的断言方法,查看详细的说明:ChaiJS expect BDD librarypm 对象 API - 图1

该方法用来断言 responsevariables里的数据非常有用,更多关于 pm.expect断言的是示例,可以点击这里查看:Assertion library examplespm 对象 API - 图2

Response 对象可用的断言 API 列表

  • 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:*)
  • pm.response.to.have.jsonSchema(schema:Object)
  • pm.response.to.have.jsonSchema(schema:Object, ajvOptions:Object)

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

    检查状态码是否为4XX5XX

  • 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