未评估Postman嵌入式环境变量

时间:2018-08-01 02:10:18

标签: environment-variables postman

我正在使用Postman v6.1.4。我正在大量使用环境变量。但是看来pm.environment.get()并未评估嵌入式变量。

我在环境中定义了以下环境变量:

addFavDest1:{"ownerId":"{{addFavDest1_ownerId}}","url":"{{addFavDest1_url}}",...}
...
addFavDestArray1:[{{addFavDest1}},{{addFavDest2}},{{addFavDest3}}]

我的API的请求正文包含:

{{addFavDestArray1}}

该请求已成功发送,并带有我期望的数据,并评估了我环境中的所有嵌入式变量。

但是,当我尝试在测试脚本中访问该env var时,将不评估嵌入式变量。例如,以下内容:

var addFavDestArray1 = pm.environment.get('addFavDestArray1')

返回[{{addFavDest1}},{{addFavDest2}},{{addFavDest3}}],不评估变量。

是否有某种方法可以在环境中评估嵌入式变量?

1 个答案:

答案 0 :(得分:0)

因此,为了处理这种情况,我创建了以下所有测试而不是pm.environment.get('var1')environment['var1]environment.var1调用的通用函数。

/* funcGetAndEvalEnvVar */
var funcGetAndEvalEnvVar = (varName) => {
  const EMBEDDED_VAR_REGEX = new RegExp(`{{\\w+}}`, 'g');
  var varValue = environment[varName];
  var evalVarValue = varValue;
  var reMatch;
  while (reMatch = EMBEDDED_VAR_REGEX.exec(varValue)) {
    var embeddedVar = reMatch[0];
    var embeddedVarName = embeddedVar.slice(2, -2);
    if (environment.hasOwnProperty(embeddedVarName)) {
      var embeddedVarValue = funcGetAndEvalEnvVar(embeddedVarName);
      evalVarValue = evalVarValue.replace(new RegExp(embeddedVar, 'g'), embeddedVarValue);
    }
  }
  return evalVarValue;
};