🚀 Added
- Coverage phase for GraphQL schemas.
response_schema_conformancechecks GraphQLdatafor missing, unrequested and mistyped fields.- Fuzzing unary gRPC methods through server reflection or descriptor sets.
- XML request bodies follow Open API 3.2
nodeType(attribute,element,text,cdata). - Cookie parameters follow Open API 3.2
style: cookie. response_schema_conformancechecks JSON Lines and JSON Text Sequence responses against Open API 3.2itemSchema.
🏎️ Performance
- Faster pytest collection with lower memory: coverage phase cases are built when a test runs.
🔧 Changed
- WFC reports declare report schema version
0.10.0, from WFC 0.13.0.
🐛 Fixed
Coverage phase
- Descriptions naming optional parameters the request does not send.
- Request body schemas modified when they declare
examples. nullvalues described as "Value null value".- Locations for tuple array negatives missing the item index.
- Valid optional
nullquery parameters sent asnullin cases targeting a sibling. - Values generated from
notschemas described by the inner schema's scenario. - Cases dropped when they differ only in their binary payload.
- Strings outside the configured
generation.codec. - Header and cookie values containing characters from
exclude-header-characters.
Data generation
- Crash when generating unique arrays of binary strings.
- Generated strings failing
patternwhen combined withminLength/maxLength. - Valid strings never generated for
patternwith optional or repeated parts combined with length bounds. - Open API 2.0 parameter
x-exampledrawn twice as often in fuzzing. - Example Objects in list-style
examplesused as the example itself. - Negative cookie values outside RFC 6265 cookie-octets, causing false
negative_data_rejectionfailures. - Open API 3.2 Example Objects with
dataValueorserializedValuesent as the example itself. - Example Objects referenced via
$refignored in bodies and responses, or crashing in external files. - Example Objects reached through
$refchains ignored, or sent as the$refobject itself.
Request serialization
- Objects and arrays inside header and query parameter values sent as Python repr.
xmlsettings ignored for schemas reached through$refchains or declared beside a$ref.- Reject unbound XML prefixes outside the element whose attribute declares their namespace.
- Serialize XML elements using a namespace prefix that a later sibling attribute declares.
- Malformed XML when a primitive or array schema's
xml.nameis not a valid XML name.
GraphQL
- Invalid
@oneOfinput objects in positive GraphQL tests. - Schema hooks applied twice to GraphQL stateful cases.
- GraphQL stateful phase crashing with
--generation-unique-inputs. - All GraphQL fields sharing the
[POST ]test id withschemathesis.pytest.from_fixture.
Schema loading
- Generic "Schema Error" message hiding why an operation failed to load.
- References to a relative
$idreported as unresolvable. - Unvalidated responses and false reference errors for a
$refrelative to the enclosing$id. - Unvalidated responses and false reference errors for
./or../references to a relative$id. - Internal error on a non-string
$refin path items, parameters, request bodies or responses. - Internal error on a numeric
openapiversion, such as an unquoted3.1in YAML. - Internal error on a Swagger 2.0 or Open API 3.0 schema without
paths. - Internal error or wrong schema shown for response failures inside schemas reached through
$dynamicRef. - False schema error for references inside nested schemas that declare their own
$id. - Response and request body schemas ignored when a nested
$idschema references its own$defs. - False schema error for Open API 3.1 response schemas with
prefixItemsor array-formitems. - Open API 3.2 media type objects behind
$refignored in data generation and response validation. - Internal error on a response
contentor media type that is not an object. - Internal error on a base URL or origin with a non-numeric or out-of-range port.
Checks
- False positive
ignored_authwhen an auth header's name case differs from the security scheme. - Response headers declared with
contentinstead ofschemanever validated byresponse_headers_conformance. - False positive
response_schema_conformancefor Open API 3.2 discriminators withdefaultMapping. - False positive
response_schema_conformancefor discriminator values pinned by the branch'senumorconst.
Authentication
- Token fetch cooldown failure reported twice in stateful testing.
- Expired auth tokens never refreshed in stateful testing,
st fuzzand pytest state machines. - Configured
proxyskipped by dynamic auth token requests, WFC login and loading schemas from URLs. - Dynamic auth token requests and WFC login waiting without limit when no request timeout is set.
Timeouts and outages
- Runs with
--max-timecontinuing after a request times out at the time limit. st fuzzhiding errors raised as the time limit is reached.- False
Network Errorwhen--max-timeruns out while a response body is still arriving. - False
Connection failedand unsupported API capabilities when a response body outlasts--request-timeout. - False
Connection failedwhen a schema response body outlasts the timeout. - Outage reports leading with hanging requests, repeating cut-off ones as network errors, with misleading tips.
- Outage reports omitting the request that crashed the server when it timed out.
st fuzzhiding the error of the request that crashed the server.
Test execution
st fuzzcrashing withdictionary changed size during iterationwhen auth is enforced.st fuzzignoring--generation-unique-inputs.- Operations reported as skipped, with no error shown, when an unexpected error crashes them.
- Stateful phase reported as skipped, with exit code 0, when an unexpected error crashes it.
- Stateful tests replaying scenarios saved in the example database for a different API.
- Runs with
--generation-unique-inputsspinning without requests until--max-timeonce inputs run out. - Occasional exit code 0 and skipped stateful phase after an
object_level_authorizationfailure.
Reporting
st replaynot finding a case ID after a later run records the same failure.- Failure and error headers missing separators for operation names as wide as the terminal.
- Repeated traceback frames for errors replayed under
--generation-unique-inputs. - Internal error and empty report files when enabling Allure reports without the
allureextra. - Test case summary counting errored and skipped cases as passed.
- Probe requests from checks counted as generated and skipped test cases.
- Per-operation
warningssettings ignored forrate_limited,missing_test_dataand other response warnings.