Postman-您可以在测试脚本中使用{…}语法吗?

Postman-您可以在测试脚本中使用{…}语法吗?,postman,Postman,我有一个名为“url”的环境变量,该值是同一环境中其他几个变量的组合 以下是批量环境变量定义: scheme:http server:localhost port::55881 application:/ url:{{scheme}}://{{server}}{{port}}{{application}} 如您所见,url包含其他变量 这在实际请求中非常有效(我在寻址服务时使用{{url}),但是当我尝试在脚本测试中使用相同的变量时(在测试选项卡中),我得到的是未评估的版本 v

我有一个名为“url”的环境变量,该值是同一环境中其他几个变量的组合

以下是批量环境变量定义:

scheme:http  
server:localhost  
port::55881  
application:/  
url:{{scheme}}://{{server}}{{port}}{{application}}
如您所见,url包含其他变量

这在实际请求中非常有效(我在寻址服务时使用
{{url}
),但是当我尝试在脚本测试中使用相同的变量时(在
测试
选项卡中),我得到的是未评估的版本

var serviceUrl = pm.variables.get("url");
console.log(serviceUrl); //Yields {{scheme}}://{{server}}{{port}}{{application}}
有没有办法在我的测试中得到评估值

谢谢

完成测试以获得更多洞察力:

var jsonData = JSON.parse(responseBody);
tests["Status code is 200"] = responseCode.code === 200;

var ordrereferanse = jsonData.Ordrereferanse;
tests.OrdreReferanse = ordrereferanse.length > 0;

//Have to do this
var scheme      = pm.variables.get("scheme");
var server      = pm.variables.get("server");
var port        = pm.variables.get("port");
var application = pm.variables.get("application");
var api_key     = pm.variables.get("api_key");

var serviceUrl = scheme + "://" + server + port + application;

//Instead of this - an environment variable defined like this "{{scheme}}://{{server}}{{port}}{{application}}"
//var serviceUrl = pm.variables.get("url");

//remaining test - go to url to verify that the resource is created and the order reference is set
var infoUrl = serviceUrl + "ordreinformasjon/" + ordrereferanse + "?format=json&api_key=" + api_key;

pm.sendRequest(infoUrl, function (err, response) {
    var info = response.json();

    console.log(info);

    tests.OrdreInformasjonOrdreReferanse = info.OrdreReferanse === ordrereferanse;
});

这会起作用,但我不确定您想要实现什么:

var scheme      = pm.variables.get("scheme")
var server      = pm.variables.get("server")
var port        = pm.variables.get("port")
var application = pm.variables.get("application")

console.log(`${scheme}://${server}${port}${application}`)
这将注销
http://localhost:55881/
到控制台

{{…}}
语法与环境文件中的语法不一样。因为它只是将所有内容存储为一个
字符串
,所以这就是为什么您会得到该输出

您可以使用
{{scheme}}://{{server}{{{port}}{{application}}
作为URL,但在测试中不能使用相同的语法


更新

在看到问题的更新后-您能否将单独的变量组合成一个
url
变量,并以以下方式构造
infoUrl
变量:

var infoUrl = `${pm.variables.get("url")}ordreinformasjon/${ordrereferanse}?format=json&api_key=${pm.variables.get("api_key")}`
然后使用具有相同
url
键但具有不同值的不同环境文件(如果需要将请求指向
staging
production
url)


我还注意到,您正在使用较旧的
测试
语法,而不是较新的语法,这可能会为您清理一些代码。

您可以扩展您尝试测试的内容吗?serviceUrl是否与正在使用的url相同(没有变量)?在环境文件中输入的
url
是这样的吗?我希望pm.variables.get(…)在返回最终值“”之前对变量进行实际计算。显然这不是它的工作方式,所以我希望有一些重载或其他函数可以为我进行计算,这样我就不必在更改封装变量时更新测试。Postman
pm.environment.get()
函数正是这样做的“从环境文件中获取该密钥的值“不幸的是,所有内容都存储为字符串。你能用一个测试的例子来更新这个问题吗?这似乎是可以做到的,但我不知道你的时间是什么样子。我不认为在我做了第一次脚本化的邮差测试之后,发布我的测试不会让我的问题更加清晰。但我认为,如果我可以在脚本中使用变量,而不知道它们的“内部”值,这将是一个非常好的工具的一个有价值的补充。阅读本文的每个人都不知道您如何尝试实施测试来评估url字符串,问题中的更多信息将帮助您获得答案或可能的解决方案。从定义上讲,它使问题变得清晰。我想我可以为你提供一个解决方案,但是没有看到任何测试(不管它是否是第一个测试),我只是猜测。好的,谢谢Danny,我用我的完整测试扩展了这个问题。