使用变量
通过将值存储在变量中,可以在整个集合、环境和请求中引用它,如果需要更新该值,只需在一个地方更改它。
Postman 支持以下变量范围:
Global
Collection
Environment
Data
Local
image.png
如果在两个不同的作用域中声明了同名变量,则使用作用域最窄的变量中存储的值——例如,如果有一个Globa变量和一个Local变量都命名为username,则在请求时将使用Local变量运行。
-
全局变量允许您访问集合、请求、测试脚本和环境之间的数据。全局变量在整个工作区中都可用。
由于全局变量会造成混淆,因此您应该只谨慎使用它们——例如,快速测试某些东西或当您的项目处于非常早期的原型设计阶段时。* -
集合变量在集合中的整个请求中都可用,并且与环境无关,因此不要根据所选环境进行更改。
如果您仅使用单个环境,则集合变量是合适的,例如用于身份验证 / URL 详细信息。* -
环境变量允许您针对不同环境定制处理,例如本地开发与测试或生产。一次只能激活一个环境。
如果您只有一个环境,使用集合变量会更有效率,但是环境允许您指定基于角色的访问级别。 -
局部变量是临时的,只能在您的请求脚本中访问。局部变量值仅限于单个请求或集合运行,并且在运行完成后不再可用。
如果您需要一个值来覆盖所有其他变量范围,但不希望该值在执行结束后持续存在,则局部变量是合适的。
数据变量来自外部 CSV 和 JSON 文件,用于定义在通过 Newman 或 Collection Runner 运行集合时可以使用的数据集。
在脚本中定义变量:
pm.globals.set("variable_key", "variable_value");
pm.collectionVariables.set("variable_key", "variable_value");
pm.environment.set("variable_key", "variable_value");
pm.variables.set("variable_key", "variable_value");
在脚本中使用变量:
//access a variable at any scope including local
pm.variables.get("variable_key");
//access a global variable
pm.globals.get("variable_key");
//access a collection variable
pm.collectionVariables.get("variable_key");
//access an environment variable
pm.environment.get("variable_key");
访问变量:
{{username}}
如果变量未解析,Postman 会将其突出显示为红色。
使用动态变量
动态变量的例子如下:
{{$guid}}
:一个 v4 风格的guid
{{$timestamp}}
: 当前时间戳(以秒为单位的 Unix 时间戳)
{{$randomInt}}
: 0 到 1000 之间的随机整数
const stringWithVars = pm.variables.replaceIn("Hi, my name is {{$randomInt}}");
共享和持久化数据
创建或编辑变量时,您可以输入初始值和当前值。在 UI 中创建新变量时,如果将当前值留空,它将自动填充初始值。如果您指定一个当前值,它将仅对您的实例是本地的——Persist选项允许您将当前值推送到共享数据,更新初始值以匹配当前值。
编写脚本
您可以添加 JavaScript 代码以在流中的 2 个事件期间执行:
- 在将请求发送到服务器之前,作为预请求脚本选项卡下的预请求脚本。
- 收到响应后,作为测试选项卡下的测试脚本。
脚本执行顺序:
在 Postman 中,单个请求的脚本执行顺序如下所示:
- 与请求关联的预请求脚本将在请求发送之前执行
- 与请求关联的测试脚本将在请求发送后执行
对于集合中的每个请求,脚本将按以下顺序执行:
- 与集合关联的预请求脚本将在集合中的每个请求之前运行。
- 与文件夹关联的预请求脚本将在文件夹中的每个请求之前运行。
- 与集合关联的测试脚本将在集合中的每个请求之后运行。
- 与文件夹关联的测试脚本将根据文件夹中的请求运行。
编写预请求脚本
您可以在 Postman 中使用预请求脚本在请求运行之前执行 JavaScript。通过在请求、集合或文件夹的Pre-request Script选项卡中包含代码,您可以执行预处理,例如设置变量值、参数、标头和正文数据。您还可以使用预请求脚本来调试代码,例如通过将输出记录到控制台。
请求前脚本的示例用法如下:
- 您在集合中有一系列请求并按顺序运行它们,例如使用集合运行器。
- 第二个请求取决于从第一个请求返回的值。
- 该值需要在您将其传递给第二个请求之前进行处理。
- 第一个请求将响应字段中的数据值设置为其测试脚本中的变量。
- 第二个请求检索该值并在其Pre-request Script 中处理它,然后将处理后的值设置为变量(在第二个请求中引用,例如在其参数中)。
脚本工具流:
在此之后运行指定的请求(集合中定义的请求名称,例如“获取客户”):
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.test("The response has all properties", () => {
//parse the response json and test three properties
const responseJson = pm.response.json();
pm.expect(responseJson.type).to.eql('vip');
pm.expect(responseJson.name).to.be.a('string');
pm.expect(responseJson.id).to.have.lengthOf(1);
});
您可以将测试脚本添加到集合、文件夹或集合中的单个请求。与集合关联的测试脚本将在集合中的每个请求之后运行。与文件夹关联的测试脚本将在文件夹中的每个请求之后运行。这允许您在每次请求后重用常用的测试。
测试响应体
您可以检查响应正文中的特定值:
pm.test("Person is Jane", () => {
const responseJson = pm.response.json();
pm.expect(responseJson.name).to.eql("Jane");
pm.expect(responseJson.age).to.eql(23);
});
测试状态码
您可以测试响应状态代码:
pm.test("Status code is 201", () => {
pm.response.to.have.status(201);
});
如果您想测试状态代码是否为一组,您可以将它们全部包含在一个数组中并使用oneOf
:
pm.test("Successful POST request", () => {
pm.expect(pm.response.code).to.be.oneOf([201,202]);
});
您还可以检查状态代码文本:
pm.test("Status code name has string", () => {
pm.response.to.have.status("Created");
});
测试响应时间
您可以测试响应时间是否在指定范围内:
pm.test("Response time is less than 200ms", () => {
pm.expect(pm.response.responseTime).to.be.below(200);
});
使用集合运行器
- 每个请求之间的间隔延迟(毫秒)。
- 一个数据文件,用于收集运行。
- 将响应保存到日志将允许您查看它们,但可能会影响性能。
- 持久变量意味着运行更新的任何变量在运行之后将保持更改。如果不持久化变量,运行完成后将不会保存更改。请注意,集合运行中的持久变量将仅更新当前值。
- 如果您的请求使用 cookie,您可以选择在收集运行中禁用它们。
- 保存 cookie 意味着在运行期间受请求影响的任何值将在它完成后保留。
设置接下来要执行的请求:
postman.setNextRequest("request_name");
循环当前请求:
提供当前运行的名称setNextRequest
会导致 Postman 连续运行当前请求。
注意:在连续循环一个请求时,应该包装setNextRequest一些逻辑以确保请求不会无限期地运行,否则收集运行器将需要强制关闭。
您可以使用数据文件传递 Postman 值集以在集合运行中使用。通过在 Collection Runner 中选择 JSON 或 CSV 数据文件,您可以在单次运行中使用多个不同的值测试您的请求。
网友评论