Testing pagination in Postman - Build an Automation Script
pm.test('Status code is 200 for page 1', () => { pm.response.to.have.status(200); }); const jsonData = pm.response.json(); pm.test('Response has 5 items for page 1', () => { pm.expect(jsonData.items.length).to.eql(5); }); // Store total items count for later use pm.environment.set('totalItems', jsonData.total); // Store items from page 1 for comparison pm.environment.set('page1Items', JSON.stringify(jsonData.items)); // Calculate last page const limit = 5; const totalItems = pm.environment.get('totalItems'); const lastPage = Math.ceil(totalItems / limit); pm.environment.set('lastPage', lastPage); // Additional tests for page 2 and last page should be in separate requests using these variables // Example test for page 2 (to be run in a separate request): /* pm.test('Status code is 200 for page 2', () => { pm.response.to.have.status(200); }); const page2Data = pm.response.json(); pm.test('Response has 5 items for page 2', () => { pm.expect(page2Data.items.length).to.eql(5); }); const page1Items = JSON.parse(pm.environment.get('page1Items')); const page2Items = page2Data.items; pm.test('No duplicate items between page 1 and page 2', () => { const page1Ids = page1Items.map(item => item.id); const page2Ids = page2Items.map(item => item.id); const duplicates = page2Ids.filter(id => page1Ids.includes(id)); pm.expect(duplicates.length).to.eql(0); }); */ // Tests for invalid page and limit values: pm.test('Status code is 400 for invalid page 0', () => { pm.response.to.have.status(400); }); pm.test('Status code is 400 for invalid limit 0', () => { pm.response.to.have.status(400); });
This Postman test script checks the API pagination step-by-step.
First, it verifies the status code is 200 for a valid page 1 request.
Then it checks that exactly 5 items are returned as expected.
It saves the total number of items and the items from page 1 in environment variables for later use.
It calculates the last page number based on total items and limit.
Additional tests for page 2 and last page are shown as comments because they should be run in separate requests using the saved variables.
It also includes tests for invalid page and limit values expecting a 400 error status.
This approach uses best practices like pm.expect assertions, environment variables for sharing data between requests, and clear test names.
Now add data-driven testing with 3 different page and limit combinations to verify pagination works for various inputs
Practice
Solution
Step 1: Understand pagination purpose
Pagination testing ensures users can move through pages and see correct data on each page.Step 2: Identify key verification points
We check page numbers, item counts, and total items to confirm correct navigation.Final Answer:
To verify that users can navigate through pages and see correct data counts -> Option AQuick Check:
Pagination = navigation + correct data [OK]
- Confusing pagination with sorting
- Focusing only on response time
- Ignoring total item count
Solution
Step 1: Access response JSON correctly
Use pm.response.json() to parse the response body as JSON.Step 2: Use correct assertion syntax
pm.expect(...).to.eql(3) checks if the page value equals 3.Final Answer:
pm.test('Page is 3', () => pm.expect(pm.response.json().page).to.eql(3)); -> Option CQuick Check:
Use pm.response.json() + pm.expect() [OK]
- Using undefined variables like response or json
- Accessing pm.response.page directly
- Using to.equal instead of to.eql in Postman
pm.test('Check page and items', () => {
const json = pm.response.json();
pm.expect(json.page).to.eql(2);
pm.expect(json.data.length).to.eql(json.per_page);
pm.expect(json.total).to.be.above(10);
});Solution
Step 1: Check page number assertion
json.page is 2, expected 2, so this passes.Step 2: Check data length equals per_page
json.data.length is 5, json.per_page is 5, so this passes.Step 3: Check total is above 10
json.total is 12, which is above 10, so this passes.Final Answer:
All tests pass -> Option DQuick Check:
All assertions true = pass [OK]
- Assuming total must equal per_page
- Confusing page number with index
- Ignoring data array length
pm.test('Page is 1', () => {
const json = pm.response.json();
pm.expect(json.page).to.equal(1);
});
The response JSON is {"page":1,"per_page":10,"total":50}. What is the likely error?Solution
Step 1: Check assertion method
to.equal and to.eql behave similarly for primitives; this is not the cause.Step 2: Verify response JSON keys
Response has page key with value 1, so JSON access is correct.Step 3: Consider response mismatch
If test fails, likely the actual response page value differs or test runs on wrong response.Final Answer:
The assertion syntax is correct; failure is due to response mismatch -> Option AQuick Check:
Assertion syntax correct; check response data [OK]
- Confusing to.equal and to.eql for primitives
- Assuming JSON parsing failed
- Ignoring actual response content
Solution
Step 1: Calculate last page number
Last page = ceiling of total / per_page = ceil(23/5) = 5.Step 2: Calculate expected items on last page
Items on last page = total % per_page = 23 % 5 = 3 (if 0, use per_page).Step 3: Verify page number and data length
Check json.page equals lastPage and json.data.length equals expected items.Final Answer:
pm.test('Last page check', () => { const json = pm.response.json(); const lastPage = Math.ceil(json.total / json.per_page); pm.expect(json.page).to.eql(lastPage); pm.expect(json.data.length).to.eql(json.total % json.per_page || json.per_page); }); -> Option BQuick Check:
Last page = ceil(total/per_page), items = remainder or per_page [OK]
- Using division without ceiling for last page
- Expecting full per_page items on last page always
- Confusing modulo result with page number
Ready to prove it?
Pass the test and this pattern moves unknown
