如何使用Postman中的预请求脚本从另一个请求运行一个请求

Las*_*ela 28 javascript postman

我正试图在邮递员中点击一下来发送经过身份验证的请求.

所以,我有一个名为"Oauth"的请求,我正在使用Tests将令牌存储在一个局部变量中.

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("token", jsonData.access_token);
Run Code Online (Sandbox Code Playgroud)

我现在要做的是自动(从预请求脚本)运行Oauth请求,以获取需要持有令牌的任何其他请求.

有没有办法获得访问令牌并通过一个邮递员按钮点击发送经过身份验证的请求?

Han*_*ele 18

我认为还没有办法在预请求脚本中执行此操作,但如果使用变量和"测试"选项卡,则可以将其简化为几次单击.Postman博客上有更全面的说明,但其主旨是:

  1. 像平常一样设置您的身份验证请求.
  2. 在该请求的Tests部分中,将该请求的结果存储在变量中,可能类似于以下内容:

    var data = JSON.parse(responseBody);
    postman.setEnvironmentVariable("token", data.token);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行身份验证请求 - 您现在应该看到为该token环境设置了该请求(单击右上角的眼形图标).

  4. 设置您的数据请求,以便{{token}}在您之前粘贴在承载令牌中的任何位置使用.
  5. 运行您的数据请求 - 现在应该进行适当的身份验证.

要刷新令牌,您需要做的就是重新运行身份验证请求.

  • 我意识到这就是问题首先在做什么,但很容易找到不知道XD的标题 (2认同)

KBu*_*usc 16

有点晚了但是对于遇到这篇文章的其他人来说,现在可以从该Pre-request Script部分发送另一个请求了.可以在这里找到一些例子:https://gist.github.com/madebysid/b57985b0649d3407a7aa9de1bd327990


Ger*_*obi 11

如KBusc所述,并从这些示例中得到启发,可以通过设置如下所示的预请求脚本来实现目标:

pm.sendRequest({
    url: pm.environment.get("token_url"),
    method: 'GET',
    header: {
        'Authorization': 'Basic xxxxxxxxxx==',
    }
}, function (err, res) {
    pm.environment.set("access_token", res.json().token);
});
Run Code Online (Sandbox Code Playgroud)

然后,您只需将其引用{{access_token}}为任何其他环境变量即可。

  • 如何从我的工作区运行请求之一,例如仅通过名称,从我想要的任何请求的预请求中运行? (17认同)

shi*_*ovk 8

首先,添加预请求脚本:

在此输入图像描述

pm.sendRequest({
    url: 'http://YOUR_SITE',
    method: 'POST',
    body: {
        mode: 'urlencoded',
        urlencoded: [
            { key: "login", value: "YOUR_LOGIN" },
            { key: "password", value: "YOUR_PASSWORD" }
        ]
    }
}, function (err, res) {
    if (err === null) {
        pm.globals.set("token", res.json()["access_token"]);
    }
});
Run Code Online (Sandbox Code Playgroud)

其次,设置自定义变量(可以使用它的值之后):

在此输入图像描述

第三,您可以使用变量 by{{VARIABLENAME}},例如:

在此输入图像描述


Pio*_*iuk 7

您不能从Pre-request Script部分发送另一个请求,但实际上,可以链接请求并一个接一个地运行。

你收集你的要求为收集和运行它Collection Runner

要查看请求结果,您可以按照其他答案

  • 您实际上可以从预请求脚本发送请求:https://gist.github.com/madebysid/b57985b0649d3407a7aa9de1bd327990 (2认同)

小智 7

我想到了同样的问题,基本上是“如何运行另一个请求的测试或预请求脚本选项卡中已经存在的另一个请求,而不使用 构建该请求pm.sendRequest(reqConfObj)?”,然后我postman.setNextRequest('requestName')Postman 讨论中找到了方法,该方法是将引导您进入有关构建请求工作流程的邮递员文档页面。

但问题是,postman.setNextRequest()如果您没有运行文件夹或集合,该方法将不会运行,因此只需单击包含脚本的请求的“发送”按钮将不起作用。

我还想提请您注意以下几点:

  • 前置词是“邮递员”而不是“pm”。
  • postman.setNextRequest()总是最后运行,即使您已将其写入脚本的顶部。脚本中的其他代码将运行,然后postman.setNextRequest进行初始化。
  • 如果您想停止请求流,您可以简单地postman.setNextRequest(null).

我鼓励每个使用 Postman 的人查看提到的链接,我相信这是一个很棒的功能,每个人都应该尝试一下!:)


jus*_*tek 5

所有这些解决方法都需要重新创建请求。邮递员不支持你想做的事。为了得到你想要的,你必须使用 Insomnia,它允许你映射来自其他请求响应的正文值,如果这些响应没有被执行,它会自动运行它们或根据所选策略运行它们。

但是如果你想坚持使用 Postman,那么你必须将之前的完整请求参数保存到全局变量中,然后从该变量中以 JSON 字符串的形式检索之前请求的所有配置,将该 JSON 解析为一个对象并将其分配给 pm .sendRequest 作为第一个参数。