首页 > 解决方案 > 保存 Postman 环境变量无法正常工作?

问题描述

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

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"]

我希望所有 3 个数组都有价值,对吗?结果出人意料的是:

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

只有最后一个是正确的。而且我可以继续使用更多的数组,每次,只有最后一个得到真正更新,其他所有的仍然非常空。我不明白出了什么问题。此外,我尝试了 postman.setEnvironmentVariable 而不是 pm.environment.set 并且找到了。任何的想法?谢谢你。

标签: environment-variablespostman

解决方案


FWIW,这不是一个真正的邮递员问题。这是一个关于Javascript的问题。我对 Postman 一无所知,但它的pm.environment.set()方法显然是保存对数组对象的引用,而不是制作副本。当您随后temp.length = 0;截断该数组对象以使其具有零个元素时。当您随后temp = ['new', 'array'];创建一个新的数组对象并将对它的引用分配给tempvar 时。然后将新的数组对象引用传递给下一个pm.environment.set()。请注意,该temp.length = 0;声明是不必要的,也是您问题的根源。

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

PS,我很好奇您阅读的哪些文档暗示这样做temp.length = 0;是正确的。


推荐阅读