Complex schema validation in Karate

Viewed 350

I'm trying to validate the response schema with karate but facing issue with array. Attaching the response and feature as well as my schema.json.

Response -

{
"page": 1,
"per_page": 6,
"total": 12,
"total_pages": 2,
"data": [
    
    {
        "id": 3,
        "email": "emma.wong@reqres.in",
        "first_name": "Emma",
        "last_name": "Wong",
        "avatar": "https://reqres.in/img/faces/3-image.jpg"
    },
    {
        "id": 4,
        "email": "eve.holt@reqres.in",
        "first_name": "Eve",
        "last_name": "Holt",
        "avatar": "https://reqres.in/img/faces/4-image.jpg"
    },
    {
        "id": 5,
        "email": "charles.morris@reqres.in",
        "first_name": "Charles",
        "last_name": "Morris",
        "avatar": "https://reqres.in/img/faces/5-image.jpg"
    },
    {
        "id": 6,
        "email": "tracey.ramos@reqres.in",
        "first_name": "Tracey",
        "last_name": "Ramos",
        "avatar": "https://reqres.in/img/faces/6-image.jpg"
    }
],
"support": {
    "url": "https://reqres.in/#support-heading",
    "text": "To keep ReqRes free, contributions towards server costs are appreciated!"
}

}

 Scenario: Get all Users and validate schema
    Given url getUrl
    When method Get
    Then status 200
    And print response
    Then match response == '#object'
    * string jsonSchemaExpected = read('file:src/test/resources/features/sample/responseSchema.json')
    And print response.data.length 
    And match response == jsonSchemaExpected

responseSchema.json

{ "page": "#number", "per_page": "#number", "total": "#number", "total_pages": "#number", "data": "#[] #object", "support": "#object" }

1 Answers

The only observation I have is if you cast to a string, you won't be able to do any matching.

Instead of * string jsonSchemaExpected do * def jsonSchemaExpected.

Related