HaraldV
HaraldV

Reputation: 737

Postman - Can you use the {{...}} syntax within a Test script?

I have an environment variable called "url", the value is a combination of several other variables in the same environment.

Here is the bulk environment variable definition:

scheme:http  
server:localhost  
port::55881  
application:/  
url:{{scheme}}://{{server}}{{port}}{{application}}

As you can see, url contains other variables.

This works great in the actual request (I'm using {{url}} when addressing my service), but when I try to use the same variable in my scripted tests (In the Tests tab), I'm getting the un-evaluated version.

var serviceUrl = pm.variables.get("url");
console.log(serviceUrl); //Yields {{scheme}}://{{server}}{{port}}{{application}}

Is there a way to get the evaluated value inside my tests?

Thanks!

Complete test for more insight:

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;
});

Upvotes: 2

Views: 4323

Answers (1)

Danny Dainton
Danny Dainton

Reputation: 25901

This would work but I'm not sure what you're trying to achieve:

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}`)

That would log out http://localhost:55881/ to the console.

The {{...}} syntax doesn't work in the way that you had it in the environment file. As it's just storing everything as a string so that's why you would get that output.

You could use {{scheme}}://{{server}}{{port}}{{application}} as the URL but not in the tests using the same syntax.


UPDATE

After seeing the update to the question - Could you not combine the separate variables into a single url variable and construct the infoUrl variable in the following way:

var infoUrl = `${pm.variables.get("url")}ordreinformasjon/${ordrereferanse}?format=json&api_key=${pm.variables.get("api_key")}`

Then use a different environment file with the same url key but with a different value if you need to point the request at a staging or production URL.

I've also noticed that you're using the older tests syntax rather than the newer pm.test() syntax, that might clean up some of the code for you.

Upvotes: 1

Related Questions