Skip to content

Request Body Schema Validation Tests

This guide explains how OpenAPI Test Generator creates negative tests for request bodies and how to run and inspect the generated output.

Types of Request Body Tests

The generator produces two categories of request body tests:

Category Provider Expected Status When Generated
Missing required body MissedRequiredRequestBodyTestProvider 400 When requestBody.required: true
Schema violations RequestBodySchemaValidationTestProvider 400 When request body schemas have constraints

Provider vs rule in output

The missing-body case is created by MissedRequiredRequestBodyTestProvider, so the rule field contains that provider class. For schema violations, the provider applies schema rules, so the rule field contains a rule class name (for example, MissedRequiredObjectPropertiesSchemaValidationRule), not the provider name.

Example OpenAPI Spec

From samples/openapi.yaml:

paths:
    /orders:
        post:
            operationId: createOrder
            requestBody:
                required: true
                content:
                    application/json:
                        schema:
                            $ref: '#/components/schemas/NewOrder'

Schema excerpt:

components:
    schemas:
        OrderItem:
            type: object
            required: [ sku, quantity, price ]
            additionalProperties: false
            properties:
                sku: { type: string }
                quantity: { type: integer, minimum: 1 }
                price: { type: number, minimum: 0 }
        NewOrder:
            type: object
            required: [ userId, items ]
            additionalProperties: false
            properties:
                userId: { type: string }
                items:
                    type: array
                    minItems: 1
                    items: { $ref: '#/components/schemas/OrderItem' }

Missing Required Request Body

When requestBody.required: true, the generator emits a single test case that omits the body entirely. Excerpt from samples/java-spring-file-writer/src/test/resources/openapi-test-suites.json:

{
    "name": "Required Request Body is missing",
    "method": "POST",
    "path": "/orders",
    "headers": [
        {
            "key": "X-API-Key",
            "value": "test-api-key-123"
        }
    ],
    "body": null,
    "expectedBody": {
        "code": "bad_request",
        "message": "Invalid input"
    },
    "expectedStatusCode": 400,
    "rule": "art.galushko.openapi.testgen.providers.body.MissedRequiredRequestBodyTestProvider"
}

Expected body

The expectedBody field comes from the default error response defined in samples/openapi.yaml. Your actual error responses will vary based on your API's error schema.

Schema Constraint Violations

RequestBodySchemaValidationTestProvider applies schema rules to the resolved body schema and generates tests for each constraint violation. Fixture-backed examples for createOrder:

  • Incorrect Request Body: Missed Required Object Properties items
    Body: {"userId":"a"}
    Rule: MissedRequiredObjectPropertiesSchemaValidationRule
  • Incorrect Request Body: Missed Required Object Properties userId
    Body: {"items":[{"price":0,"quantity":1,"sku":"a"}]}
    Rule: MissedRequiredObjectPropertiesSchemaValidationRule
  • Incorrect Request Body: Object Property items Below Min Items Array
    Body: {"items":[],"userId":"a"}
    Rule: ObjectItemSchemaValidationRule
  • Incorrect Request Body: Object Property items Array Item Object Property price Out Of Minimum Boundary Number
    Body: {"items":[{"price":-1,"quantity":1,"sku":"a"}],"userId":"a"}
    Rule: ObjectItemSchemaValidationRule

Excerpt showing a nested array item violation:

{
    "name": "Incorrect Request Body: Object Property items Array Item Object Property price Out Of Minimum Boundary Number",
    "method": "POST",
    "path": "/orders",
    "headers": [
        {
            "key": "X-API-Key",
            "value": "test-api-key-123"
        }
    ],
    "body": {
        "items": [
            {
                "price": -1,
                "quantity": 1,
                "sku": "a"
            }
        ],
        "userId": "a"
    },
    "expectedBody": {
        "code": "bad_request",
        "message": "Invalid input"
    },
    "expectedStatusCode": 400,
    "rule": "art.galushko.openapi.testgen.rules.composed.ObjectItemSchemaValidationRule"
}

Fixture source: samples/java-spring-file-writer/src/test/resources/openapi-test-suites.json.

Inspecting Output

# Missing request body cases
jq '.. | objects | select(.name? | strings | contains("Required Request Body is missing"))' \
  generated/test-suites.json

# Request body schema violations
jq '.. | objects | select(.name? | strings | startswith("Incorrect Request Body"))' \
  generated/test-suites.json

Media Type Behavior

Request body validation uses the first supported media type from Consts.supportedMediaTypes (application/json, application/xml, application/x-www-form-urlencoded). If your request body only defines unsupported media types, no request body tests are generated.

Budget Controls for Complex Schemas

Deep or highly nested schemas can generate many test cases. Use budget settings to control test volume:

testGenerationSettings:
    maxSchemaDepth: 50
    maxMergedSchemaDepth: 50
    maxSchemaCombinations: 100
    maxTestCasesPerOperation: 1000

See Budget controls for details.

Filtering Request Body Tests

Test case name lists require exact matches (wildcards are not evaluated).

Exclude specific request body tests

testGenerationSettings:
    ignoreTestCases:
        "/orders":
            "POST":
                - "Required Request Body is missing"
                - "Incorrect Request Body: Missed Required Object Properties items"
                - "Incorrect Request Body: Object Property items Below Min Items Array"

Target only request body operations

Use Include Operations to scope generation:

testGenerationSettings:
    includeOperations:
        "/orders":
            - POST

Disable a specific schema rule

testGenerationSettings:
    ignoreSchemaValidationRules:
        - art.galushko.openapi.testgen.rules.schema.MissedRequiredObjectPropertiesSchemaValidationRule

Schema rules are shared

Ignoring a schema rule affects request bodies and parameters. If you disable a rule, its tests will disappear everywhere it applies.

Applicable Rules

Request bodies can trigger the same schema rules as parameters. For nested objects and arrays, the rule field contains a composed rule class that wraps the underlying simple rule.

Constraint Simple Rule Composed Rule (nested)
Missing required property MissedRequiredObjectPropertiesSchemaValidationRule ObjectItemSchemaValidationRule
minItems / maxItems BelowMinItemsArraySchemaValidationRule / AboveMaxItemsArraySchemaValidationRule ObjectItemSchemaValidationRule
minimum / maximum OutOfMinimumBoundaryNumberSchemaValidationRule / OutOfMaximumBoundaryNumberSchemaValidationRule ObjectItemSchemaValidationRule
Wrong primitive type InvalidTypeValidationRule ObjectItemSchemaValidationRule
Integer constraints IntegerBreakingSchemaValidationRule ObjectItemSchemaValidationRule
String length OutOfMinimumLengthStringSchemaValidationRule / OutOfMaximumLengthStringSchemaValidationRule ObjectItemSchemaValidationRule
format: email WrongEmailFormatSchemaValidationRule ObjectItemSchemaValidationRule
format: uuid WrongUuidFormatSchemaValidationRule ObjectItemSchemaValidationRule
Invalid enum value InvalidEnumValueSchemaValidationRule ObjectItemSchemaValidationRule
Invalid pattern InvalidPatternSchemaValidationRule (pattern-support module) ObjectItemSchemaValidationRule