DEV Community

Alessio Michelini
Alessio Michelini

Posted on

3

How to use Postman tests to populate variables

I've been using Postman for years, and I do love that product, but I'm aware that sometimes I just use a fraction of the features available on it, and today I found almost by accident a super handy one.

The problem

I recently build some APIs, and I'm using Postman to test them, I've created a collection and created all the requests on it and grouped in folders.
I use Postman variables a lot to populate paths, data to send, etc...

Also my APIs use JWT token to authenticate my requests to it, and of course I used a variable on all the requests, as you can see here:

Screenshot 2021-09-15 at 15.41.58

And it works great. The only problem for me, is that the token expires after some time, I don't use JWT token with long life (and you shouldn't), so every time it expires I have to call the login endpoint, authenticate, get the token, copy it, and paste it in the variables.

And if there's something I hate, is repetitive work.

The solution

So I started to google to see if there were any way to automate this, and I found my answer on the "Scripting in Postman documentation".

What I found is that you can write JavaScript code to write tests against your endpoints, which is by itself extremely useful, and something I'll start to do very soon, but I also found out that you can use the pm object available in the tests editor, to also write variables programmatically!

So I edited my login endpoint, selected the "Tests" option (see image), and started to write my script.
Screenshot 2021-09-15 at 15.49.43

Here the script, which is just plain JavaScript:



const { token } = pm.response.json();
// Write to collection variables
pm.collectionVariables.set('jwt_token', token);

pm.test('It should contain the token', () => {
    pm.expect(token).to.be.a('string');
});


Enter fullscreen mode Exit fullscreen mode

So once you run the endpoint via postman, the tests are executed, then I read the response data, and get the token variable from it, then simply use that variable to populate my collection variables, and that's it!

Now once I run that endpoint, all other endpoints, as long I use that variable, they will work with the correct JWT token.

Just marvellous!

Also in my example I use the collection variables, but you can do the same for global, environment and local variables as well, here some examples:



// Global
pm.globals.set("variable_key", "variable_value");

// Enviroment
pm.environment.set("variable_key", "variable_value");

// Collection
pm.collectionVariables.set("variable_key", "variable_value");

// Local variables
pm.variables.set("variable_key", "variable_value");


Enter fullscreen mode Exit fullscreen mode

You can also get or unset those variables, for example:



// get a variable value
const myVar = pm.variables.get("variable_key");

// unset a variable
pm.variables.unset("variable_key");


Enter fullscreen mode Exit fullscreen mode

For more info you can check the Postman related docs

Sentry blog image

How I fixed 20 seconds of lag for every user in just 20 minutes.

Our AI agent was running 10-20 seconds slower than it should, impacting both our own developers and our early adopters. See how I used Sentry Profiling to fix it in record time.

Read more

Top comments (1)

Collapse
 
otumianempire profile image
Michael Otu

haha!! I see the test always but never clicked it until now.. So far, I can relate to most of your articles.. It was helpful..

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up