Bird
Raised Fist0
Postmantesting~15 mins

Dynamic assertion values in Postman - Build an Automation Script

Choose your learning style10 modes available
Verify dynamic values in API response
Preconditions (3)
Step 1: Set the GET request URL to https://api.example.com/user/12345
Step 2: Send the GET request
Step 3: Capture the 'createdAt' field from the response
Step 4: Verify that the 'userId' field equals '12345'
Step 5: Verify that the 'createdAt' field is a valid ISO 8601 date string
Step 6: Verify that the 'status' field equals 'active'
✅ Expected Result: The response contains userId '12345', status 'active', and a valid ISO 8601 date string in 'createdAt'
Automation Requirements - Postman Tests (JavaScript)
Assertions Needed:
userId equals '12345'
status equals 'active'
'createdAt' is a valid ISO 8601 date string
Best Practices:
Use pm.response.json() to parse JSON response
Use dynamic assertions for date validation
Avoid hardcoding dynamic values except userId and status
Use descriptive assertion messages
Automated Solution
Postman
pm.test('Response has userId 12345', () => {
    const jsonData = pm.response.json();
    pm.expect(jsonData.userId).to.eql('12345');
});

pm.test('Response has status active', () => {
    const jsonData = pm.response.json();
    pm.expect(jsonData.status).to.eql('active');
});

pm.test('createdAt is a valid ISO 8601 date string', () => {
    const jsonData = pm.response.json();
    const createdAt = jsonData.createdAt;
    // Simple ISO 8601 regex check
    const iso8601Regex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(.\d+)?Z$/;
    pm.expect(createdAt).to.match(iso8601Regex, 'createdAt should be ISO 8601 format');
    // Additional check: Date parse should not be NaN
    pm.expect(!isNaN(Date.parse(createdAt))).to.be.true;
});

This Postman test script uses pm.response.json() to parse the JSON response once per test for clarity.

First, it asserts that the userId field equals the expected static value '12345'.

Second, it asserts that the status field equals 'active'.

Third, it dynamically validates the createdAt field by checking it matches an ISO 8601 date format using a regular expression and also verifies that JavaScript can parse it as a valid date.

This approach ensures dynamic values like timestamps are validated properly without hardcoding exact values, making the test robust and reliable.

Common Mistakes - 3 Pitfalls
{'mistake': "Hardcoding the exact 'createdAt' timestamp value in assertion", 'why_bad': "The 'createdAt' value changes every time the API is called, so hardcoding causes test failures.", 'correct_approach': 'Use a dynamic check like regex or date parsing to validate the format instead of exact value.'}
Not parsing the response JSON before assertions
Using loose equality (==) instead of strict equality (=== or .eql) in assertions
Bonus Challenge

Now add data-driven testing with 3 different userIds: '12345', '67890', and 'abcde'. Verify userId and status for each.

Show Hint

Practice

(1/5)
1. What is the main purpose of using dynamic assertion values in Postman tests?
easy
A. To make tests flexible by comparing values that change each time
B. To hardcode fixed values for all test runs
C. To disable assertions temporarily
D. To speed up test execution by skipping checks

Solution

  1. Step 1: Understand dynamic assertion values

    Dynamic assertion values allow tests to compare values that can change between API calls, making tests adaptable.
  2. Step 2: Identify the purpose in Postman

    Using dynamic values helps verify API responses that return different data each time, ensuring tests remain valid.
  3. Final Answer:

    To make tests flexible by comparing values that change each time -> Option A
  4. Quick Check:

    Dynamic assertions = flexible tests [OK]
Hint: Dynamic values adapt tests to changing data [OK]
Common Mistakes:
  • Thinking dynamic means disabling assertions
  • Confusing dynamic with fixed values
  • Assuming dynamic values speed up tests
2. Which of the following is the correct way to use a Postman variable in an assertion to check a response value dynamically?
easy
A. pm.expect(pm.response.json().data.id).to.eql('{{$randomId}}');
B. pm.expect(pm.response.json().data.id).to.eql(pm.variables.get('randomId'));
C. pm.expect(pm.response.json().data.id).to.eql('$randomId');
D. pm.expect(pm.response.json().data.id).to.eql(randomId);

Solution

  1. Step 1: Recall Postman variable syntax in scripts

    In test scripts, variables are accessed using pm.variables.get('variableName').
  2. Step 2: Identify correct assertion usage

    pm.expect(pm.response.json().data.id).to.eql(pm.variables.get('randomId')); correctly uses pm.variables.get('randomId') to get the variable value for comparison.
  3. Final Answer:

    pm.expect(pm.response.json().data.id).to.eql(pm.variables.get('randomId')); -> Option B
  4. Quick Check:

    Use pm.variables.get() for dynamic values [OK]
Hint: Use pm.variables.get('name') to access variables in tests [OK]
Common Mistakes:
  • Using {{}} inside test scripts instead of pm.variables.get()
  • Using variable name as plain string without get()
  • Assuming $variable syntax works in scripts
3. Given this Postman test snippet:
pm.test('Check user ID', () => {
  const expectedId = pm.variables.get('userId');
  pm.expect(pm.response.json().id).to.eql(expectedId);
});

If the variable userId is set to 123 and the response JSON is {"id": 124}, what will be the test result?
medium
A. Test passes because values are close
B. Test throws syntax error
C. Test fails because 124 != 123
D. Test is skipped due to missing variable

Solution

  1. Step 1: Compare expected and actual values

    The expected value from variable userId is 123, but response JSON has id 124.
  2. Step 2: Evaluate assertion outcome

    The assertion to.eql(123) vs actual 124 will fail because they are not equal.
  3. Final Answer:

    Test fails because 124 != 123 -> Option C
  4. Quick Check:

    Mismatch values cause test failure [OK]
Hint: Check exact values in assertions to predict pass/fail [OK]
Common Mistakes:
  • Assuming close numbers pass equality
  • Confusing syntax error with assertion failure
  • Ignoring variable value in test
4. You wrote this Postman test:
pm.test('Check token', () => {
  const token = pm.variables.get('authToken');
  pm.expect(pm.response.json().token).to.eql(token);
});

But the test always fails even though the token looks correct. What is the most likely cause?
medium
A. The variable authToken is not set or is empty
B. The response JSON does not contain a token field
C. The assertion syntax is invalid
D. Postman does not support dynamic assertions

Solution

  1. Step 1: Check variable usage

    If authToken is missing or empty, pm.variables.get('authToken') returns undefined or empty string.
  2. Step 2: Understand assertion failure

    Comparing response token to undefined or empty string causes assertion to fail even if response token is correct.
  3. Final Answer:

    The variable authToken is not set or is empty -> Option A
  4. Quick Check:

    Unset variables cause assertion mismatches [OK]
Hint: Always verify variables are set before assertions [OK]
Common Mistakes:
  • Assuming syntax error without checking variables
  • Ignoring missing response fields
  • Believing Postman lacks dynamic assertion support
5. You want to test an API that returns a new order ID each time. You store the previous order ID in a variable prevOrderId. Which Postman test code correctly asserts that the new order ID is different from the previous one?
hard
A. pm.expect(pm.response.json().orderId).to.eql(pm.variables.get('prevOrderId'));
B. pm.expect(pm.response.json().orderId).to.be.lessThan(pm.variables.get('prevOrderId'));
C. pm.expect(pm.response.json().orderId).to.be.greaterThan(pm.variables.get('prevOrderId'));
D. pm.expect(pm.response.json().orderId).not.eql(pm.variables.get('prevOrderId'));

Solution

  1. Step 1: Understand the requirement

    The test should confirm the new order ID is different from the previous one, so equality must fail.
  2. Step 2: Choose correct assertion

    pm.expect(pm.response.json().orderId).not.eql(pm.variables.get('prevOrderId')); uses not.eql to assert the new ID is not equal to the previous ID, matching the requirement.
  3. Final Answer:

    pm.expect(pm.response.json().orderId).not.eql(pm.variables.get('prevOrderId')); -> Option D
  4. Quick Check:

    Use not.eql to assert values differ [OK]
Hint: Use not.eql to check values are different [OK]
Common Mistakes:
  • Using eql to check difference (wrong)
  • Assuming greaterThan always works for IDs
  • Confusing lessThan with difference check
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard