当前位置: 首页 > 知识库问答 >
问题:

邮递员:如何建立(半)复杂可重用脚本库

林弘文
2023-03-14

我刚接触过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();

测试脚本将成功打印到控制台“我是一个实用函数”。

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");

共有1个答案

蔡弘扬
2023-03-14

有不同的方法来做这件事。我最近为其中一个项目所做的方法是在Git中创建一个项目,然后使用原始url来获取数据。我有一个示例创建在下面的回购

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())
        });
    }
}
eval(pm.globals.get("pmutiljs"))
 类似资料:
  • 是否有一种简单的方法可以捕获PostMan脚本中请求和响应的响应时间? 我尝试通过创建一个集合来完成以下工作,然后在测试中编写以下脚本来捕获值并将其放入环境变量中: 这为我提供了环境变量中的值,但我每次都需要专门去那里检查时间。 我尝试的另一种方法是对集合使用“Runner ”,并从导出结果中的“totalRequestTime”值获得响应时间。但是当我运行大约50个请求时,很难为每个单独的请求捕

  • 如何调用POST API请求(具有用户名请求主体的登录API 登录API:POST方法;请求正文:用户名和密码;响应正文:令牌。获取客户记录API:GET方法;请求URI: /token/ 只想在邮递员的一个测试中涵盖这种端到端场景。任何人都可以帮我提供预请求脚本吗?我应该如何调用登录 API?

  • 在postman中,我想创建一个GET请求,该请求返回302状态代码(以及一个响应头)。我一直试图复制来自浏览器检查员的原始请求,但我总是得到200个响应(并且没有响应头)。 如何使用响应标题获得所需的响应?

  • 我有一个邮递员预请求脚本添加一个HMAC密钥到一个请求。除非身体中有一个环境变量,否则这种方法很有效。所以如果我有下面的身体 当发送请求时将键值设置为sample时,正文包含以下内容 这是我所期望的。但是,在访问预请求脚本中的请求正文时, 我得到以下信息 我怎样才能获得变量被替换的主体,以便它是将被发送到服务器的内容?

  • 相对较新的邮递员,有以下简单场景的问题-我有一个邮递员请求的集合,都指向我正在开发我的应用程序的本地IP。假设我完成了本地开发,在其他服务器上部署了应用程序,并希望重复以前在该服务器上创建的请求。我知道可能有一种方法是使用变量。 但是,与此相反,我导出了集合,并手动编辑了导出的JSON文件,用新的服务器IP替换了所有旧的本地IP。还将集合名称和ID更改为任意值。当导入返回邮递员工作时,我看到请求,

  • 我使用Postman6.0发送HTTP请求。为了发送请求,我使用请求前脚本获取令牌并将其放入环境中,以便在后续请求中使用它。 下面的脚本不起作用,因为没有发送正文。下面的剧本有什么问题吗?