在Postman中设置每个请求测试可访问的测试集合变量

时间:2018-08-16 07:36:51

标签: postman

在邮递员中,我几乎每次执行每个请求序列后都会执行此测试:

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

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

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

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

2 个答案:

答案 0 :(得分:1)

根据Postman数据变量(如JSON)应用作全局/环境变量:

  

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

     

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

因此,HKEY_LOCAL_MACHINE\SOFTWARE\...使用pm.environment.set()pm.globals.set()

答案 1 :(得分:0)

<块引用>

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

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


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

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

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

Import the collection TestCollection.


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

Open the collection window of TestCollection.


如下所示,点击测试标签。
用于测试集合的 JavaScript 代码段是:

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。

Collection test prints the URL of the request in the console.


接下来点击 TestCollection-Request ...

Open the TestCollection-Request.

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

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

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

The TestCollection-Request - click Send.


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

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

The console shows that the collection test runs before the
request test.


要回答提出的问题,在第二个 JS 代码片段(属于 请求)我们应该注释掉声明(和初始化) jsonData 变量,然后看看当请求被 再次发送。
这样做的结果如下图所示。

The value of CollectionVar has changed to Some New Value.

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

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


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

The value of CollectionVar has changed to Some New Value.

确认! - 尽管 集合jsonData 片段和 请求片段的otherJson包含完全相同的数据,它们是 仍然属于两个完全不同且不相关的 JavaScript 变量 到两个完全不同且不相关的范围。 如果有帮助,可以考虑将两个代码片段放在两个不同的文件中。


参考资料