Advanced tests help check complicated situations that simple tests can't cover. They make sure the software works well even in tricky cases.
When you want to test how the system behaves with many users at the same time.
When you need to check if the software handles unusual or rare inputs correctly.
When testing workflows that involve multiple steps or services working together.
When verifying the system's response to errors or unexpected conditions.
When ensuring data stays correct after many changes or updates.
Syntax
Postman
In Postman, advanced tests are written in JavaScript inside the Tests tab using pm.* API.
Example:
pm.test('Test name', function () {
pm.expect(pm.response.code).to.eql(200);
// Add more complex checks here
});
Use the pm object to access request and response details.
You can write multiple assertions to cover complex scenarios.
Examples
This checks if the response status code is 200 (OK).
Postman
pm.test('Status code is 200', function () {
pm.response.to.have.status(200);
});
This verifies the response includes a 'user' property in the JSON data.
Postman
pm.test('Response has user data', function () {
const jsonData = pm.response.json();
pm.expect(jsonData).to.have.property('user');
});
This checks if the user's email matches a simple email pattern.
Postman
pm.test('User email is valid', function () {
const jsonData = pm.response.json();
pm.expect(jsonData.user.email).to.match(/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/);
});
Sample Program
This test checks multiple things: the response status, presence of user data, user ID type, valid email format, and that the user has an 'admin' role. It covers a complex scenario in one test.
Postman
pm.test('Complex scenario: Validate user data and status', function () {
pm.response.to.have.status(200);
const jsonData = pm.response.json();
pm.expect(jsonData).to.have.property('user');
pm.expect(jsonData.user).to.have.property('id').that.is.a('number');
pm.expect(jsonData.user.email).to.match(/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/);
pm.expect(jsonData.user.roles).to.be.an('array').that.includes('admin');
});
OutputSuccess
Important Notes
Advanced tests often combine many checks to cover real-world cases.
Use clear test names to understand what each test checks.
Keep tests maintainable by avoiding too much complexity in one test.
Summary
Advanced tests check complicated and real-life situations.
They use multiple assertions to ensure software works well in tricky cases.
Postman tests use JavaScript and the pm API to write these checks.
Practice
(1/5)
1. Why do advanced tests in Postman handle complex scenarios?
easy
A. To avoid using JavaScript in tests
B. To make tests run faster by skipping details
C. To check software behavior in real-life tricky situations
D. To reduce the number of assertions used
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 C
Quick Check:
Advanced tests = check complex scenarios [OK]
Hint: Advanced tests simulate real situations to find hidden bugs [OK]
Common Mistakes:
Thinking advanced tests reduce assertions
Believing advanced tests skip details
Assuming JavaScript is not used in Postman tests
2. Which of the following is the correct syntax to write an assertion in Postman test script?
easy
A. pm.test('Check status', function { pm.response.status(200); });
B. pm.test('Status code is 200', () => { pm.response.to.have.status(200); });
C. pm.assert('Status 200', pm.response.status == 200);
D. pm.check('Status code', () => pm.response.status(200));
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 B
Quick Check:
pm.test + arrow function + pm.response.to.have.status = correct [OK]
Hint: Use pm.test with arrow function and pm.response.to.have.status [OK]
Common Mistakes:
Using function keyword without parentheses
Using pm.assert or pm.check which don't exist
Missing arrow function syntax
3. Given this Postman test code, what will be the test result if the response status is 404?
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');
});
medium
A. First test fails, second test may error or fail
B. Both tests pass
C. First test passes, second test fails
D. Both tests fail silently
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 A
Quick Check:
Status 404 breaks status test and risks JSON test failure [OK]
Hint: Check status first; wrong status can cause later test errors [OK]
Common Mistakes:
Assuming tests pass regardless of status
Ignoring possible JSON parse errors
Thinking tests fail silently without error
4. Identify the error in this Postman test script and fix it:
pm.test('Check user name', () => {
const data = pm.response.json;
pm.expect(data.name).to.eql('Alice');
});
medium
A. Use single quotes around 'Alice' instead of double quotes
B. Replace pm.expect with pm.assert
C. Remove arrow function and use regular function syntax
D. Change pm.response.json to pm.response.json()
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 D
Quick Check:
Call pm.response.json() as a function to parse JSON [OK]
Hint: Always call pm.response.json() with parentheses [OK]
Common Mistakes:
Forgetting parentheses on pm.response.json
Using pm.assert instead of pm.expect
Changing quotes unnecessarily
5. You want to write an advanced Postman test that checks if the response JSON array contains at least one object with "status" equal to "active" and "age" greater than 30. Which test script correctly handles this complex scenario?
hard
A. 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;
});
B. 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);
});
C. 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;
}
});
D. 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);
});
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 A
Quick Check:
Use some() to check any matching object [OK]
Hint: Use Array.some() to test if any item meets all conditions [OK]
Common Mistakes:
Checking properties on entire array instead of items
Testing all items instead of any item
Ignoring one of the conditions
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.