跳到主要内容

Postman Sanbox API

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

下午对象

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

访问脚本中的上下文信息

pm.请求

pm.request对象提供对脚本中请求数据的访问。在 Before invokeAfter 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-invokeResponse挂钩中执行。

    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.testpm.expect 函数将测试规范和断言添加到你的脚本中。

下午测试

  • 使用该pm.test函数将测试规范添加到你的Pre-invokeResponse脚本。

    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 invokeAfter 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 模块也可在沙箱中使用: