在 Postman 中创建本地收集环境

Let*_*ron 8 postman

我看过关于环境的邮递员文档:

https://www.getpostman.com/docs/v6/postman/environments_and_globals/variables

图像表示环境是集合的本地环境,我在邮递员中没有看到这种情况。

来自 doc 的邮递员图片

我有很多项目,每个项目都有自己的集合,我想为每个项目设置不同的环境 url。但是,我看到环境是通过所有集合共享的。如何使环境成为集合的本地环境?

谢谢!

Siv*_*ngh 15

您发布的图片实际上定义了如何解析变量。\n您可以有不同类型的变量。

\n\n

哪个是:

\n\n
    \n
  • 全局变量
  • \n
  • 环境变量
  • \n
  • 集合变量
  • \n
  • 局部变量
  • \n
  • 数据中的变量
  • \n
\n\n

假设您有一个值为 5 的变量“a”,定义为全局变量。\n但是您还有一个值为“7”的集合变量“a”\n因此,当您发送请求,变量的解析顺序就是图片告诉您的。

\n\n

全局 > 集合 > 环境 > 本地 > 数据\n - 这是解析的顺序。

\n\n

因此,将像这样完成:

\n\n

全局 (a = 5) > 集合 (a = 7) > 环境 (a 未定义) > 本地 (a 未定义) > 数据 (a 未定义)

\n\n

因此,经过解析顺序后“a”的最终值为7

\n\n

环境变量可用于工作区中的所有集合\n每个环境特定于工作区。\n全局变量也是如此。

\n\n

如果您想使用仅特定于每个集合的变量,那么您需要使用集合变量

\n\n

要添加集合变量,只需转到侧边栏并将鼠标悬停在要为其添加变量的集合上,然后单击 \'\xe2\x97\x8f\xe2\x97\x8f\xe2\x97\x8f\'

\n\n

然后单击“编辑”>“变量”> 添加您希望仅特定于此集合的变量。

\n\n

邮递员编辑集合

\n\n

现在,在请求中,您可以以与使用其他变量类似的方式使用这些变量。\n例如:https:// {{url}} /get?foo=bar

\n\n

或者在测试脚本中:

\n\n
console.log(pm.variables.get(\'car\'));  // \'astonMartin\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

邮递员将为您完成剩下的工作。

\n\n

当您有不同的环境(例如 PROD、STAGING、BETA 等)时,环境变量会派上用场。很多人都这样使用它们。\n否则,它们只是变量,因此可以随意使用。

\n\n

或者,如果您想对几个集合使用一个环境,对另一个集合使用另一个环境。\n然后创建多个工作区,并向其中添加具有相应环境的集合。最后,根据需要在这些工作区之间切换。

\n

  • 集合变量需要我使用 {{url-staging}}、{{url-Production}},而不是仅仅使用 {{url}} 并根据环境更改 url 的值。正确的? (10认同)
  • 谢谢。所以最终不可能为不同的集合定义不同的环境。不过,这应该是可能的。人们经常为每个项目仅使用一个工作区和一个集合,它们应该具有不同的环境变量。是否可以创建环境 PROD、STAGING 等?并将变量“url”的值设置为引用像 {{url-staging}} 这样的集合变量? (9认同)
  • 您还可以使用 api:`pm.environment.get` 专门访问环境变量,并使用 `pm.environment.set` 函数设置它们。然后,您可以指定条件,例如如果集合中的变量“STAGE”表示“PROD”,则使用所有 PROD 环境变量。你可以做类似的东西。:) 但实际上,切换环境也不难。在任何时间点,您都将使用 1 个集合和 1 个请求来处理。另外,如果您使用集合运行程序,那么您也将仅使用 1 个集合和 1 个环境来运行。 (2认同)

big*_*oni 12

或者也许只是放弃邮递员的环境功能,并简化并仅使用 Pre-req 脚本和{{URL}}方法,只需对每个集合重复:

const ENVIRONMENTS = {
    DEV: {
        name: "development", 
        url: "http://localhost:3000"
    }, 
    STAGE : {
        name: "staging", 
        url: "..."
    }, 
    PROD : {
        name: "production", 
        url: "..."
    } 
};
pm.collectionVariables.set("URL", (ENVIRONMENTS.DEV).url);
Run Code Online (Sandbox Code Playgroud)

或者也许...使用 Postman 的环境功能只是为了设置环境变量。然后在每个集合预请求脚本中读取该变量,只需选择环境:

...

envName = pm.environment.get('Environment')
const selected = ENVIRONMENTS[envName]

pm.collectionVariables.set("URL", selected.url);
pm.collectionVariables.set("Token", selected.token);
Run Code Online (Sandbox Code Playgroud)

  • 虽然我喜欢这种方法,但我们面临的最大问题归结为敏感数据。我不想将密钥硬编码到预请求脚本中。环境允许您隐藏敏感数据。 (2认同)

Mik*_*ham 8

我带着同样的问题找到了这里,并想出了一种方法来伪造它。我的目标是能够轻松导出集合,而无需导出整套环境变量(包括其他项目的环境变量)来支持它。

基本上,您可以为集合中想要的每组环境特定值创建一个代理变量。

首先,编辑您的集合并使用预请求脚本将环境名称设置为环境变量。我认为可能有一个内置变量可以实现这一点,但没有找到。

pm.environment.set("envName", pm.environment.name)
Run Code Online (Sandbox Code Playgroud)

预请求脚本截图

接下来,在新的集合变量中使用该变量,该变量充当具有环境特定值的匹配变量的代理。或者,您也可以在预请求脚本中创建代理变量。

{{url}} -> {{{{envName}}-url}} -> {{ee-url}} -> your url for ee environment
                               -> {{pr-url}} -> your url for pr environment
Run Code Online (Sandbox Code Playgroud)

集合变量截图

最后,您可以正常使用代理变量。

{{url}}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述