【问题标题】:Set a test collection variable accessible for each request test in Postman为 Postman 中的每个请求测试设置可访问的测试集合变量
【发布时间】:2021-05-06 19:24:57
【问题描述】:

在 Postman 中,每次请求后,我几乎每次都在测试中执行这个代码序列:

var jsonData = pm.response.json();
// Do something useful with jsonData variable

是否可以将此声明放在集合测试中,以便我可以在每个请求测试中使用它,而不必每次都重写它?

目前,如果我将其设置在我的集合测试中,然后尝试在我的请求测试中使用变量jsonData,则该变量不存在。

我猜我可以将它设置在全局变量或环境变量中,但这似乎不是正确的方法。

【问题讨论】:

  • 我的理解如下。我想说这与scope 有关。变量jsonData 被创建并为每个请求diespm.response.json() 的内容因每个请求而异,因此必须为每个请求重新创建。更多内容在no, that is not possible.

标签: javascript postman


【解决方案1】:

根据Postman数据变量作为JSON应该用作全局/环境变量:

Collection Runner 可让您导入 CSV 或 JSON 文件,然后在 HTTP 请求和脚本中使用数据文件中的值。我们称这些为“数据变量”。

要在 Postman 中使用它们,请遵循与环境或全局变量相同的语法。

所以使用 pm.environment.set()pm.globals.set() 作为您的jsonData

【讨论】:

  • 这不是对已发布问题的回答。
【解决方案2】:

是否可以将此声明放在集合测试中,以便我 可以在我的每个请求测试中使用它,而不必每次都重写 时间?

我的回答:不,这是不可能的
如果您想知道我是如何得出这个结论的,请继续阅读。


我做了一个简单的小实验。您可以按照下面的说明复制它。

我创建了一个名为 TestCollection 的 Postman 集合。
它可以从以下地址下载并保存到您的本地驱动器:
https://schulze.000webhostapp.com/postman/variables/TestCollection.pm_coll.json

然后 - 从 Postman 桌面应用程序(不是 chrome 扩展) - TestCollection可以如下图导入。


要打开收藏窗口,请点击旁边的三个小圆圈 集合名称(工具提示:查看更多操作)。然后点击编辑,如 下图。


如下图所示,点击Tests标签。
集合测试的JavaScript sn-p是:

pm.test('Collection Test', function () {
  pm.response.to.have.status(200);
});
console.log('Hello from Collection Test!');
const jsonData = pm.response.json();
console.log('Collection Test says URL = ' + jsonData.url);

在这种情况下,// Do something useful with jsonData variable 问题是在控制台打印请求的URL。


接下来点击TestCollection-Request ...

...,然后在其 Tests 选项卡上,如下图所示。
(GET请求是https://postman-echo.com/get。-点击图片制作 它更大。)
请求测试的JavaScript sn-p是:

pm.test('Request Test', function () {
  pm.response.to.have.status(200);
});
console.log('Hi from Request Test.');
const jsonData = pm.response.json();
console.log('Request Test says user-agent = ' +
    jsonData.headers['user-agent']);

问题的// Do something useful with jsonData variable是 现在在控制台中打印请求的user-agent

点击蓝色的发送按钮...


...然后打开左下角的Console

控制台中的输出显示 集合测试在 请求测试


回答问题,在第二个 JS代码sn-p(属于 请求)我们应该注释掉声明(和初始化) jsonData 变量,然后看看请求发生时会发生什么 再次发送。
这样做的结果如下图所示。

如图所示,这会导致 ReferenceError: jsonData is not defined.

我认为这里发生的事情相当明显。一旦的范围 第二个 JS代码sn-p变活,第一个 JS代码的作用域 sn-p(属于集合)已经死了。 这意味着 - 在 第二个 代码 sn-p - jsonData 变量是 从未声明过。


要确认这个结果,请考虑如果 - 在第二个代码中会发生什么 仅限 sn-p - 我们(取消注释第 5 行并)将 jsonData 变量重命名为 说otherJson
结果见下图。

确认! - 即使jsonData 集合 sn-p 和 请求的otherJson sn-p 包含完全相同的数据,它们是 仍然属于两个完全不同且不相关的 JavaScript 变量 到两个完全不同且不相关的范围。 想想这两个代码片段位于两个不同的文件中,如果有帮助的话。


参考文献

【讨论】:

    猜你喜欢
    • 2020-08-15
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 2023-04-09
    • 2018-06-30
    • 1970-01-01
    • 2019-02-24
    • 2021-11-27
    相关资源
    最近更新 更多