更新时间:2024-07-17 GMT+08:00
分享

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:*):

    判断响应体是否包含json结构里设置的路径,且路径是否等于设置的值。

  • 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的请求。

// 使用字符串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");
  });
});

相关文档