Why advanced tests handle complex scenarios in Postman - Automation Benefits in Action
pm.test('Status code is 201 for valid user creation', () => { pm.response.to.have.status(201); }); const responseJson = pm.response.json(); pm.test('Response contains user id', () => { pm.expect(responseJson).to.have.property('id'); }); pm.test('Response username matches request', () => { const requestJson = pm.request.body.raw ? JSON.parse(pm.request.body.raw) : {}; pm.expect(responseJson.username).to.eql(requestJson.username); }); // Negative test for missing fields if(pm.response.code === 400) { pm.test('Response has error message for missing fields', () => { pm.expect(responseJson).to.have.property('error'); pm.expect(responseJson.error).to.include('missing'); }); } // Negative test for invalid email if(pm.response.code === 422) { pm.test('Response has error message for invalid email', () => { pm.expect(responseJson).to.have.property('error'); pm.expect(responseJson.error).to.include('email'); }); } // Negative test for duplicate username if(pm.response.code === 409) { pm.test('Response has error message for duplicate username', () => { pm.expect(responseJson).to.have.property('error'); pm.expect(responseJson.error).to.include('duplicate'); }); }
This Postman test script checks the API response after sending a user creation request.
First, it verifies the status code is 201 for a successful creation.
Then it checks the response JSON contains a user id and that the username matches the request data.
For negative scenarios, it uses conditional checks on the status code to verify appropriate error messages for missing fields (400), invalid email (422), and duplicate username (409).
This approach ensures the API handles complex scenarios correctly by validating both success and error responses.
Now add data-driven testing with 3 different user payloads including valid, missing fields, and invalid email
Practice
Solution
Step 1: Understand the purpose of advanced tests
Advanced tests are designed to simulate real-life complex situations to ensure software behaves correctly.Step 2: Analyze the options
Only To check software behavior in real-life tricky situations correctly states that advanced tests check tricky real-life scenarios. Other options contradict the purpose of advanced tests.Final Answer:
To check software behavior in real-life tricky situations -> Option CQuick Check:
Advanced tests = check complex scenarios [OK]
- Thinking advanced tests reduce assertions
- Believing advanced tests skip details
- Assuming JavaScript is not used in Postman tests
Solution
Step 1: Review Postman test syntax
Postman uses pm.test with a description and a function containing assertions using pm.response.to.have.status.Step 2: Compare options to correct syntax
pm.test('Status code is 200', () => { pm.response.to.have.status(200); }); matches the correct syntax. Options B, C, and D use incorrect function syntax or non-existent methods.Final Answer:
pm.test('Status code is 200', () => { pm.response.to.have.status(200); }); -> Option BQuick Check:
pm.test + arrow function + pm.response.to.have.status = correct [OK]
- Using function keyword without parentheses
- Using pm.assert or pm.check which don't exist
- Missing arrow function syntax
pm.test('Status is 200', () => {
pm.response.to.have.status(200);
});
pm.test('Response has userId', () => {
const jsonData = pm.response.json();
pm.expect(jsonData).to.have.property('userId');
});Solution
Step 1: Analyze first test with status 404
The first test expects status 200 but response is 404, so it fails.Step 2: Analyze second test accessing JSON property
If response body is not JSON or missing 'userId', pm.response.json() may throw error or test fails due to missing property.Final Answer:
First test fails, second test may error or fail -> Option AQuick Check:
Status 404 breaks status test and risks JSON test failure [OK]
- Assuming tests pass regardless of status
- Ignoring possible JSON parse errors
- Thinking tests fail silently without error
pm.test('Check user name', () => {
const data = pm.response.json;
pm.expect(data.name).to.eql('Alice');
});Solution
Step 1: Identify the error in accessing JSON
pm.response.json is a function and must be called with parentheses to get parsed JSON.Step 2: Correct the code by adding parentheses
Change pm.response.json to pm.response.json() to correctly parse response body.Final Answer:
Change pm.response.json to pm.response.json() -> Option DQuick Check:
Call pm.response.json() as a function to parse JSON [OK]
- Forgetting parentheses on pm.response.json
- Using pm.assert instead of pm.expect
- Changing quotes unnecessarily
Solution
Step 1: Understand the requirement
We need to check if at least one user has status 'active' and age > 30.Step 2: Evaluate each option's logic
pm.test('Check active user over 30', () => { const users = pm.response.json(); const found = users.some(u => u.status === 'active' && u.age > 30); pm.expect(found).to.be.true; }); uses Array.some() to find if any user meets both conditions, then asserts true. pm.test('Check active user over 30', () => { const users = pm.response.json(); pm.expect(users.status).to.eql('active'); pm.expect(users.age).to.be.above(30); }); wrongly checks properties on the whole array. pm.test('Check active user over 30', () => { const users = pm.response.json(); for (let i = 0; i < users.length; i++) { pm.expect(users[i].status === 'active' && users[i].age > 30).to.be.true; } }); asserts every user meets condition, which is too strict. pm.test('Check active user over 30', () => { const users = pm.response.json(); pm.expect(users.filter(u => u.status === 'active')).to.have.length.above(0); }); only checks status but ignores age condition.Final Answer:
pm.test('Check active user over 30', () => { const users = pm.response.json(); const found = users.some(u => u.status === 'active' && u.age > 30); pm.expect(found).to.be.true; }); -> Option AQuick Check:
Use some() to check any matching object [OK]
- Checking properties on entire array instead of items
- Testing all items instead of any item
- Ignoring one of the conditions
Ready to prove it?
Pass the test and this pattern moves unknown
