🚀 Added
- Dynamic token authentication support for OAuth2 and OpenID Connect security schemes.
- Reactive auth refresh: refetch the token and replay a request on configured statuses (
auth.dynamic.openapi.<scheme>.retry-on,@schemathesis.auth(retry_on=[401])).
🐛 Fixed
- Report dynamic authentication token-fetch failures without duplicated text or an internal traceback.
- Explain
401/403responses from a dynamic authentication token endpoint as rejected credentials. - Crash
dictionary changed size during iterationwith multiple workers under free-threaded Python. - Crash on schemas embedding a JSON Schema resource that declares its own
$schemadialect. - False positive
positive_data_acceptancefor required array query parameters generated as empty. - False positive
negative_data_rejectionfor body schemas withadditionalProperties: false. #4332 - Generation error for request bodies with
prefixItemsin OpenAPI 3.1 schemas. - Crash
Cannot sample from a length-zero sequencefor arrayitemswith an emptyenum. - False positive
positive_data_acceptancefor arrayitemswithenumentries violating the item schema. - Undercounted stateful link totals for schemas sharing a response definition across operations.
- Operations with unresolvable
$refs silently skipped when dependency ordering applies. - False
missing_deserializerwarning for media types whose own schema is unstructured. - Skip reasons in the summary borrowed from operations that were tested in another phase.
🔧 Changed
- Configuration errors shown without a traceback, under a
Configuration Errorheading. - Group the
missing_deserializerwarning by media type, one line per operation. - Report why operations were skipped: disabled phases, failure limit, interruption, or time limit.