When i request for GET request, I’m getting the JSON response, but here my requirement is to validate the structure of response body.
For example:
{
"lotto":{
"lottoId":5,
"winning-numbers":[2,45,34,23,7,5,3],
"winners":[
{
"winnerId":23,
"numbers":[2,45,34,23,3,5]
},
{
"winnerId":54,
"numbers":[52,3,12,11,18,22]
}
]
}
}
The above response having structure, so i need to validate structure instead of one key value pair, how i can achieve this?
Advertisement
Answer
The best way is to verify json-schema matching.
Firstly, you need to add this dependency to your pom.xml
<!-- https://mvnrepository.com/artifact/io.rest-assured/json-schema-validator -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>3.3.0</version>
<scope>test</scope>
</dependency>
Then you need to create a file json-schema-your-name.json with structure like that:
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"flow_id": {
"type": "string",
"minLength": 36,
"maxLength": 36
},
"flow_org_id": {
"type": "string"
}
},
"required": [ "flow_id", "flow_org_id" ]
}
}
}
}
There are a bunch of services which generate schemas based on json – eg – this one
Once schema file is ready, you need to provide a path to your file in a String format – eg –
private static final String GET_SUBSCRIPTION_JSON_SCHEMA_PATH =
"json/schemas/GetSubscriptionByIdSchema.json";
And invoke matchesJsonSchemaInClasspath("your/path/to/json-schema")
method for assertion.
UPD:
So the flow will basically be like:
- you have a schema file somewhere in project dir (and know its path)
- you hit the endpoint in some test method
- you match the response you’ve received with the schema file
Practically, it will look following:
@Test
public void someTestMethod() {
Response responseToValidate = // here you should assign and store returned response
responseToValidate
.assertThat()
.statusCode(200)
.body("json.path.to.needed.key", equalTo("123"))
.body(matchesJsonSchemaInClasspath(“path/to/your/schema/in/string/format”)); }