environment-variables - 保存 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 并且找到了。任何的想法?谢谢你。
解决方案
FWIW,这不是一个真正的邮递员问题。这是一个关于Javascript的问题。我对 Postman 一无所知,但它的pm.environment.set()
方法显然是保存对数组对象的引用,而不是制作副本。当您随后temp.length = 0;
截断该数组对象以使其具有零个元素时。当您随后temp = ['new', 'array'];
创建一个新的数组对象并将对它的引用分配给temp
var 时。然后将新的数组对象引用传递给下一个pm.environment.set()
。请注意,该temp.length = 0;
声明是不必要的,也是您问题的根源。
见https://www.w3schools.com/js/js_arrays.asp
PS,我很好奇您阅读的哪些文档暗示这样做temp.length = 0;
是正确的。
推荐阅读
- python - Discord Bot 无法识别命令名称
- wechat - 如何在 Omnipay 中获取微信支付的服务器端详细信息
- json - 用 jq 删除空结果
- design-patterns - 在 Web api 中使用工厂模式时有什么好的做法?
- python-3.x - E: 无法定位包 python3-fpylll
- excel - VBA - 尽管 On Error Resume Next 出现“下标超出范围”错误
- swift - Swift - 在蒙版图像上放置阴影
- linux - 如何使用 gcc-9?
- visual-studio-2019 - Visual Studio 2019 中数据库比较结果的导出到 CSV 选项
- python - 使用 scipy 优化问题中的雅可比矩阵计算问题