Postman环境变量保存不正确?

4

在我的测试和预请求脚本中导出环境变量时,我遇到了一件奇怪的事情。让我们看以下代码:

var temp = ["a", "b", "c"];
pm.environment.set("Array1", temp);
temp.length=0;
temp = ["1", "2", "3"];
pm.environment.set("Array2", temp);
temp.length=0;
temp = ["ZZ", "YY", "XX"];
pm.environment.set("Array3", temp);
console.log(pm.environment.get("Array1")); // expected = ["a", "b", "c"]
console.log(pm.environment.get("Array2")); // expected = ["1", "2", "3"]
console.log(pm.environment.get("Array3")); // expected = ["ZZ", "YY", "XX"]

我希望这三个数组都有值,但令人惊讶的是结果如下:

[]
[]
["ZZ", "YY", "XX"]

只有最后一个是正确的。我可以使用更多的数组,但每次只有最后一个会得到真正的更新,其他所有的都保持空着。我不知道出了什么问题。另外,我尝试了postman.setEnvironmentVariable而不是pm.environment.set,它也能正常工作。有任何想法吗? 谢谢。

1个回答

1

就此而言,这不是一个关于Postman的问题,而是关于Javascript的问题。我对Postman一无所知,但它的pm.environment.set()方法显然保存了对数组对象的引用,而不是创建一个副本。当你随后执行temp.length = 0;时,你截断了该数组对象,使其元素数量为零。当你随后执行temp = ['new', 'array'];时,你创建了一个新的数组对象,并将一个引用分配给temp变量。然后,你将这个新的数组对象引用传递给下一个pm.environment.set()。请注意,temp.length = 0;语句是不必要的,也是你问题的根源。

参见https://www.w3schools.com/js/js_arrays.asp

P.S.,我很好奇你读过哪些文档,让你觉得做temp.length = 0;是正确的事情。


谢谢您的回复。正如您所注意到的,我在JS方面非常非常菜鸟:)实际上,我认为在重复使用数组变量之前清除它更安全。这就是为什么我将其长度设置为0的原因。您的解释现在让我真正明白了。我更好地理解了问题。非常感谢您。 - user12845915
@user12845915,很高兴我的回答对你有帮助。你能否将其标记为解答你的问题呢? - Kurtis Rader

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接