Bird
Raised Fist0
Postmantesting~15 mins

Setting variables in scripts in Postman - Build an Automation Script

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Set and use environment and global variables in Postman scripts
Preconditions (3)
Step 1: Open the Postman request
Step 2: Go to the Pre-request Script tab
Step 3: Set an environment variable named 'userId' with value '12345' using pm.environment.set()
Step 4: Set a global variable named 'authToken' with value 'abcdef' using pm.globals.set()
Step 5: Send the request
Step 6: Go to the Tests tab
Step 7: Write a script to retrieve 'userId' and 'authToken' variables using pm.environment.get() and pm.globals.get()
Step 8: Use pm.test() to assert that 'userId' equals '12345'
Step 9: Use pm.test() to assert that 'authToken' equals 'abcdef'
✅ Expected Result: The environment variable 'userId' and global variable 'authToken' are set before the request. After the request, the tests pass confirming the variables have the expected values.
Automation Requirements - Postman Sandbox scripting
Assertions Needed:
Assert environment variable 'userId' equals '12345'
Assert global variable 'authToken' equals 'abcdef'
Best Practices:
Use pm.environment.set() and pm.globals.set() to set variables
Use pm.environment.get() and pm.globals.get() to retrieve variables
Use pm.test() with descriptive messages for assertions
Keep scripts clear and simple for maintainability
Automated Solution
Postman
// Pre-request Script
pm.environment.set('userId', '12345');
pm.globals.set('authToken', 'abcdef');

// Tests Script
const userId = pm.environment.get('userId');
const authToken = pm.globals.get('authToken');

pm.test('Environment variable userId is set correctly', () => {
    pm.expect(userId).to.eql('12345');
});

pm.test('Global variable authToken is set correctly', () => {
    pm.expect(authToken).to.eql('abcdef');
});

In the Pre-request Script, we set the environment variable userId and the global variable authToken using pm.environment.set() and pm.globals.set(). This ensures these variables are available before the request runs.

In the Tests Script, we retrieve these variables using pm.environment.get() and pm.globals.get(). Then, we use pm.test() with clear messages to assert that the variables have the expected values. This confirms the variables were set correctly.

This approach keeps scripts simple and easy to understand, which is important for maintaining tests over time.

Common Mistakes - 3 Pitfalls
Using pm.variables.set() instead of pm.environment.set() or pm.globals.set() for setting environment or global variables
Trying to access variables before setting them
Not using pm.test() for assertions and instead using console.log() only
Bonus Challenge

Now add data-driven testing by setting 'userId' and 'authToken' with three different pairs of values in separate requests

Show Hint

Practice

(1/5)
1. What is the purpose of using pm.variables.set in Postman scripts?
easy
A. To store a value in a local variable for later use within the same request
B. To send a request to the server
C. To delete a variable from the environment
D. To log information to the console

Solution

  1. Step 1: Understand the function of pm.variables.set

    This function stores a value in a local variable that can be used later in the same request or script.
  2. Step 2: Differentiate from other actions

    Sending requests, deleting variables, or logging are done by other methods, not pm.variables.set.
  3. Final Answer:

    To store a value in a local variable for later use within the same request -> Option A
  4. Quick Check:

    pm.variables.set stores local variables [OK]
Hint: Remember: set means save value locally in script [OK]
Common Mistakes:
  • Confusing variable setting with sending requests
  • Thinking it deletes variables
  • Assuming it logs output
2. Which of the following is the correct syntax to set a variable named token with value abc123 in a Postman test script?
easy
A. pm.variables.set['token', 'abc123'];
B. pm.variables.set(token, 'abc123');
C. pm.variables.set('token' = 'abc123');
D. pm.variables.set('token', 'abc123');

Solution

  1. Step 1: Check the correct method signature

    The correct syntax uses pm.variables.set('variableName', 'value'); with the variable name as a string and value as the second argument.
  2. Step 2: Identify syntax errors in other options

    pm.variables.set(token, 'abc123'); misses quotes around the variable name. pm.variables.set('token' = 'abc123'); uses an invalid assignment inside the method. pm.variables.set['token', 'abc123']; uses incorrect bracket notation.
  3. Final Answer:

    pm.variables.set('token', 'abc123'); -> Option D
  4. Quick Check:

    Use quotes for variable name in pm.variables.set [OK]
Hint: Variable names must be strings in quotes [OK]
Common Mistakes:
  • Omitting quotes around variable names
  • Using assignment inside set method
  • Using wrong brackets for method call
3. Consider this Postman test script snippet:
pm.variables.set('userId', 42);
const id = pm.variables.get('userId');
console.log(id);

What will be printed in the Postman console?
medium
A. 42
B. undefined
C. '42'
D. null

Solution

  1. Step 1: Understand variable setting and getting

    The script sets 'userId' to the number 42, then retrieves it with pm.variables.get.
  2. Step 2: Check the console output

    The retrieved value is 42 (a number), so console.log(id); prints 42 without quotes.
  3. Final Answer:

    42 -> Option A
  4. Quick Check:

    Set and get return the same stored value [OK]
Hint: Get returns exactly what was set, including type [OK]
Common Mistakes:
  • Assuming get returns string always
  • Expecting undefined if variable not set
  • Confusing quotes in console output
4. You wrote this Postman script:
pm.variables.set('session', 'abc');
pm.variables.get('session');

But the variable session is not accessible in later requests. What is the likely problem?
medium
A. You must call pm.variables.save() to save variables
B. You should use pm.environment.set to make it accessible across requests
C. Variable names cannot be strings
D. You need to restart Postman to apply changes

Solution

  1. Step 1: Understand variable scopes in Postman

    pm.variables.set sets a local variable only for the current script execution, not across requests.
  2. Step 2: Use environment variables for persistence

    To keep variables accessible across requests, use pm.environment.set instead.
  3. Final Answer:

    You should use pm.environment.set to make it accessible across requests -> Option B
  4. Quick Check:

    Local variables are temporary; environment variables persist [OK]
Hint: Use environment.set for cross-request variables [OK]
Common Mistakes:
  • Expecting pm.variables.set to persist across requests
  • Thinking a save method is needed
  • Believing variable names can't be strings
5. You want to set a variable authToken in a Pre-request Script that depends on the response of a previous request stored in pm.response.json(). Which approach correctly sets authToken for use in the next request?
hard
A. Use pm.variables.set('authToken', pm.response.json().token); in the Pre-request Script
B. Use pm.environment.set('authToken', pm.response.json().token); in the Pre-request Script
C. Use pm.environment.set('authToken', pm.response.json().token); in the Tests script of the previous request
D. Use pm.variables.set('authToken', pm.response.json().token); in the Tests script of the previous request

Solution

  1. Step 1: Identify when response data is available

    The response data from pm.response.json() is only available in the Tests script after the request completes, not in the Pre-request Script.
  2. Step 2: Set variable for next request

    To use authToken in the next request, set it as an environment variable in the Tests script of the current request using pm.environment.set.
  3. Step 3: Why not local variables?

    Local variables set with pm.variables.set do not persist across requests, so they won't be available in the next request.
  4. Final Answer:

    Use pm.environment.set('authToken', pm.response.json().token); in the Tests script of the previous request -> Option C
  5. Quick Check:

    Set environment variables in Tests to share data between requests [OK]
Hint: Set environment vars in Tests script to share between requests [OK]
Common Mistakes:
  • Trying to access response in Pre-request Script
  • Using pm.variables.set for cross-request data
  • Setting variables in wrong script phase