gpt4 book ai didi

javascript - postman :如何设置(半)复杂的可重用脚本库以进行收集

转载 作者:行者123 更新时间:2023-11-30 11:20:08 25 4
gpt4 key购买 nike

更新我已经根据后续调查完全重写了这个问题。希望这会产生一些答案。

我是 Postman 的新手,正在尝试弄清楚如何最有效地为 REST 应用程序构建测试集合。我希望在我的每个测试脚本中都可以访问许多实用函数,但是将它们剪切并粘贴到每个测试脚本中似乎是一个糟糕的解决方案。

在查看 Postman 允许您存储数据的各种“范围”(例如全局变量、环境、集合)时,似乎所有这些都只是字符串/数字存储。换句话说,如果您可以/确实对结果进行字符串化,它会正确存储它们。但它实际上并不允许您存储适当的对象或函数。这是有道理的,因为每个脚本似乎都作为单独的执行运行,所以在不同脚本之间共享指向事物的指针的想法没有意义。

共享实用程序函数的可接受方式似乎是在定义脚本(例如 Collection Pre-Req 脚本)中使用 toString() 函数,然后在测试脚本中使用 eval() 字符串化版本。例如:

集合预请求脚本

const utilFunc =  () => { console.log("I am a utility function"); };
pm.environment.set("utilFunc",utilFunc.toString() );

测试脚本

const utilFunc = eval(pm.environment.get("utilFunc"));
utilFunc();

测试脚本将成功打印到控制台“I am a utility function”。

我见过人们做更复杂的事情,如果他们有多个效用函数,将它们放入一个对象中,如 utils.func1utils.func2,并让整个函数返回 utils 对象,因此测试脚本仍然只需要在顶部有一行来导入整个东西。

我遇到的问题是范围界定——因为函数的文字文本是在测试脚本中执行的,实用函数必须具有的所有东西都必须在该代码中,或者以其他方式存在于 eval() 测试脚本中的时间。例如,如果我这样做:

集合预请求脚本

const baseUtilFunc = (foo) => { console.log(foo); };

const utilFunc1 = (param) => { baseUtilFunc("One: " + param); };
const utilFunc2 = (param) => { baseUtilFunc("Two: " + param); };

pm.environment.set("utilFunc1",utilFunc1.toString() );
pm.environment.set("utilFunc2",utilFunc2.toString() );

测试脚本

const utilFunc1 = eval(pm.environment.get("utilFunc1"));
const utilFunc2 = eval(pm.environment.get("utilFunc2"));
utilFunc1("Test");

这失败了,因为在测试脚本中,baseUtilFunc 不存在。显然,在这个例子中,它很容易修复。但在一个更复杂的世界中,我希望在我的测试脚本中使用的实用函数本身构建在底层辅助函数之上,这变得更加困难。

那么处理这个问题的正确方法是什么?人们是否只是将所有相关逻辑塞入一个大函数中,然后他们调用 toString() ?他们是否在其定义中的每个 util 函数中嵌入了从环境中提取然后评估,以便它在测试脚本上下文中工作?他们是否导出每个单独的方法?

最佳答案

有多种方法可以做到这一点。我最近为其中一个项目所做的方法是在 Git 中创建一个项目,然后使用原始 url 来获取数据。我在下面的 repo 中创建了一个示例

https://github.com/tarunlalwani/postman-utils

要加载文件,您需要在集合级别关联以下代码

if (typeof pmutil == "undefined") {
var url = "https://raw.githubusercontent.com/tarunlalwani/postman-utils/master/pmutils.js";

if (pm.globals.has("pmutiljs"))
eval(pm.globals.get("pmutiljs"))
else {
console.log("pmutil not found. loading from " + url);
pm.sendRequest(url, function (err, res) {
eval(res.text());
pm.globals.set('pmutiljs', res.text())
});
}
}

如下图所示

Collection Pre-Request

稍后在 testsPre-Requests 中,您将运行下面的代码行来加载它

eval(pm.globals.get("pmutiljs"))

然后您就可以在测试中轻松使用这些功能。

Tests with reusable functions

关于javascript - postman :如何设置(半)复杂的可重用脚本库以进行收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50129847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com