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

Postman - 无法在集合级别的预请求脚本中运行 pm.sendRequest()

伯和蔼
2023-03-14

我使用纽曼在特拉维斯构建后运行API测试。

我试图限制请求前脚本的重复,所以检查了一些关于如何在集合级别拥有请求前脚本的变通方法。

我的问题是,我不想在每个请求上都运行它们,只在我需要它们的时候运行。

示例:我正在尝试运行登录脚本以在私有endpoint上使用返回的令牌。

我的代码看起来像:

集合级别预请求脚本定义:

    Object.prototype.login = function() {
        const request = {
            url: 'somthing',
            method: 'GET',
            header: 'Content-Type:application/json',
            body: {
              mode: 'application/json',
              raw: JSON.stringify(
                {
                  email: pm.environment.get('someenv'),
                  password: pm.environment.get('someenv')
                })
            }
        };

        pm.sendRequest(request, function (err, res) {
            var response = res.json();
            pm.environment.set("token", response.token);
        });
    }

请求级别预请求脚本定义:

    _.login();

有人可以帮助我解决为什么我不能在此范围内运行pm.send请求吗?

<code>pm.environment。get('someenv')非常有效,所以我不知道在这里该做什么。

在不使用 Object 的情况下从集合级别的预请求脚本调用时,它运行正常,但是如果我只是将整个请求放在那里,它将在每个请求之前运行,这是我想要首先避免的。

我试着用控制台注销一些东西。log(),但似乎是下午的回调。sendRequest()从不运行。

共有1个答案

司马宏茂
2023-03-14

所以我找到了这个问题的解决方法,我希望它能在未来帮助某人:)

因此,很容易设置在每个请求之前运行的集合级预请求。

但是要对此进行一点优化,因为您不需要为集合中发出的每个请求运行每个脚本。您可以在此处使用我的解决方案。:)

我认为问题是由以下原因引起的:

在不同作用域中使用的PM对象不会影响全局作用域中的PM对象,所以首先您应该将全局PM对象作为参数传递给函数调用

集合级别请求应如下所示:

login = function (pm) {
    const request = {
        url: pm.environment.get('base_url') + '/login',
        method: 'POST',
        header: {
            'Content-Type': 'application/json',
        },
        body: {
            mode: 'application/json',
            raw: JSON.stringify({
                email: pm.environment.get('email'),
                password:pm.environment.get('passwd')
            })
        }
    };

    pm.sendRequest(request, (err, res) => {
        var response = res.json();
        pm.expect(err).to.be.a('null');
        pm.expect(response).to.have.property('token')
            .and.to.not.be.empty;
        pm.globals.set("token", response.token);
    });
};

对于您希望首先调用auth并将令牌用于请求调用的确切请求:

login(pm);
 类似资料:
  • 我想做一个邮递员集合请求击中相同的APIendpoint作为不同的用户。例如: 登录“user_1” 设置数据 登录“user_2” 获取数据并检查是否正确

  • 我正在Postman中编写测试,我有多个请求分组如下: > 某些测试标题: > 创建用户(一组“预请求”): 发送一些创建用户所需的请求,这些请求是运行测试所必需的 对已创建用户的一些操作(这里我正在测试测试标题中的内容) 一个或多个请求 < li >创建用户(一组“预先请求”,与测试1中相同。): < ul > < li >发送创建用户、运行测试所需的一些请求 一个或多个请求 总的来说,当我想测

  • 我正在尝试发送一个经过身份验证的请求,只需点击邮递员。 所以,我有一个名为“Oauth”的请求,我正在使用测试将令牌存储在局部变量中。 我现在要做的是,对于需要承载令牌的任何其他请求,自动运行Oauth请求(从预请求脚本)。 有没有一种方法可以通过单击邮递员按钮来获取访问令牌并发送经过身份验证的请求?

  • 我每小时用一个不同的json文件发出一个帖子请求,我想知道我是否可以实现自动化?我在网上搜索了一下,似乎可以用收集跑步者或监视器来完成? 网址:https://api.keepa.com/tracking?key=MY_API_KEY 标头:内容类型应用程序/json 正文: 一个json文件有1000个这样的对象。我有100个json文件。 有人可以给我一些关于这个的信息吗?我可以使用集合运行程

  • 我试图在邮递员预请求脚本中添加一个脚本,这将返回一个令牌。下面是请求的虚拟代码。我无法在请求正文中设置soap xml。在这件事上需要帮助!

  • 在邮递员中,我有一个集合,每个请求都使用集合级承载令牌授权。 现在,我想做的是在我的预请求脚本中发送 http 请求(用于刷新访问令牌),但我不知道是否可以在预请求脚本中获取访问令牌(从集合授权)。我知道我可以得到这样的集合变量 , 但是有没有一种方法可以从授权中获取(并设置)价值呢?