What is JSON Schema?
- JSON Schema is a specification that defines the structure of a JSON document.
- It is used to validate that a given JSON response (or request) follows a predefined format.
- Data types (string, number, object, array, boolean, null)
- Required vs optional fields
- Field constraints (min/max length, patterns, ranges, enum values, etc.)
- Nested objects and arrays
- To check that API responses always follow the contract agreed between client and server.
- To avoid breaking changes when backend updates occur.
- To make automated testing more robust and reliable.
- Create a .json file that defines the expected schema of the API response.
- Example: define required fields, their data types, and structure.
- Rest Assured integrates with the json-schema-validator library, which enables schema-based validation.
- Perform a request (GET/POST/etc.) to get the API response.
- Use Rest Assured’s built-in schema validator methods to check whether the actual JSON response matches the schema.
- If the response matches → test passes.
- If not → test fails with details about what part of the schema is violated.
To validate a JSON schema using Rest Assured in a GET API response, you can use the JsonSchemaValidator provided by Rest Assured. It helps ensure that the structure of the JSON returned from the API matches an expected schema.
Steps to Use JSON Schema Validation in Rest Assured
1. Add Dependencies
<dependencies> <!-- Rest Assured --> <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <version>5.4.0</version> <scope>test</scope> </dependency> <!-- JSON Schema Validator --> <dependency> <groupId>io.rest-assured</groupId> <artifactId>json-schema-validator</artifactId> <version>5.4.0</version> <scope>test</scope> </dependency> </dependencies>
users-schema.json for GET API: https://reqres.in/api/users?page=2 and placed in the src/test/resources directory.{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "page": { "type": "integer" }, "per_page": { "type": "integer" }, "total": { "type": "integer" }, "total_pages": { "type": "integer" }, "data": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "integer" }, "email": { "type": "string" }, "first_name": { "type": "string" }, "last_name": { "type": "string" }, "avatar": { "type": "string" } }, "required": ["id", "email", "first_name", "last_name", "avatar"] } }, "support": { "type": "object", "properties": { "url": { "type": "string" }, "text": { "type": "string" } }, "required": ["url", "text"] } }, "required": ["page", "per_page", "total", "total_pages", "data", "support"] }
import io.restassured.RestAssured; import io.restassured.http.ContentType; import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath; import static io.restassured.RestAssured.*; public class JsonSchemaValidationTest { public static void main(String[] args) { RestAssured.baseURI = "https://reqres.in"; given() .contentType(ContentType.JSON) .when() .get("/api/users?page=2") .then() .assertThat() .statusCode(200) .body(matchesJsonSchemaInClasspath("users-schema.json")); System.out.println("Schema validated successfully."); } }
Suggested Posts:
1. Test Preemptive Authentication in RestAssured
2. Test Form Authentication in RestAssured
3. Test DELETE API in RestAssured
4. Validate Response by Matchers API in RestAssured
5. Validate API Response from Database in RestAssured