JSON value assertions help check if the data returned by an API is correct. They make sure the API works as expected.
JSON value assertions in Postman
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
Postman
pm.test("Test description", function () {
pm.expect(pm.response.json().key).to.eql(expectedValue);
});Use pm.response.json() to get the JSON response body.
pm.expect() is used to write assertions on values.
Examples
Postman
pm.test("Check user name", function () { pm.expect(pm.response.json().user.name).to.eql("Alice"); });
Postman
pm.test("Verify status is success", function () { pm.expect(pm.response.json().status).to.eql("success"); });
Postman
pm.test("Check product price", function () { pm.expect(pm.response.json().product.price).to.eql(19.99); });
Sample Program
This test checks three things: the user ID is 101, the user is active, and the user has the role "admin".
Postman
pm.test("Validate JSON response values", function () { const jsonData = pm.response.json(); pm.expect(jsonData.user.id).to.eql(101); pm.expect(jsonData.user.active).to.eql(true); pm.expect(jsonData.user.roles).to.include("admin"); });
Important Notes
Always check the exact path to the JSON value you want to assert.
Use to.eql() for exact matches and to.include() to check if an array contains a value.
Run tests in Postman's Test tab to see results clearly.
Summary
JSON value assertions verify API response data is correct.
Use pm.expect() with pm.response.json() to write assertions.
Assertions help catch errors early and keep APIs reliable.
Practice
1. What is the main purpose of JSON value assertions in Postman?
easy
Solution
Step 1: Understand JSON value assertions
JSON value assertions verify that the data returned by an API is correct and matches what is expected.Step 2: Identify the purpose in Postman
In Postman, assertions are used to check API responses, not to send requests or format data.Final Answer:
To check if the API response data matches expected values -> Option BQuick Check:
Assertions verify response data = A [OK]
Hint: Assertions check response data correctness fast [OK]
Common Mistakes:
- Confusing assertions with sending requests
- Thinking assertions format JSON
- Believing assertions create APIs
2. Which of the following is the correct syntax to assert that the JSON response has a key 'status' with value 'success' in Postman?
easy
Solution
Step 1: Identify correct assertion syntax in Postman
Postman uses pm.expect() with the JSON response accessed by pm.response.json(). The method to check equality is .to.eql()Step 2: Eliminate incorrect options
pm.expect(pm.response.json().status).to.eql('success'); correctly uses pm.expect(pm.response.json().status).to.eql('success'); The other options have syntax errors or incorrect usage such as wrong response reference, missing pm.expect, or invalid functions.Final Answer:
pm.expect(pm.response.json().status).to.eql('success'); -> Option CQuick Check:
pm.expect + pm.response.json() + .to.eql() = D [OK]
Hint: Use pm.expect with pm.response.json() and .to.eql() [OK]
Common Mistakes:
- Using == instead of .to.eql()
- Missing pm.expect wrapper
- Referencing response incorrectly
3. Given the following Postman test code:
What will happen if the API response JSON is
const jsonData = pm.response.json(); pm.expect(jsonData.user.id).to.eql(12345);
What will happen if the API response JSON is
{ "user": { "id": 12345, "name": "Alice" } }?medium
Solution
Step 1: Analyze the JSON response
The response JSON has user.id equal to the number 12345, which matches the expected value in the assertion.Step 2: Understand the assertion behavior
pm.expect().to.eql() compares values strictly but 12345 number matches 12345 number, so the assertion passes.Final Answer:
The test will pass because the user id matches 12345 -> Option AQuick Check:
Matching values = test passes = B [OK]
Hint: Check exact value and type in JSON for assertion [OK]
Common Mistakes:
- Assuming number vs string mismatch causes failure
- Confusing syntax error with assertion failure
- Ignoring actual JSON structure
4. You wrote this Postman test:
But the test always fails even when the API returns
pm.expect(pm.response.json().data).to.equal({"status": "active"});But the test always fails even when the API returns
{ "data": { "status": "active" } }. What is the likely problem?medium
Solution
Step 1: Understand difference between .to.equal() and .to.eql()
.to.equal() checks strict equality for primitives but can fail for objects or deep checks. .to.eql() is used for deep equality including strings and objects.Step 2: Identify the correct assertion for object value
Since 'data' is an object, .to.eql() is required for deep equality checks. Using .to.equal() performs strict reference equality (===), which fails for distinct object instances even if contents match.Final Answer:
The assertion should use .to.eql() for deep equality -> Option AQuick Check:
Use .to.eql() for object equality in JSON assertions [OK]
Hint: Use .to.eql() for JSON value assertions, not .to.equal() [OK]
Common Mistakes:
- Confusing .to.equal() and .to.eql()
- Assuming JSON parsing failed
- Missing pm.response.json() call
5. You want to assert that the API response JSON contains an array 'items' where each item has a 'price' greater than 0. Which Postman test code correctly checks this?
hard
Solution
Step 1: Understand the requirement
We need to check that every item in the 'items' array has a 'price' greater than 0.Step 2: Analyze each option
pm.expect(pm.response.json().items.every(item => item.price > 0)).to.be.true; uses JavaScript's every() method to check all items satisfy price > 0, then asserts true. This is correct.
pm.expect(pm.response.json().items).to.have.property('price').above(0); incorrectly tries to check property on array directly.
pm.expect(pm.response.json().items.price).to.be.above(0); tries to access items.price which is invalid since items is an array.
pm.expect(pm.response.json().items.filter(price > 0)).to.not.be.empty; uses filter incorrectly without a function.Final Answer:
pm.expect(pm.response.json().items.every(item => item.price > 0)).to.be.true; -> Option DQuick Check:
Use every() with pm.expect to check all array items [OK]
Hint: Use .every() to assert all array items meet condition [OK]
Common Mistakes:
- Trying to access property on array directly
- Using filter without a function
- Misusing assertion methods on arrays
