NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2283 most downloaded on PyPI
Adaptive API testing for OpenAPI and GraphQL
Last release today
04 Oct 2026
Ships fairly regularly
a new release about every 1 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
490 releases · first in 2019
### :bug: Fixed - Packaging issue
Storing network logs with --store-network-log= . The stored cassettes are based on the VCR format and contain extra information from the Schemathesis
--store-network-log=<filename.yaml>. The
stored cassettes are based on the VCR
format
and contain extra information from the Schemathesis internals. #379response_time target at the moment. #104--junit-xml=<filename.xml>. #427body is defined as
{"type": "string"}. #521jsonschema errors during input
schema validation. #513response_schema_conformance check. Because of
this change, Endpoint.definition contains a definition where
references are not resolved. In this way, it makes it possible to
avoid recursion errors in jsonschema validation. #468SUMMARY CLI block.One column per quarter.
Per-test hooks for modification of data generation strategies. #492
Support for custom loaders in runner. Now all built-in loaders are supported as an argument to runner.prepare. #496
Mistakenly applied Open API -\> JSON Schema Draft 7 conversion. It should be Draft 4. #489
Response schema check for recursive schemas. #468
runner. Now it accepts application as an importable
string, rather than an instance. It is done to make it possible to
execute a runner in a subprocess. Otherwise, apps can't be easily
serialized and transferred into another process.BaseSchema, Endpoint or similar
objects that may calculate data dynamically. This is done to make
events serializable and not tied to Python object, which decouples
any runner consumer from implementation details. It will help make
runner usable in more cases (e.g., web application) since events
can be serialized to JSON and used in any environment. Another
related change is that Python exceptions are not propagated
anymore - they are replaced with the InternalError event that
should be handled accordingly.Open API 3. Handling of endpoints that contain multipart/form-data media types. Previously only file upload endpoints were working correctly. #473
multipart/form-data
media types. Previously only file upload endpoints were working
correctly. #473OpenApi30.get_content_types behavior, introduced in 8aeee1a. #469
Precedence of produces keywords for Swagger 2.0 schemas. Now, operation-level produces overrides schema-level produces as specified in the specificati
Pytest 5.4 warning about deprecated Node initialization usage. #451
Processing of explicit examples in Open API 3.0 when there are multiple parameters in the same location (e.g. path) contain example value. They are pr
path) contain
example value. They are properly combined now. #450Move processing of runner parameters to runner.prepare. This change will provide better code reuse since all users of runner (e.g., if you extended it
runner parameters to runner.prepare. This
change will provide better code reuse since all users of runner
(e.g., if you extended it in your project) need some kind of input
parameters handling, which was implemented only in Schemathesis CLI.
It is not backward-compatible. If you didn't use runner directly,
then this change should not have a visible effect on your use-case.Deprecated runner.execute. Use runner.prepare instead.
x-* custom properties. #448runner.execute. Use runner.prepare instead.Deprecated Parametrizer class. Use schemathesis.from_path as a replacement for Parametrizer.from_path.
Deprecated
runner.execute should not be used, since runner.prepare provides
a more flexible interface to test execution.Parametrizer class. Use schemathesis.from_path as a
replacement for Parametrizer.from_path.Limit recursion depth while resolving JSON schema to handle recursion without breaking. #435
Filter problematic path template variables containing "/", or "%2F" url encoded. #440
### :wrench: Changed - Allow werkzeug \>= 1.0.0. #433
werkzeug >= 1.0.0. #433Handling of explicit examples from schemas. Now, if there are examples for multiple locations (e.g., for body and query) then they will be combined in
Error during pytest collection on objects with custom __getattr__ method and therefore pass is_schemathesis check. #429
pytest collection on objects with custom
__getattr__ method and therefore pass is_schemathesis check. #429Resolving references when the schema is loaded from a file on Windows. #418
Not copied validate_schema parameter in BaseSchema.parametrize. Regression after implementing #383
Crash on invalid regular expressions in method, endpoint and tag CLI options. #403
method, endpoint and
tag CLI options. #403auth CLI option. #404header CLI option. #405schema CLI option. #406--request-timeout parameter. #407--hypothesis-deadline=0 CLI option. #410--hypothesis-max-examples=0 CLI option. #412CLI crash on Windows and Python \< 3.8 when the schema path contains characters unrepresentable at the OS level. #400
Support for testing of examples in Parameter & Media Type objects in Open API 3.0. #394
--show-error-tracebacks CLI option to display errors' tracebacks
in the output. #391--validate-schema=false for example).
The use-case is for tools like ElasticSearch that use GET requests
with non-empty bodies. #383-x/--exitfirst CLI option to exit after the first failed test. #378
all variant for --checks CLI option to use all available checks. #374
Generation of invalid values in Case.cookies. #371
Case.cookies. #371Converting exclusiveMinimum & exclusiveMaximum fields to JSON Schema. #367
exclusiveMinimum & exclusiveMaximum fields to JSON
Schema. #367Filter out surrogate pairs from the query string.
Prevent KeyError when the response does not have the "Content-Type" header. #365
KeyError when the response does not have the
"Content-Type" header. #365Dockerfile entrypoint was not working as per docs. #361
Hooks for strategy modification. #313
Show multiple found failures in the CLI output. #266 & #207
None as a value for --hypothesis-deadline. #349Case.call. #350Case instead of TestResult. The error was didn't affect built-in
checks since both Case and TestResult had endpoint attribute,
and only it was used. However, this fix is not backward-compatible
with 3rd party checks.Support for AioHTTP applications in CLI. #329
Compatibility with the latest release of hypothesis-jsonschema and setting its minimal required version to 0.9.13. #338
hypothesis-jsonschema and
setting its minimal required version to 0.9.13. #338Handling nullable attribute in Open API schemas. #335
nullable attribute in Open API schemas. #335Usage of the response status code conformance check with old requests version. #330
requests version. #330Response schema conformance check for Open API 3.0. #332
Support for response code ranges. #330
Case.validate_response for running built-in checks against app's response. #319
Case.validate_response for running built-in checks against app's
response. #319Case instance as a second argument instead of
TestResult. This was done for making checks usable in Python tests
via Case.validate_response. Endpoint and schema are accessible via
case.endpoint and case.endpoint.schema.Compatibility with Hypothesis \>= 4.53.2. #322
Concurrent test execution in CLI / runner. #91
Validation of the base-url CLI parameter. #311
base-url CLI parameter. #311Resolving references in PathItem objects. #301
Resolving references that point to different files. #294
Display RNG seed in the CLI output to allow test reproducing. #267
requests.get call in
loaders.from_uri.Support for OpenAPI 3.0 server variables (base_path). #40
format: byte. #254schemathesis.register_check. #270CLI: Support file paths in the schema argument. #119
IndexError when Hypothesis found inconsistent test results during the test execution in the runner. #236
IndexError when Hypothesis found inconsistent test results during
the test execution in the runner. #236Error that happens when there are no success checks in the statistic in CLI. #237
An option to configure request timeout for CLI / Runner. #204
formData parameters in Case.call. #196Case.call. #211Wrong handling of the base_url parameter in runner and Case.call if it has a trailing slash. #194 and #199
Handling for errors other than AssertionError and HypothesisException in the runner. #189
Display progress during the CLI run. #125
LazySchema accepts filters. #149
runner module to improve control
over the execution flow.base_url argument in Case.call is
optional in such cases. #153--auth option.file:// URI schemaSupport for Hypothesis settings in CLI & Runner. #107
Test executor collects results of execution. #29
--base-url for specifying base URL of API. #118schemathesis run prints result in a more readable way
with a summary of passing checks.example
non-interactively. #92Wrap each test in suppress so the runner doesn't stop after the first test failure.
suppress so the runner doesn't stop after the
first test failure.CLI tool invoked by the schemathesis command. #30
### :bug: Fixed - Filtration in lazy loaders.
Your coding agent can read these notes before it upgrades. Set up the MCP server →