如何根据 Postman 中运行的迭代增加变量值

Posted

技术标签:

【中文标题】如何根据 Postman 中运行的迭代增加变量值【英文标题】:How to increase Variable value based on the iteration being run in Postman 【发布时间】:2019-12-08 08:06:43 【问题描述】:

我有一个 API 请求,我需要通过多次迭代在 Postman-Collection-Runner 中运行。 API 请求使用变量。

如何使这个变量在每次迭代时自动增加(或者将迭代值设置为另一个变量)?

【问题讨论】:

【参考方案1】:

1.在预请求脚本/测试中使用全局 pm.* 函数和变量

预请求脚本 - 在执行请求之前运行

测试 - 执行请求后运行

一个。

pm.variables.set("id", pm.info.iteration);

例如:example.com/id/update 给出

example.com/0/update

example.com/1/update 等等...

迭代次数在 Collection Runner 中设置。 pm.info.iteration 键具有当前迭代次数,从 0 开始。

b.

var id = +pm.globals.get("id");
pm.globals.set("id", ++id);

变量可以在任何范围内 - globals/collection/environment/local/data

在 Collection Runner 中,选中 Keep Variable Values 复选框,以将变量的最终值保留在会话中(此处为 id)。

注意:如果变量是通过单独的作用域(通过pm.globals.*pm.environment.*pm.collectionVariables.*)访问的,则应根据需要切换上述复选框。否则,如果通过本地范围 (pm.variables.*) 访问,则无论复选框如何,都不会保留该值。

例如:同上

More on variables and scoping


2。使用动态变量

可以在需要随机值或不需要特定顺序的情况下使用这些变量。

a. $randomInt - 给出 1 - 1000 之间的随机整数。

例如:example.com/$randomInt/update 给出

example.com/789/update

example.com/265/update等...

b. $timestamp - 以秒为单位给出当前的 UNIX 时间戳

例如:example.com/$timestamp/update 给出

example.com/1587489427/update

example.com/1587489434/update等...

More on Dynamic variables


在回答这个问题时使用 Postman 7.22.1。未来可能会出现新的方法。

【讨论】:

【参考方案2】:

如果我正确理解您的问题,您希望在不同的迭代中为请求中的变量分配不同的值,这可以通过 2 种方式实现。

a) 使用数据文件

https://learning.getpostman.com/docs/postman/collection_runs/working_with_data_files/

数据文件可以是 JSON 或 CSV 格式。不幸的是,Postman 无法将变量值绑定到另一个变量,除非您想以一种 hacky 的方式进行操作!

b) 预请求和测试脚本

1- 像这样在预请求脚本中初始化环境变量:

var value = pm.environment.get("var");

if( !value) 
    pm.environment.set("var", 1);

2- 增加Tests

中的变量值
var value = pm.environment.get("var");

pm.environment.set("var", value+1);

这会创建一个环境变量并在每次迭代后递增它。根据您构建集合的方式,您可能需要考虑刷新/重置环境变量以准备下一次运行

值得一提的是 Pre-request ScriptsTests 分别在请求之前和之后运行,因此您可以编写任何希望在请求之后运行的脚本测试。不一定是测试!

【讨论】:

谢谢@Mehran。但我正在寻找(可能)更简单的东西。我不想使用任何数据文件。但我想要的是我的变量,即 varId 第一次迭代从 10 开始,然后每次下一次迭代将 自动 增加 +1。因此,在 10 秒迭代后,最后一个值将是 '20' 等。 谢谢@Mehran!我认为这就是我需要的。我试试看。 还有一个问题@Mehran,你知道是否有办法在迭代结束时将value 属性设置回空/空(即,如果我运行了 100 次迭代,在运行 #100 之后,这个属性将被重置回 null)? @KVN pm.info.iteration 为您提供迭代次数(从 0 开始),pm.info.iterationCount 是迭代总数。所以在 Tests 部分进行简单的检查就可以了。你可能需要这样的东西:if (pm.info.iteration == pm.info.iterationCount-1) pm.environment.set("var", <TheDesiredFinalValue>); else var value = pm.environment.get("var"); pm.environment.set("var", value+1);

以上是关于如何根据 Postman 中运行的迭代增加变量值的主要内容,如果未能解决你的问题,请参考以下文章

如何在C#中增加String变量值?

如何根据百里香叶中的变量值打印不同的文本? [复制]

angularjs如何在没有onclick的情况下增加ng-repeat中的init变量值?

如何根据变量值对ArrayList进行排序[重复]

如何根据变量值“n”自动填充单元格

如何根据 PL/SQL 变量值检查输入参数值是不是存在作为列表?