Postman 沙箱 API

2023-04-04 09:35 更新

Postman 为 JavaScript API 提供对象pm,您可以在 gRPC 请求脚本中使用该对象,在Postman Sandbox中执行。

pm对象

pm对象提供测试请求和响应数据、访问变量和一些元信息的功能。

访问脚本中的上下文信息

pm.request

该pm.request对象提供对脚本中请求数据的访问。在Before invoke和After responsepm.request脚本中都可用。

以下是对象的属性pm.request:

  • 请求网址:pm.request.url: Url
  • 格式的包、服务和方法名称packageName.serviceName.methodName:pm.request.methodPath: string
  • 认证详情:pm.request.auth: Auth
  • 随请求发送的元数据列表:pm.request.metadata: PropertyList<{ key: string, value: string }>key单个元数据项是具有属性和的对象value。
  • 传出消息列表:pm.request.messages: PropertyList<{ data: any, timestamp: Date }>单个消息是具有以下属性的对象:data:发送的消息内容,和timestamp:发送消息的时间,表示为Date对象。对于具有一元和服务器流方法的请求,pm.request.messages将仅在索引 0 处包含一条消息,可以作为pm.request.messages.idx(0).
注意:对象不支持请求变更pm。

pm.response 

pm.response对象提供对当前请求执行的响应中返回的数据的访问。仅在After 响应pm.response脚本中可用。

以下是对象的属性pm.response:

  • gRPC响应状态码:pm.response.statusCode: number
  • 响应时间(以毫秒为单位):pm.response.responseTime: number对于使用流方法的请求,responseTime表示该请求执行的总持续时间。
  • 随响应收到的元数据列表:pm.response.metadata: PropertyList<{ key: string, value: string }>key单个元数据项是具有属性和的对象value。
  • 随响应收到的预告片列表:pm.response.trailers: PropertyList<{ key: string, value: string }>key单个拖车项目是具有属性和的对象value。
  • 传入消息列表:pm.response.messages: PropertyList<{ data: any, timestamp: Date }>单个消息是具有以下属性的对象:data:收到的消息内容,和timestamp:收到消息的时间(日期)。对于具有一元和客户端流方法的请求,pm.response.messages将仅在索引 0 处包含一条消息,可以作为pm.response.messages.idx(0).

pm.info

该pm.info对象提供与请求和脚本本身相关的元信息,包括请求名称、请求 ID 和执行挂钩的名称。

以下是对象的属性pm.info:

  • 执行钩子的名称。这将取决于preinvoke脚本response是否分别在Pre-invoke或Response挂钩中执行。pm.info.eventName: 'beforeInvoke' | 'afterResponse'
  • 标识运行脚本的当前请求的唯一 ID:pm.info.requestId: string
  • 请求名称:pm.info.requestName: string

写断言

您可以分别使用pm.testpm.expect函数将测试规范和断言添加到您的脚本中。

pm.test

  • 使用该pm.test函数将测试规范添加到您的Pre-invoke或Response脚本。pm.test: (testName: string, specFunction: Function) => pm用于帮助您识别测试结果testName部分中的测试,并将测试的目的传达给您的集合的使用者。specFunction是您使用函数定义请求和响应数据断言的地方pm.expect。该pm.test方法返回pm对象,使调用可链接。示例测试套件:pm.test("response should have 'content-type' metadata", function () { pm.response.to.have.metadata('content-type', 'application/grpc'); });可以将可选的done回调传递给pm.test, 以测试异步函数:pm.test('async test', function (done) { setTimeout(() => { pm.expect(pm.response.statusCode).to.equal(0); done(); }, 1500); });您还可以包含多个断言以将相关断言分组到一个测试中:pm.test("Should receive update events for both users", function () { pm.response.messages.to.include({ action: 'update', userId: 'user1' }); pm.response.messages.to.include({ action: 'update', userId: 'user2' }); });
  • 获取从代码中特定位置执行的测试总数:pm.test.index: () => number
  • 使用以下命令跳过测试:pm.test.skip: (testName: string, specFunction: Function) => pm

pm.expect

该方法允许您使用ChaiJS expect BDDpm.expect语法在请求和响应数据上编写断言。

pm.expect: (assertOn: any) => Assertion

您还可以使用pm.request.to.have.*,pm.response.to.have.*和pm.response.to.be.*来构建您的断言。

pm.response.to.have.statusCode(0);
pm.expect(pm.response.responseTime).to.be.below(200);

查看示例部分以获取更多断言。

在脚本中使用变量

前往此处的综合指南,了解如何在脚本中使用变量。

从脚本发送 HTTP 请求

您可以使用该方法从Before invoke和After responsepm.sendRequest脚本异步发送 HTTP 请求。

pm.sendRequest: (request: string | RequestDefinition, callback?: (error: any, response: Response)) => void

您可以向该pm.sendRequest方法传递一个 URL 字符串,或一个完整的请求定义对象,包括标头、方法、正文

// Example with a plain string URL
pm.sendRequest('https://postman-echo.com/get', (error, response) => {
  if (error) {
    console.error(error);
  } else {
    console.log(response.json());
  }
});
// Example with a full-fledged request
const request = {
  url: 'https://postman-echo.com/post',
  method: 'POST',
  header: {
    'Content-Type': 'application/json',
    'X-Foo': 'bar'
  },
  body: {
    mode: 'raw',
    raw: JSON.stringify({ key: 'this is json' })
  }
};

pm.sendRequest(request, (error, response) => {
  console.log(error ? error : response.json());
});
// Example containing a test
pm.sendRequest('https://postman-echo.com/get', (error, response) => {
  if (error) {
    console.log(error);
  }

  pm.test('Response is OK', () => {
    pm.expect(error).to.equal(null);
    pm.expect(response).to.have.property('code', 200);
    pm.expect(response).to.have.property('status', 'OK');
  });
});

使用外部库

要使用一个库,require模块通过传递它的名字,并将返回的导出模块内容分配给一个变量。

require(moduleName: string): any

该require方法允许您使用沙箱内置库模块。下面列出了可用库的列表以及相应文档的链接。

以下 NodeJS 模块也可在沙箱中使用:


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号