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

gv8xihay  于 2022-11-07  发布在  Postman
关注(0)|答案(2)|浏览(160)

在Postman中,在每次请求之后,我几乎每次都执行下面的代码序列:

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

有没有可能把这个声明放在集合测试里面,这样我就可以在我的每个请求测试中使用它,而不必每次都重写它?
目前,如果我在集合测试中设置它,然后尝试在请求测试中使用变量jsonData,则该变量不存在。
我想我可以在全局变量或环境变量中设置它,但这似乎不是正确的方法。

mspsb9vt

mspsb9vt1#

根据Postman的数据,变量作为JSON应该作为全局/环境变量使用:
Collection Runner允许您导入CSV或JSON文件,然后在HTTP请求和脚本中使用数据文件中的值。我们称这些为“数据变量”。
要在Postman中使用它们,请遵循与环境变量或全局变量相同的语法。
因此,将pm.environment.set()pm.globals.set()用于jsonData

66bbxpm5

66bbxpm52#

有没有可能把这个声明放在集合测试里面,这样我就可以在我的每个请求测试中使用它,而不必每次都重写它?

  • 不,这不可能 *

如果你想知道我是如何得出这个结论的,请继续读下去。
我做了一个简单的小实验。你可以复制它如下。
我创建了一个名为TestCollection的 Postman 集合。
可从以下位置下载并保存到本地驱动器:
https://user.it.uu.se/%7Ehesc0353/postman/TestCollection.pm_coll.json
然后,从Postman桌面应用程序(不是chrome扩展)导入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。

然后单击TestCollection-Request...

...然后在其测试选项卡上。
(The 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
单击蓝色的“发送”按钮...
x1c4d 1x指令集
...然后打开左下角的Console
控制台中的输出显示 * 收集测试在请求测试之前运行 *。

为了回答这个问题,在 * 第二个 * JavaScript代码片段(属于 * 请求 *)中,我们应该注解掉jsonData变量的声明(和初始化),然后看看再次发送请求时会发生什么。
执行此操作的结果如下图所示。


指令集
如图所示,这将导致 *ReferenceError:jsonData未定义
我认为这里发生的事情是相当明显的。一旦 * 第二个 * JavaScript代码片段的作用域变为活动的,
第一个 * JavaScript代码片段(属于 * 集合 *)的作用域就已经死了。这意味着-在 * 第二个 * 代码片段中-jsonData变量 * 不可用 *。
为了确认这个结果,考虑一下如果(仅在第二个代码片段中)我们(取消注解第5行并)将jsonData变量重命名为otherJson,将会发生什么。
结果如下图所示。

确认!-即使 the collection 片段的jsonDatathe request 片段的otherJson包含 * 完全相同的数据 *,它们仍然是两个完全不同且不相关的JavaScript变量,属于两个完全不同且不相关的作用域。假设这两个代码片段位于两个不同的文件中,如果这有帮助的话。

参考

相关问题