Postman Sanbox API
Postman 为 JavaScript API 提供pm
对象,你可以在 gRPC 请求脚本中使用该对象,在 Postman Sandbox 中执行。
下午对象
该pm
对象提供测试请求和响应数据、访问变量和一些元信息的功能。
访问脚本中的上下文信息
pm.请求
该pm.request
对象提供对脚本中请求数据的访问。在 Before invoke和After responsepm.request
脚本中都可用。
以下是对象的属性pm.request
:
请求网址:
pm.request.url: [Url](https://www.postmanlabs.com/postman-collection/Url.html)
格式的包、服务和方法名称
packageName.serviceName.methodName
:pm.request.methodPath: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#string_type)
认证详情:
pm.request.auth: [Auth](https://www.postmanlabs.com/postman-collection/RequestAuth.html)
随请求发送的元数据列表:
pm.request.metadata: [PropertyList<{ key: string, value: string }>](https://www.postmanlabs.com/postman-collection/PropertyList.html)
key
单个元数据项是具有属性和的对象value
。传出消息列表:
pm.request.messages: [PropertyList<{ data: any, timestamp: Date }>](https://www.postmanlabs.com/postman-collection/PropertyList.html)
单个消息是具有以下属性的对象:
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](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#number_type)
响应时间(以毫秒为单位):
pm.response.responseTime: [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#number_type)
对于使用流方法的请求,
responseTime
表示该请求执行的总持续时间。随响应收到的元数据列表:
pm.response.metadata: [PropertyList<{ key: string, value: string }>](https://www.postmanlabs.com/postman-collection/PropertyList.html)
key
单个元数据项是具有属性和的对象value
。随响应收到的预告片列表:
pm.response.trailers: [PropertyList<{ key: string, value: string }>](https://www.postmanlabs.com/postman-collection/PropertyList.html)
key
单个拖车项目是具有属性和的对象value
。传入消息列表:
pm.response.messages: [PropertyList<{ data: any, timestamp: Date }>](https://www.postmanlabs.com/postman-collection/PropertyList.html)
单个消息是具有以下属性的对象:
data
:收到的消息内容,和timestamp
:收到消息的时间( 日期 )。
对于具有一元和客户端流方法的请求,
pm.response.messages
将仅在索引 0 处包含一条消息,可以作为pm.response.messages.idx(0)
.
下午信息
该pm.info
对象提供与请求和脚本本身相关的元信息,包括请求名称、请求 ID 和执行挂钩的名称。
以下是对象的属性pm.info
:
执行钩子的名称。这将取决于
preinvoke
脚本response
是否分别在Pre-invoke或Response挂钩中执行。pm.info.eventName: 'beforeInvoke' | 'afterResponse'
标识运行脚本的当前请求的唯一 ID:
pm.info.requestId: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#string_type)
请求名称:
pm.info.requestName: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#string_type)
写断言
你可以分别使用 pm.test 和 pm.expect 函数将测试规范和断言添加到你的脚本中。
下午测试
使用该
pm.test
函数将测试规范添加到你的Pre-invoke或Response脚本。pm.test: (testName: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#string_type) , specFunction: [Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions) ) => [pm](/docs/sending-requests/grpc/postman-sandbox-api/#the-pm-object)
用于帮助你识别测试结果
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](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#number_type)
使用以下命令跳过测试:
pm.test.skip: (testName: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#string_type) , specFunction: [Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions) ) => [pm](/docs/sending-requests/grpc/postman-sandbox-api/#the-pm-object)
下午.期待
该方法允许你使用 ChaiJS expect BDD pm.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](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#string_type) | [RequestDefinition](https://www.postmanlabs.com/postman-collection/Request.html#.definition) , callback?: (error: any, response: [Response](https://www.postmanlabs.com/postman-collection/Response.html) )) => void
你可以向该pm.sendRequest
方法传递一个 URL 字符串,或一个完整的请求定义对象,包括 header、方法、正文 等 。
// 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](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#string_type) ): any
该require
方法允许你使用沙箱内置库模块。下面列出了可用库的列表以及相应文档的链接。
以下 NodeJS 模块也可在沙箱中使用: