Many testers and developers use Postman for both manual and automated API testing. However, not all Postman users fully exploit its capabilities to simplify API-related tasks.
In this article, I will demonstrate a few basic examples of how to make API testing faster, more efficient, and reduce time spent on various routine actions when using Postman.
Let's dive in and uncover some tips and tricks that will make your API testing experience with Postman faster, more efficient, and less prone to repetitive tasks.
Let’s start with Environment.
In Postman, the Environment feature allows you to manage environment variables during the execution of test scenarios. It serves as a container where you can define and store a set of variables that will be used in all requests and scripts associated with that environment.
Using the Environment feature in Postman provides flexibility and reusability. Instead of hard-coding values or repeating them across multiple requests and scripts, you can define variables in the environment and reference them wherever needed.
This way, you can easily update values in one central location without modifying each individual request.
Indeed, each variable in an Environment has a name and a value. You can utilize these variables to store data such as URLs, authentication tokens, API keys, and other values that can be used in your requests
Let's consider an example:
We have a regular backend service with a REST API,
To create an environment, open the "Environments" tab in the left menu of Postman, and click on the "+" button.
Now enter the name of the first environment, let's call it "Production."
In an Environment, variables are typically created to be reused across requests.
Let's create the first variable: Name it "service_url" and set its value to "
After creating the variable, click on "Save" to save all the changes.
In the top right corner, locate "No environment" and click on it. Then, select our created environment, "Production". Now, we can use the variables from the selected environment.
Let's go to Collections and create a new request. In the URL field, enter the following: “{{service_url}}/api/users
”. Now, you can click on "Send" and see the result:
Our request has been completed successfully. The request was made to the address "https://reqres.in" which was stored in the environment variable "service_url
" and we appended "/api/users
" to it.
By utilizing the "service_url
" variable, we can easily reuse it across all our requests. This allows for flexibility and makes it convenient to manage and update the base URL in a single place, saving time and effort in case the URL needs to be modified.
But the real power comes when we create multiple environments. Let's go back to "Environments" and create another environment called "Stage". In this environment, let's create the "service_url
" variable again, but this time, with the value "https://stage.reqres.in".
Now, in the top right corner, change the Environment to "Stage." Go back to the previous request and execute it again:
We receive an error in the response because the domain "stage.reqres.in" does not exist. However, this is not a problem as it confirms that the URL has changed to the value of the "service_url
" variable from the "Stage" environment, and everything is functioning correctly.
By creating multiple environments with the same variables but different values, we can easily switch between them as needed.
In the projects I participate in, we typically create the following environments:
For each environment, variables are created and shared across requests. These variables can include API keys, URLs, user agents, and other parameters that differ from one environment to another.
By utilizing environments, you can easily switch between different environments (such as Dev, Production, Branch, or Local) with just a couple of clicks.
Now, let's move on to another tool that helps speed up the creation of new requests.
In most services, each request has a set of headers that can include the following:
Indeed, manually filling in all the headers for each new request can be time-consuming, especially when there are numerous headers involved.
Two functions come to our rescue in such situations:
Header presets: This is the function we will be discussing now.
To access the header presets feature, follow these steps:
Open any request in Postman.
Go to the "Headers" section.
On the right-hand side, you will find a button labeled "Presets."
After clicking on the "Presets" button, select "Manage presets", and in the opened menu, click on "Add". You will then see the following screen:
Here, we can add headers for presets. Let's create the first header:
It is a good practice to provide descriptions for headers in presets so that every team member understands the purpose of each header.
Let's name the preset "Standard Headers", and click on "Add."
Now, open the "Headers" tab of the request, and click on "Presets" once again.
In the list, you will see the preset we created. Select it, and the header from the preset will be added to the list of headers:
So we have added our header from the preset to the current list of headers.
That way, we can create multiple presets for different types of requests.
For example, in the projects I participate in, we usually create three presets:
and one for internal requests.
When using presets, there are a few things to keep in mind:
You can use variables from the Environment in the header values. This makes presets even more powerful, as you can dynamically set values based on the environment.
Now, let's move on to examples of automating routine tasks using tests.
At many services, there are endpoints that require authentication. Let's take Bearer authentication as an example, where each request needs to include the "Authorization" header with an authentication token. This token needs to be fresh because it has a specific expiration date.
For testing requests with authentication, there are multiple approaches. I will demonstrate what I consider the simplest and quickest method, in my opinion.
To illustrate this, let's take the reqres.in service as an example again. To access an authenticated endpoint, Bearer authentication is required.
The service has an endpoint "/login
" that provides an authentication token. Let's make a request to this endpoint in Postman:
After a successful request, the service returns an authentication token. We need to configure Postman to automatically include this token value in all requests that require authentication.
To achieve this, navigate to the "Tests" tab (located below the URL input), and on the right side, under "Snippets", select "Set environment variable". The following code snippet will be generated:
pm.environment.set("variable_key", "variable_value");
To achieve this, navigate to the "Tests" tab (located below the URL input), and on the right side, under "Snippets", select "Set environment variable". Replace "variable_key" with "authorization_token" and replace "variable_value" with "pm.response.json().token" so that it looks as follows:
pm.environment.set("authorization_token", pm.response.json().token);
Now, execute the request. If it is successful, click on the eye icon in the top-right corner. You will see a screen displaying the list of variables in your environment, which includes the "authorization_token" variable with the value extracted from the response of the request.
What happened here:
pm.environment.set()
is a function used to set the value of an environment variable, and that's how we set the value of the authorization_token
variable. You can even set the value of a variable that doesn't exist in the environment yet, as it will be automatically created.
pm.response.json()
retrieves the JSON object from the response of the request. Then we use .token
to extract the value from the desired field.
As a result, we have an environment variable that will automatically be set whenever we use the `/login
` endpoint. This allows us to have the authorization token automatically included in every subsequent request that requires authentication.
Now all we need to do is go to the relevant requests and add the "Authorization" header with the value "Bearer {{authorization_token}}
". This way, the authorization will be automatically included in those requests using the value of the "authorization_token
" variable:
As a result, we have written a small script that eliminates the need to manually set the authorization in our environment. It will automatically be applied when a successful login request is made.
This kind of automation allows us to simplify working with requests that require data sharing between them.
Let's move on to the bonus part — generating various fields.
Quite often, when testing different APIs, we may need various data, such as:
and much more
Some of these things can be invented and written manually each time, while others need to be generated using services, websites, etc. But why bother doing that when Postman can do it all for you?
Postman has a wide range of data options that it can generate. You can explore all of them by typing "{{" in the URL input field.
The menu scrolls and contains over 100 different options, such as:
If you frequently test APIs, such as when modifying user data, sometimes it's much more beneficial to use random values instead of hardcoded ones. This allows you to cover unexpected scenarios as it introduces variability.
By using random values, you can test edge cases and uncover potential issues that may not be apparent with fixed values.
So, we have covered several simple examples of automating routine tasks with the features of Postman. These pretty little things greatly simplify working with APIs and reduce the amount of manual work and time spent on testing. Enjoy using them! 🙂