Default and conditional responses in Postman - Build an Automation Script
Start learning this pattern below
Jump into concepts and practice - no test required
/* Test script for default response (no query parameter) */ pm.test('Status code is 200', () => { pm.response.to.have.status(200); }); pm.test('Response has default JSON message', () => { const jsonData = pm.response.json(); pm.expect(jsonData).to.have.property('message'); pm.expect(jsonData.message).to.eql('Default response'); }); /* Test script for type=json */ // Run this script after sending request with ?type=json pm.test('Status code is 200', () => { pm.response.to.have.status(200); }); pm.test('Response is valid JSON with expected structure', () => { const jsonData = pm.response.json(); pm.expect(jsonData).to.have.property('data'); pm.expect(jsonData.data).to.be.an('array'); }); /* Test script for type=xml */ // Run this script after sending request with ?type=xml const xml2Json = require('xml2json'); pm.test('Status code is 200', () => { pm.response.to.have.status(200); }); pm.test('Response is valid XML with expected root element', () => { const xmlData = pm.response.text(); let jsonObj; try { jsonObj = JSON.parse(xml2Json.toJson(xmlData)); } catch (e) { pm.expect.fail('Response is not valid XML'); } pm.expect(jsonObj).to.have.property('response'); });
This Postman test script is divided into three parts for each request variation.
First, it checks the default response when no query parameter is sent. It asserts the status code is 200 and the JSON response contains a 'message' property with value 'Default response'.
Second, for the request with ?type=json, it asserts the status code and verifies the response JSON has a 'data' property which is an array, indicating the expected JSON structure.
Third, for the request with ?type=xml, it asserts the status code and uses the xml2json library to convert XML response text to JSON. It then checks that the converted JSON has a 'response' root element, confirming valid XML structure.
Each test uses Postman's pm API for assertions and parsing. This approach keeps tests clear, focused, and maintainable.
Now add data-driven testing with 3 different 'type' parameter values: none, 'json', and 'xml' in a single Postman collection test.
Practice
Solution
Step 1: Understand the role of conditional responses
Conditional responses allow testing different API replies based on conditions in one place.Step 2: Identify the main purpose
This helps verify various outcomes without writing separate tests for each response.Final Answer:
To check different API responses in one test script -> Option CQuick Check:
Default and conditional responses = test multiple replies [OK]
- Confusing response testing with sending requests
- Assuming it changes API endpoints
- Mixing testing with documentation generation
Solution
Step 1: Review Postman test syntax
Postman uses pm.test with a callback function and pm.expect for assertions.Step 2: Identify correct assertion for status code
pm.expect(pm.response.code).to.equal(200) correctly asserts status code equals 200.Final Answer:
pm.test('Status is 200', () => { pm.expect(pm.response.code).to.equal(200); }); -> Option BQuick Check:
pm.expect with .to.equal(200) = correct syntax [OK]
- Using '==' instead of .to.equal() in assertions
- Checking pm.response.status instead of pm.response.code
- Not calling pm.expect properly inside pm.test
pm.test('Check response', () => {
if (pm.response.code === 200) {
pm.expect(pm.response.json().success).to.be.true;
} else {
pm.expect(pm.response.code).to.equal(404);
}
});Solution
Step 1: Analyze the if-else condition with status 404
Status 404 triggers the else block which asserts pm.response.code equals 404.Step 2: Check assertion in else block
pm.expect(pm.response.code).to.equal(404) will pass since status is 404.Final Answer:
Test passes because status is 404 and matches else condition -> Option AQuick Check:
404 status triggers else assertion = pass [OK]
- Assuming test fails due to missing success property
- Thinking JSON parsing fails on 404
- Ignoring else block assertions
pm.test('Status check', () => {
if (pm.response.code = 201) {
pm.expect(pm.response.code).to.equal(201);
} else if (pm.response.code = 400) {
pm.expect(pm.response.json().error).to.exist;
}
});Solution
Step 1: Check if condition syntax
The code uses '=' which assigns value instead of '===' for comparison.Step 2: Understand impact of assignment in conditions
Assignment always returns true, causing logic errors and wrong test behavior.Final Answer:
Using assignment '=' instead of comparison '===' in if conditions -> Option DQuick Check:
Use '===' for comparisons, not '=' [OK]
- Confusing '=' with '==' or '==='
- Ignoring that assignment returns a value
- Not validating all possible status codes
Solution
Step 1: Check correct use of comparison operators
pm.test('Conditional response test', () => { if (pm.response.code === 200) { pm.expect(pm.response.json().data).to.exist; } else if (pm.response.code === 404) { pm.expect(pm.response.json().error).to.exist; } else { pm.expect.fail('Unexpected status code'); } }); uses '===' for comparisons correctly. Using '=' causes assignment instead of comparison.Step 2: Verify conditional logic and assertions
The code checks 'data' field existence for status 200, 'error' for 404, and explicitly fails for unexpected codes using pm.expect.fail().Step 3: Evaluate other options
One option incorrectly combines status and field checks in single pm.expect statements, causing failures. Another does not condition on status codes at all.Final Answer:
pm.test('Conditional response test', () => { if (pm.response.code === 200) { pm.expect(pm.response.json().data).to.exist; } else if (pm.response.code === 404) { pm.expect(pm.response.json().error).to.exist; } else { pm.expect.fail('Unexpected status code'); } }); -> Option AQuick Check:
Use if-else with '===' and proper assertions [OK]
- Using '=' instead of '===' in conditions
- Combining conditions inside one pm.expect
- Not handling unexpected status codes
