Postman 沙箱 API
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.test和pm.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 模块也可在沙箱中使用:
更多建议: