pm 对象
您将使用 执行大部分 Postman JavaScript API 功能pm.*,它提供对请求和响应数据以及变量的访问。
在脚本中使用变量
您可以使用API在 Postman 的每个范围内访问和操作变量。pm
Postman 支持多种变量范围。该pm对象提供了专门访问全局变量、集合变量和环境变量的pm.variables方法,以及访问不同范围的变量以及设置局部变量的方法。
pm.variables.has(variableName:String):function → Boolean
|
pm.variables.get(variableName:String):function
→ * |
pm.variables.set(variableName:String,
variableValue:*):function |
- 使用以下语法返回脚本内动态变量的解析值{{$variableName}}
:
pm.variables.replaceIn(variableName:String):function:
→ * |
例如:
const stringWithVars =
pm.variables.replaceIn("Hi, my name
is {{$randomFirstName}}");
console.log(stringWithVars);
|
- 返回一个对象,该对象包含当前范围内的所有变量及其值。根据优先顺序,这将包含来自多个范围的变量。
pm.variables.toObject():function
→ Object |
变量范围确定 Postman 在您引用变量时赋予它们的优先级,按优先级递增的顺序排列:
具有最近范围的变量会覆盖任何其他变量。例如,如果您score在当前集合和活动环境中都命名了变量,并且您调用pm.variables.get('score'),则
Postman 将返回环境变量的当前值。当您使用 设置变量值pm.variables.set时,该值是本地的,并且只会在当前请求或收集运行中持续存在。
//collection var 'score'
= 1
//environment var 'score'
= 2
//first request run
console.log(pm.variables.get('score'));//outputs
2
console.log(pm.collectionVariables.get('score'));//outputs
1
console.log(pm.environment.get('score'));//outputs
2
//second request run
pm.variables.set('score',
3);//local var
console.log(pm.variables.get('score'));//outputs
3
//third request run
console.log(pm.variables.get('score'));//outputs
2
|
有关更多详细信息,请参阅Postman 集合 SDK 变量参考。
您还可以通过pm.environment、pm.collectionVariables和pm.globals访问在各个范围中定义的变量。
在脚本中使用环境变量
您的脚本可以使用这些pm.environment方法来访问和操作活动(当前选定的)环境中的变量。
pm.environment.name:String
|
pm.environment.has(variableName:String):function
→ Boolean |
pm.environment.get(variableName:String):function
→ * |
pm.environment.set(variableName:String,
variableValue:*):function |
- 使用以下语法返回脚本内动态变量的解析值{{$variableName}}
pm.environment.replaceIn(variableName:String):function
→ * |
例如:
//environment has vars
firstName and age
const stringWithVars
= pm.environment.replaceIn("Hi, my
name is {{firstName}} and I am {{age}}.");
console.log(stringWithVars);
|
pm.environment.toObject():function
→ Object |
pm.environment.unset(variableName:String):function
|
pm.environment.clear():function
|
请注意,您编辑变量的能力取决于您在工作区中的访问级别。
在脚本中使用集合变量
您的脚本可以使用这些pm.collectionVariables方法来访问和操作集合中的变量。
pm.collectionVariables.has(variableName:String):function
→ Boolean |
pm.collectionVariables.get(variableName:String):function
→ * |
pm.collectionVariables.set(variableName:String,
variableValue:*):function |
- 使用以下语法返回脚本内动态变量的解析值{{$variableName}}:
pm.collectionVariables.replaceIn(variableName:String):function
→ * |
例如:
//collection has vars
firstName and age
const stringWithVars
= pm.collectionVariables.replaceIn("Hi,
my name is {{firstName}} and I am {{age}}.");
console.log(stringWithVars);
|
pm.collectionVariables.toObject():function
→ Object |
pm.collectionVariables.unset(variableName:String):function
|
pm.collectionVariables.clear():function
|
在脚本中使用全局变量
您的脚本可以使用这些pm.globals方法在工作区的全局范围内访问和操作变量。
pm.globals.has(variableName:String):function
→ Boolean |
pm.globals.get(variableName:String):function
→ * |
pm.globals.set(variableName:String,
variableValue:*):function |
- 使用以下语法返回脚本内动态变量的解析值{{$variableName}}:
pm.globals.replaceIn(variableName:String):function
→ String |
例如:
//globals include vars
firstName and age
const stringWithVars
= pm.globals.replaceIn("Hi, my name
is {{firstName}} and I am {{age}}.");
console.log(stringWithVars);
|
pm.globals.toObject():function
→ Object |
pm.globals.unset(variableName:String):function
|
pm.globals.clear():function
|
请注意,您编辑变量的能力取决于您在工作区中的访问级别。
在脚本中使用数据变量
您的脚本可以在收集运行期间pm.iterationData使用这些方法访问和操作数据文件中的变量。
pm.iterationData.has(variableName:String):function
→ boolean |
pm.iterationData.get(variableName:String):function
→ * |
pm.iterationData.toObject():function
→ Object |
pm.iterationData.toJSON():function
→ * |
pm.iterationData.unset(key:String):function
|
使用请求和响应数据编写脚本
多种方法提供对 Postman 脚本中请求和响应数据的访问,包括pm.request、pm.response、pm.info和pm.cookies。此外,您可以使用pm.sendRequest发送请求。
使用请求数据编写脚本
该pm.request对象提供对运行脚本的请求的数据的访问。对于预请求脚本,这是即将运行的请求,对于测试脚本,这是已经运行的请求。
您可以使用pm.request对象预请求脚本在运行之前更改请求配置的各个部分。
该pm.request对象提供以下属性和方法:
pm.request.headers:HeaderList
|
- 请求正文中的数据。此对象是不可变的,不能从脚本中修改:
pm.request.body:RequestBody
|
pm.request.headers.add(header:Header):function
|
例如:
pm.request.headers.add({
key: "client-id",
value: "abcdef"
});
|
pm.request.headers.remove(headerName:String):function
|
- 插入指定的 header 名称和值(如果 header 不存在,否则已经存在的 header
将更新为新值):
pm.request.headers.upsert({key:
headerName:String, value: headerValue:String}):function)
|
有关更多详细信息,请参阅 Postman Collection SDK 请求参考。
使用响应数据编写脚本
该对象提供对添加到Testspm.response的脚本中当前请求的响应中返回的数据的访问。
该pm.response对象提供以下属性和方法:
pm.response.status:String
|
pm.response.headers:HeaderList
|
pm.response.responseTime:Number
|
pm.response.responseSize:Number
|
pm.response.text():Function
→ String |
- 响应 JSON,您可以使用它来深入了解收到的属性:
pm.response.json():Function
→ Object |
有关更多详细信息,请参阅 Postman Collection SDK 响应参考。
使用请求信息编写脚本
该pm.info对象提供与请求和脚本本身相关的数据,包括名称、ID 和迭代计数。
该pm.info对象提供以下属性和方法:
- 该事件将是prerequest或test取决于脚本在请求中的执行位置:
pm.info.iterationCount:Number
|
pm.info.requestName:String
|
使用请求 cookie 编写脚本
该pm.cookies对象提供对与请求关联的 cookie 列表的访问。
该pm.cookies对象提供以下属性和方法:
- 检查请求的域是否存在特定的 cookie(由名称指定):
pm.cookies.has(cookieName:String):Function
→ Boolean |
pm.cookies.get(cookieName:String):Function
→ String |
- 获取对象中所有 cookie 及其值的副本。返回为请求域和路径定义的任何 cookie:
pm.cookies.toObject():Function
→ Object |
有关更多详细信息,请参阅 Postman Collection SDK Cookie 列表参考。
您还可以使用pm.cookies.jar指定域来访问请求 cookie。
要通过这些pm.cookies.jar方法启用编程访问,首先将 cookie URL 添加到允许列表。
pm.cookies.jar():Function
→ Object |
例如:
const jar = pm.cookies.jar();
//cookie methods...
|
jar.set(URL:String,
cookie name:String, cookie value:String,
callback(error, cookie)):Function → Object
|
- PostmanCookie或兼容对象设置 cookie:
jar.set(URL:String,
{ name:String, value:String, httpOnly:Bool
}, callback(error, cookie)):Function → Object
|
例如:
const jar = pm.cookies.jar();
jar.set("httpbin.org",
"session-id", "abc123",
(error, cookie) => {
if (error) {
console.error(`An error
occurred: ${error}`);
} else {
console.log(`Cookie saved:
${cookie} );
}
});
|
从 cookie jar 中获取 cookie:
jar.get(URL:String,
cookieName:String, callback (error, value)):Function
→ Object |
从饼干罐中取出所有饼干。cookie 在回调函数中可用:
jar.getAll(URL:String,
callback (error, cookies)):Function |
删除 cookie:
jar.unset(URL:String,
token:String, callback(error)):Function
→ Object |
清除 cookie jar 中的所有 cookie:
jar.clear(URL:String,
callback (error)):Function → Object |
有关更多详细信息,请参阅 Postman Collection SDK Cookie 参考。
从脚本发送请求
您可以使用该pm.sendRequest方法从预请求或测试脚本异步发送请求。这允许您在执行计算或同时发送多个请求时在后台执行逻辑,而无需等待每个请求完成。您可以通过添加回调函数来避免阻塞问题,以便您的代码可以在
Postman 收到响应时做出响应。然后,您可以对响应数据执行所需的任何其他处理。
您可以将pm.sendRequestURL 字符串传递给方法,也可以在 JSON 中提供完整的请求配置,包括标头、方法、正文等。
// Example with a plain
string URL
pm.sendRequest('https://postman-echo.com/get',
(error, response) => {
if (error) {
console.log(error);
} else {
console.log(response);
}
});
// Example with a full-fledged
request
const postRequest = {
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(postRequest,
(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 should
be okay to process', () => {
pm.expect(error).to.equal(null);
pm.expect(response).to.have.property('code',
200);
pm.expect(response).to.have.property('status',
'OK');
});
});
|
有关更多详细信息,请参阅请求定义和响应结构参考文档。
脚本工作流程
当您使用集合运行器或Newman时,该postman对象提供了setNextRequest构建请求工作流的方法。
请注意,当您使用“发送setNextRequest”按钮运行请求时,它不起作用,它仅在您运行集合时生效。
当您运行一个集合时(使用集合运行器或 Newman),Postman 将以默认顺序或您在设置运行时指定的顺序运行您的请求。但是,您可以覆盖此执行顺序,postman.setNextRequest以指定接下来应该运行哪个请求。
- 在此之后运行指定的请求(集合中定义的请求名称,例如“Get customers”):
postman.setNextRequest(requestName:String):Function
|
- 在这个之后运行指定的请求(返回的请求ID pm.info.requestId):
postman.setNextRequest(requestId:String):Function
|
例如:
//script in another request
calls:
//pm.environment.set('next',
pm.info.requestId)
postman.setNextRequest(pm.environment.get('next'));
|
脚本可视化
用于pm.visualizer.set指定模板以在可视化工具中显示响应数据。
pm.visualizer.set(layout:String,
data:Object, options:Object):Function |
Handlebars HTML 模板字符串
绑定到模板的 JSON 对象,您可以在模板字符串中访问它
选项对象Handlebars.compile()
示例用法:
var template = `<p>{{res.info}}</p>`;
pm.visualizer.set(template,
{
res: pm.response.json()
});
|
将响应数据构建到可视化中
用于pm.getData检索可视化模板字符串中的响应数据。
pm.getData(callback):Function
|
回调函数接受两个参数:
任何错误详情
传递给模板的数据由pm.visualizer.set
示例用法:
pm.getData(function (error,
data) {
var value = data.res.info;
});
|
编写测试断言
- pm.test(testName:String, specFunction:Function):Function
您可以使用pm.test在Pre-request或Tests脚本中编写测试规范。测试包括名称和断言——Postman
将输出测试结果作为响应的一部分。
该pm.test方法返回pm对象,使调用可链接。以下示例测试检查响应是否有效以继续。
pm.test("response
should be okay to process", function
() {
pm.response.to.not.be.error;
pm.response.to.have.jsonBody('');
pm.response.to.not.have.jsonBody('error');
});
|
可以将可选的done回调传递给pm.test, 以测试异步函数。
pm.test('async test',
function (done) {
setTimeout(() => {
pm.expect(pm.response.code).to.equal(200);
done();
}, 1500);
});
|
pm.test.index():Function
→ Number |
该方法允许您使用ChaiJS 期望 BDD语法pm.expect在响应数据上编写断言。
pm.expect(assertion:*):Function
→ Assertion |
您还可以使用pm.response.to.have.*andpm.response.to.be.*来构建您的断言。
有关更多断言,请参阅测试示例。
使用外部库
require(moduleName:String):function
→ * |
该require方法允许您使用沙盒内置库模块。下面列出了可用库的列表以及相应文档的链接。
- ajv
- 阿托布
- BTOA
- 柴
- 切里奥
- 加密js
- csv 解析/lib/同步
- lodash(内置_对象v3.10.1默认存在于沙箱中,require用于加载最新版本。)
- 片刻
- 邮递员收集
- 电视4
- uuid
- xml2js
许多 NodeJS 模块也可以在沙箱中使用:
- 小路
- 断言
- 缓冲
- 实用程序
- 网址
- 小码
- 请求参数
- 字符串解码器
- 溪流
- 计时器
- 事件
为了使用库,调用require方法,将模块名称作为参数传递,并将方法的返回对象分配给变量。
下一步
您可以使用Postman 实用程序以多种方式使用测试将 Postman 构建到您的开发项目中。
|