schemathesis 3.20.0__tar.gz → 3.20.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- schemathesis-3.20.1/.github/ISSUE_TEMPLATE/bug_report.md +47 -0
- schemathesis-3.20.1/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- schemathesis-3.20.1/.github/PULL_REQUEST_TEMPLATE.md +12 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.pre-commit-config.yaml +6 -6
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.readthedocs.yml +5 -1
- {schemathesis-3.20.0 → schemathesis-3.20.1}/PKG-INFO +1 -1
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/changelog.rst +11 -1
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/index.rst +0 -1
- schemathesis-3.20.1/docs/service.rst +44 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/pyproject.toml +1 -1
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/cli/callbacks.py +23 -15
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/test_commands.py +14 -13
- schemathesis-3.20.0/.github/ISSUE_TEMPLATE/bug_report.md +0 -43
- schemathesis-3.20.0/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
- schemathesis-3.20.0/.github/PULL_REQUEST_TEMPLATE.md +0 -12
- schemathesis-3.20.0/docs/introduction.rst +0 -28
- schemathesis-3.20.0/docs/service.rst +0 -153
- schemathesis-3.20.0/img/service_api_created.png +0 -0
- schemathesis-3.20.0/img/service_api_form.png +0 -0
- schemathesis-3.20.0/img/service_no_apis_yet.png +0 -0
- schemathesis-3.20.0/img/service_non_conforming_response.png +0 -0
- schemathesis-3.20.0/img/service_run_results.png +0 -0
- schemathesis-3.20.0/img/service_server_error.png +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.dockerignore +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.github/FUNDING.yml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.github/workflows/build.yml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.github/workflows/codeql-analysis.yml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.github/workflows/commit.yml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.github/workflows/example-build.yml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.github/workflows/example-no-build.yml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.github/workflows/master_update.yml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.github/workflows/release.yml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.github/workflows/scheduled.yml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.gitignore +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.gitmodules +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.relint.yml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.rstcheck.cfg +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/.yamllint +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/CITATION.cff +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/CODE_OF_CONDUCT.md +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/CONTRIBUTING.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/Dockerfile +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/Dockerfile.buster +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/LICENSE +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/README.md +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/changelog.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/Makefile +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/api.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/auth.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/cli.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/compatibility.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/conf.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/continuous_integration.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/contrib.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/examples.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/experimental.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/extending.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/faq.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/graphql.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/how.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/python.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/recipes.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/requirements.txt +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/sanitizing.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/stateful.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/docs/targeted.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/Dockerfile +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/README.rst +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/app/app.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/app/db.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/app/models.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/app/openapi.yaml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/app/validation.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/app/views.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/database/schema.sql +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/docker-compose.yml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/main.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/requirements.in +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/requirements.txt +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/test/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/test/conftest.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/test/hooks.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/example/test/test_app.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/img/demo.gif +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/img/service_github_report.png +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/mypy.ini +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/_compat.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/_hypothesis.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/_xml.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/auths.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/checks.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/cli/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/cli/cassettes.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/cli/constants.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/cli/context.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/cli/debug.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/cli/handlers.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/cli/junitxml.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/cli/options.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/cli/output/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/cli/output/default.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/cli/output/short.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/cli/sanitization.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/code_samples.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/constants.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/contrib/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/contrib/openapi/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/contrib/openapi/formats/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/contrib/openapi/formats/uuid.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/contrib/unique_data.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/exceptions.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/experimental/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/extra/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/extra/_aiohttp.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/extra/_flask.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/extra/_server.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/extra/pytest_plugin.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/failures.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/filters.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/fixups/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/fixups/fast_api.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/fixups/utf8_bom.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/graphql.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/hooks.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/internal.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/lazy.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/loaders.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/models.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/parameters.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/py.typed +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/runner/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/runner/events.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/runner/impl/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/runner/impl/core.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/runner/impl/solo.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/runner/impl/threadpool.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/runner/serialization.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/sanitization.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/schemas.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/serializers.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/service/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/service/auth.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/service/ci.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/service/client.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/service/constants.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/service/events.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/service/hosts.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/service/metadata.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/service/models.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/service/report.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/service/serialization.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/service/usage.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/graphql/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/graphql/loaders.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/graphql/nodes.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/graphql/scalars.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/graphql/schemas.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/_hypothesis.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/checks.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/constants.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/converter.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/definitions.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/examples.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/expressions/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/expressions/context.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/expressions/errors.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/expressions/lexer.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/expressions/nodes.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/expressions/parser.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/filters.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/links.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/loaders.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/negative/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/negative/mutations.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/negative/types.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/negative/utils.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/parameters.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/references.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/schemas.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/security.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/serialization.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/stateful/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/stateful/links.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/utils.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/specs/openapi/validation.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/stateful.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/targets.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/throttling.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/types.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/src/schemathesis/utils.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/_graphql/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/_graphql/_fastapi/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/_graphql/_fastapi/app.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/_graphql/_flask/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/_graphql/_flask/app.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/_graphql/schema.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/openapi/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/openapi/_aiohttp/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/openapi/_aiohttp/app.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/openapi/_aiohttp/handlers.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/openapi/_fastapi/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/openapi/_fastapi/app.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/openapi/_flask/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/openapi/_flask/app.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/apps/openapi/schema.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/auth/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/auth/conftest.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/auth/test_cli.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/auth/test_provider.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/auth/test_pytest.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/cert.pem +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/conftest.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/output/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/output/test_default.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/test_asgi.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/test_callbacks.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/test_cassettes.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/test_checks.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/test_crashes.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/test_hooks.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/test_junitxml.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/test_options.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/cli/test_targeted.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/code_samples/conftest.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/code_samples/test_curl.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/code_samples/test_python.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/conftest.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/contrib/openapi/formats/test_uuid.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/contrib/test_install.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/contrib/test_unique_data.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/data/petstore_v2.yaml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/data/petstore_v3.yaml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/data/simple_openapi.yaml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/data/simple_swagger.yaml +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/experimental/conftest.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/experimental/test_experiments.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/experimental/test_openapi_3_1.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/extra/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/extra/test_aiohttp.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/filters/test_matching.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/hooks/test_filter_operations.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/hooks/test_hooks.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/loaders/conftest.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/loaders/test_common.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/loaders/test_graphql.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/loaders/test_openapi.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/runner/test_checks.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/runner/test_events.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/runner/test_runner.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/service/__init__.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/service/conftest.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/service/test_auth.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/service/test_ci.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/service/test_cli.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/service/test_report.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/service/test_serialization.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/service/test_usage.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/graphql/test_basic.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/graphql/test_custom_scalars.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/graphql/test_pytest.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/conftest.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/parameters/test_forms.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/parameters/test_non_payload.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/parameters/test_simple_payloads.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/test_examples.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/test_expressions.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/test_hypothesis.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/test_links.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/test_negative.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/test_openapi_checks.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/test_parameters.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/test_schemas.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/test_security.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/test_serializing.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/test_stateful.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/test_utils.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/specs/openapi/test_validation.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_app.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_asgi.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_async.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_common_parameters.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_converter.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_dereferencing.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_direct_access.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_errors.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_examples.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_filters.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_fixups.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_hypothesis.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_internal.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_lazy.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_models.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_package.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_parameters.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_parametrization.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_petstore.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_pytest.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_rate_limit.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_recoverable_errors.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_required.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_sanitizing_output.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_schemas.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_serialization.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_stateful.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_unittest.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_utils.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_wsgi.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/test_yaml.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test/utils.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test-corpus/flaky.json +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test-corpus/incompatible_enums.json +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test-corpus/incompatible_regex.json +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test-corpus/incomplete_azure.json +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test-corpus/invalid_path_parameters.json +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test-corpus/recursive_references.json +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test-corpus/test_corpus.py +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/test_server.sh +0 -0
- {schemathesis-3.20.0 → schemathesis-3.20.1}/tox.ini +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Create a report to help us improve
|
|
4
|
+
title: "[BUG]"
|
|
5
|
+
labels: "Status: Needs Triage, Type: Bug"
|
|
6
|
+
assignees: Stranger6667
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
### Checklist
|
|
10
|
+
|
|
11
|
+
- [ ] I checked the [FAQ section](https://schemathesis.readthedocs.io/en/stable/faq.html#frequently-asked-questions) of the documentation
|
|
12
|
+
- [ ] I looked for similar issues in the [issue tracker](https://github.com/schemathesis/schemathesis/issues)
|
|
13
|
+
- [ ] I am using the latest version of Schemathesis
|
|
14
|
+
|
|
15
|
+
### Describe the bug
|
|
16
|
+
|
|
17
|
+
Clearly describe the issue you're facing.
|
|
18
|
+
|
|
19
|
+
### To Reproduce
|
|
20
|
+
|
|
21
|
+
🚨 **Mandatory** 🚨: Steps to reproduce the behavior:
|
|
22
|
+
|
|
23
|
+
1. Run this command '...'
|
|
24
|
+
2. See error
|
|
25
|
+
|
|
26
|
+
Please include a minimal API schema causing this issue:
|
|
27
|
+
|
|
28
|
+
```yaml
|
|
29
|
+
{ "openapi": "3.0.2", ... }
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Expected behavior
|
|
33
|
+
|
|
34
|
+
Clearly describe your expected outcome.
|
|
35
|
+
|
|
36
|
+
### Environment
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
- OS: [e.g. Linux or Windows]
|
|
40
|
+
- Python version: [e.g. 3.11]
|
|
41
|
+
- Schemathesis version: [e.g. 3.20.0]
|
|
42
|
+
- Spec version: [e.g. Open API 3.0.2]
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Additional context
|
|
46
|
+
|
|
47
|
+
Include any other relevant details, like logs or screenshots.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature request
|
|
3
|
+
about: Suggest an idea for this project
|
|
4
|
+
title: "[FEATURE]"
|
|
5
|
+
labels: "Status: Needs Triage, Type: Feature"
|
|
6
|
+
assignees: Stranger6667
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
### Is your feature request related to a problem? Please describe
|
|
10
|
+
|
|
11
|
+
Clearly state the issue you're facing. How often does this occur? What's the impact?
|
|
12
|
+
|
|
13
|
+
### Describe the solution you'd like
|
|
14
|
+
|
|
15
|
+
Clearly describe what you want to happen.
|
|
16
|
+
|
|
17
|
+
### Describe alternatives you've considered
|
|
18
|
+
|
|
19
|
+
Have you tried any workarounds? Describe alternative solutions or features.
|
|
20
|
+
|
|
21
|
+
### Additional context
|
|
22
|
+
|
|
23
|
+
Include any other context, like use-cases, diagrams, or screenshots, to help us understand the feature request.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
🚨Please review the [Contributing Guidelines](https://github.com/schemathesis/schemathesis/blob/master/CONTRIBUTING.rst).
|
|
2
|
+
|
|
3
|
+
### Description
|
|
4
|
+
|
|
5
|
+
Briefly describe your changes.
|
|
6
|
+
|
|
7
|
+
### Checklist
|
|
8
|
+
|
|
9
|
+
- [ ] Added failing tests for the change
|
|
10
|
+
- [ ] All new and existing tests pass
|
|
11
|
+
- [ ] Added changelog entry (follow guidelines in CONTRIBUTING.rst)
|
|
12
|
+
- [ ] Updated README/documentation, if necessary
|
|
@@ -35,7 +35,7 @@ repos:
|
|
|
35
35
|
- id: relint
|
|
36
36
|
|
|
37
37
|
- repo: https://github.com/ambv/black
|
|
38
|
-
rev: 23.
|
|
38
|
+
rev: 23.10.0
|
|
39
39
|
hooks:
|
|
40
40
|
- id: black
|
|
41
41
|
types: [python]
|
|
@@ -44,7 +44,7 @@ repos:
|
|
|
44
44
|
rev: 1.16.0
|
|
45
45
|
hooks:
|
|
46
46
|
- id: blacken-docs
|
|
47
|
-
additional_dependencies: [black==23.
|
|
47
|
+
additional_dependencies: [black==23.10.0]
|
|
48
48
|
|
|
49
49
|
- repo: https://github.com/pre-commit/mirrors-isort
|
|
50
50
|
rev: v5.10.1
|
|
@@ -54,7 +54,7 @@ repos:
|
|
|
54
54
|
additional_dependencies: ["isort[pyproject]"]
|
|
55
55
|
|
|
56
56
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
57
|
-
rev: v1.6.
|
|
57
|
+
rev: v1.6.1
|
|
58
58
|
hooks:
|
|
59
59
|
- id: mypy
|
|
60
60
|
exclude: ^(docs/|test/|test-corpus/|example/).*$
|
|
@@ -62,7 +62,7 @@ repos:
|
|
|
62
62
|
additional_dependencies: [types-click, types-requests, types-PyYAML]
|
|
63
63
|
|
|
64
64
|
- repo: https://github.com/charliermarsh/ruff-pre-commit
|
|
65
|
-
rev: "v0.0
|
|
65
|
+
rev: "v0.1.0"
|
|
66
66
|
hooks:
|
|
67
67
|
- id: ruff
|
|
68
68
|
|
|
@@ -71,5 +71,5 @@ repos:
|
|
|
71
71
|
hooks:
|
|
72
72
|
- id: rstcheck
|
|
73
73
|
additional_dependencies:
|
|
74
|
-
- sphinx==
|
|
75
|
-
- sphinx-click==3.
|
|
74
|
+
- sphinx==5.3.0
|
|
75
|
+
- sphinx-click==4.3.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: schemathesis
|
|
3
|
-
Version: 3.20.
|
|
3
|
+
Version: 3.20.1
|
|
4
4
|
Summary: Property-based testing framework for Open API and GraphQL based apps
|
|
5
5
|
Project-URL: Documentation, https://schemathesis.readthedocs.io/en/stable/
|
|
6
6
|
Project-URL: Changelog, https://schemathesis.readthedocs.io/en/stable/changelog.html
|
|
@@ -4,6 +4,15 @@ Changelog
|
|
|
4
4
|
`Unreleased`_ - TBD
|
|
5
5
|
-------------------
|
|
6
6
|
|
|
7
|
+
.. _v3.20.1:
|
|
8
|
+
|
|
9
|
+
`3.20.1`_ - 2023-10-20
|
|
10
|
+
----------------------
|
|
11
|
+
|
|
12
|
+
**Changed**
|
|
13
|
+
|
|
14
|
+
- Improved CLI error messages for missing or invalid arguments.
|
|
15
|
+
|
|
7
16
|
.. _v3.20.0:
|
|
8
17
|
|
|
9
18
|
`3.20.0`_ - 2023-10-18
|
|
@@ -3246,7 +3255,8 @@ Deprecated
|
|
|
3246
3255
|
|
|
3247
3256
|
- Initial public release
|
|
3248
3257
|
|
|
3249
|
-
.. _Unreleased: https://github.com/schemathesis/schemathesis/compare/v3.20.
|
|
3258
|
+
.. _Unreleased: https://github.com/schemathesis/schemathesis/compare/v3.20.1...HEAD
|
|
3259
|
+
.. _3.20.1: https://github.com/schemathesis/schemathesis/compare/v3.20.0...v3.20.1
|
|
3250
3260
|
.. _3.20.0: https://github.com/schemathesis/schemathesis/compare/v3.19.7...v3.20.0
|
|
3251
3261
|
.. _3.19.7: https://github.com/schemathesis/schemathesis/compare/v3.19.6...v3.19.7
|
|
3252
3262
|
.. _3.19.6: https://github.com/schemathesis/schemathesis/compare/v3.19.5...v3.19.6
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
Schemathesis as a Service
|
|
2
|
+
=========================
|
|
3
|
+
|
|
4
|
+
Schemathesis as a Service on `Schemathesis.io <https://app.schemathesis.io/auth/sign-up/?utm_source=oss_docs&utm_content=saas_docs_top>`_ provides a hosted environment, extending your testing capabilities with additional features accessible in both free and premium plans.
|
|
5
|
+
|
|
6
|
+
.. note::
|
|
7
|
+
|
|
8
|
+
For a step-by-step guide on getting started with Schemathesis.io, visit our `Quick Start Guide <https://docs.schemathesis.io/quick-start/>`_.
|
|
9
|
+
|
|
10
|
+
Uploading Reports to Schemathesis.io
|
|
11
|
+
------------------------------------
|
|
12
|
+
|
|
13
|
+
When you use the Schemathesis CLI to run tests, you have the option to upload test reports to Schemathesis.io for a more detailed analysis and continuous tracking over time.
|
|
14
|
+
This can be done by using the ``--report`` flag with your CLI commands.
|
|
15
|
+
|
|
16
|
+
What Data is Sent?
|
|
17
|
+
------------------
|
|
18
|
+
|
|
19
|
+
When you choose to upload your test reports, the following data is included in the reports sent to Schemathesis.io by the CLI:
|
|
20
|
+
|
|
21
|
+
- **Metadata**:
|
|
22
|
+
|
|
23
|
+
- Information about your host machine to help us understand our users better.
|
|
24
|
+
- Collected data includes your Python interpreter version, implementation, system/OS name, and release.
|
|
25
|
+
|
|
26
|
+
- **Test Runs**:
|
|
27
|
+
|
|
28
|
+
- Most of the Schemathesis runner's events are included, encompassing all generated data and explicitly passed headers.
|
|
29
|
+
- Sensitive data within the generated test cases and received responses is automatically sanitized by default, replaced with the string ``[Filtered]`` to prevent accidental exposure.
|
|
30
|
+
- Further information on what is considered sensitive and how it is sanitized can be found at :ref:`Sanitizing Output <sanitizing-output>`.
|
|
31
|
+
|
|
32
|
+
- **Environment Variables**:
|
|
33
|
+
|
|
34
|
+
- Some environment variables specific to CI providers are included.
|
|
35
|
+
- These are used to comment on pull requests.
|
|
36
|
+
|
|
37
|
+
- **Command-Line Options**:
|
|
38
|
+
|
|
39
|
+
- Command-line options without free-form values are sent to help us understand how you use the CLI.
|
|
40
|
+
- Rest assured, any sensitive data passed through command-line options is sanitized by default.
|
|
41
|
+
|
|
42
|
+
For more details on our data handling practices, please refer to our `Privacy Policy <https://schemathesis.io/legal/privacy>`_. If you have further questions or concerns about data handling, feel free to contact us at `support@schemathesis.io <mailto:support@schemathesis.io>`_.
|
|
43
|
+
|
|
44
|
+
For information on data access, retention, and deletion, please refer to the `FAQ section <https://docs.schemathesis.io/faq>`_ in our SaaS documentation.
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "schemathesis"
|
|
7
|
-
version = "3.20.
|
|
7
|
+
version = "3.20.1"
|
|
8
8
|
description = "Property-based testing framework for Open API and GraphQL based apps"
|
|
9
9
|
keywords = ["pytest", "hypothesis", "openapi", "swagger", "graphql", "testing"]
|
|
10
10
|
authors = [{ name = "Dmitry Dygalo", email = "dadygalo@gmail.com" }]
|
|
@@ -18,11 +18,29 @@ from ..stateful import Stateful
|
|
|
18
18
|
from ..types import PathLike
|
|
19
19
|
from .constants import DEFAULT_WORKERS
|
|
20
20
|
|
|
21
|
+
INVALID_DERANDOMIZE_MESSAGE = (
|
|
22
|
+
"`--hypothesis-derandomize` implies no database, so passing `--hypothesis-database` too is invalid."
|
|
23
|
+
)
|
|
21
24
|
MISSING_CASSETTE_PATH_ARGUMENT_MESSAGE = (
|
|
22
25
|
'Missing argument, "--cassette-path" should be specified as well if you use "--cassette-preserve-exact-body-bytes".'
|
|
23
26
|
)
|
|
24
27
|
INVALID_SCHEMA_MESSAGE = "Invalid SCHEMA, must be a valid URL, file path or an API name from Schemathesis.io."
|
|
25
28
|
FILE_DOES_NOT_EXIST_MESSAGE = "The specified file does not exist. Please provide a valid path to an existing file."
|
|
29
|
+
INVALID_BASE_URL_MESSAGE = (
|
|
30
|
+
"The provided base URL is invalid. This URL serves as a prefix for all API endpoints you want to test. "
|
|
31
|
+
"Make sure it is a properly formatted URL."
|
|
32
|
+
)
|
|
33
|
+
MISSING_BASE_URL_MESSAGE = "The `--base-url` option is required when specifying a schema via a file."
|
|
34
|
+
APPLICATION_FORMAT_MESSAGE = """Unable to import application from the provided module.
|
|
35
|
+
The `--app` option should follow this format:
|
|
36
|
+
|
|
37
|
+
module_path:variable_name
|
|
38
|
+
|
|
39
|
+
- `module_path`: A path to an importable Python module.
|
|
40
|
+
- `variable_name`: The name of the application variable within that module.
|
|
41
|
+
|
|
42
|
+
Example: `st run --app=your_module:app ...`"""
|
|
43
|
+
MISSING_REQUEST_CERT_MESSAGE = "The `--request-cert` option must be specified if `--request-cert-key` is used."
|
|
26
44
|
|
|
27
45
|
|
|
28
46
|
@enum.unique
|
|
@@ -74,7 +92,7 @@ def validate_schema(
|
|
|
74
92
|
if not utils.file_exists(schema):
|
|
75
93
|
message = FILE_DOES_NOT_EXIST_MESSAGE
|
|
76
94
|
else:
|
|
77
|
-
message =
|
|
95
|
+
message = MISSING_BASE_URL_MESSAGE
|
|
78
96
|
raise click.UsageError(message)
|
|
79
97
|
if kind == SchemaInputKind.NAME:
|
|
80
98
|
if api_name is not None:
|
|
@@ -92,9 +110,9 @@ def validate_base_url(ctx: click.core.Context, param: click.core.Parameter, raw_
|
|
|
92
110
|
try:
|
|
93
111
|
netloc = urlparse(raw_value).netloc
|
|
94
112
|
except ValueError as exc:
|
|
95
|
-
raise click.UsageError(
|
|
113
|
+
raise click.UsageError(INVALID_BASE_URL_MESSAGE) from exc
|
|
96
114
|
if raw_value and not netloc:
|
|
97
|
-
raise click.UsageError(
|
|
115
|
+
raise click.UsageError(INVALID_BASE_URL_MESSAGE)
|
|
98
116
|
return raw_value
|
|
99
117
|
|
|
100
118
|
|
|
@@ -110,14 +128,6 @@ def validate_rate_limit(
|
|
|
110
128
|
raise click.UsageError(exc.args[0]) from exc
|
|
111
129
|
|
|
112
130
|
|
|
113
|
-
APPLICATION_FORMAT_MESSAGE = (
|
|
114
|
-
"Can not import application from the given module!\n"
|
|
115
|
-
"The `--app` option value should be in format:\n\n path:variable\n\n"
|
|
116
|
-
"where `path` is an importable path to a Python module,\n"
|
|
117
|
-
"and `variable` is a variable name inside that module."
|
|
118
|
-
)
|
|
119
|
-
|
|
120
|
-
|
|
121
131
|
def validate_app(ctx: click.core.Context, param: click.core.Parameter, raw_value: Optional[str]) -> Optional[str]:
|
|
122
132
|
if raw_value is None:
|
|
123
133
|
return raw_value
|
|
@@ -145,9 +155,7 @@ def validate_hypothesis_database(
|
|
|
145
155
|
if raw_value is None:
|
|
146
156
|
return raw_value
|
|
147
157
|
if ctx.params.get("hypothesis_derandomize"):
|
|
148
|
-
raise click.UsageError(
|
|
149
|
-
"--hypothesis-derandomize implies no database, so passing --hypothesis-database too is invalid."
|
|
150
|
-
)
|
|
158
|
+
raise click.UsageError(INVALID_DERANDOMIZE_MESSAGE)
|
|
151
159
|
return raw_value
|
|
152
160
|
|
|
153
161
|
|
|
@@ -201,7 +209,7 @@ def validate_request_cert_key(
|
|
|
201
209
|
ctx: click.core.Context, param: click.core.Parameter, raw_value: Optional[str]
|
|
202
210
|
) -> Optional[str]:
|
|
203
211
|
if raw_value is not None and "request_cert" not in ctx.params:
|
|
204
|
-
raise click.UsageError(
|
|
212
|
+
raise click.UsageError(MISSING_REQUEST_CERT_MESSAGE)
|
|
205
213
|
return raw_value
|
|
206
214
|
|
|
207
215
|
|
|
@@ -34,7 +34,14 @@ from schemathesis.cli import (
|
|
|
34
34
|
get_exit_code,
|
|
35
35
|
reset_checks,
|
|
36
36
|
)
|
|
37
|
-
from schemathesis.cli.callbacks import
|
|
37
|
+
from schemathesis.cli.callbacks import (
|
|
38
|
+
FILE_DOES_NOT_EXIST_MESSAGE,
|
|
39
|
+
INVALID_BASE_URL_MESSAGE,
|
|
40
|
+
INVALID_DERANDOMIZE_MESSAGE,
|
|
41
|
+
INVALID_SCHEMA_MESSAGE,
|
|
42
|
+
MISSING_BASE_URL_MESSAGE,
|
|
43
|
+
MISSING_REQUEST_CERT_MESSAGE,
|
|
44
|
+
)
|
|
38
45
|
from schemathesis.code_samples import CodeSampleStyle
|
|
39
46
|
from schemathesis.constants import (
|
|
40
47
|
DEFAULT_RESPONSE_TIMEOUT,
|
|
@@ -90,9 +97,9 @@ def test_commands_version(cli):
|
|
|
90
97
|
(
|
|
91
98
|
(("run",), "Error: Missing argument 'SCHEMA'."),
|
|
92
99
|
(("run", "not-url"), "See https://schemathesis.readthedocs.io/en/stable/service.html for more details"),
|
|
93
|
-
(("run", SIMPLE_PATH),
|
|
94
|
-
(("run", SIMPLE_PATH, "--base-url=test"), "Error:
|
|
95
|
-
(("run", SIMPLE_PATH, "--base-url=127.0.0.1:8080"), "Error:
|
|
100
|
+
(("run", SIMPLE_PATH), f"Error: {MISSING_BASE_URL_MESSAGE}"),
|
|
101
|
+
(("run", SIMPLE_PATH, "--base-url=test"), f"Error: {INVALID_BASE_URL_MESSAGE}"),
|
|
102
|
+
(("run", SIMPLE_PATH, "--base-url=127.0.0.1:8080"), f"Error: {INVALID_BASE_URL_MESSAGE}"),
|
|
96
103
|
(
|
|
97
104
|
("run", "http://127.0.0.1", "--request-timeout=-5"),
|
|
98
105
|
"Error: Invalid value for '--request-timeout': -5 is not in the range x>=1.",
|
|
@@ -180,10 +187,7 @@ def test_certificate_only_key(cli, tmp_path):
|
|
|
180
187
|
|
|
181
188
|
# Then an appropriate error should be displayed
|
|
182
189
|
assert result.exit_code == ExitCode.INTERRUPTED, result.stdout
|
|
183
|
-
assert (
|
|
184
|
-
result.stdout.strip().split("\n")[-1]
|
|
185
|
-
== 'Error: Missing argument, "--request-cert" should be specified as well.'
|
|
186
|
-
)
|
|
190
|
+
assert result.stdout.strip().split("\n")[-1] == f"Error: {MISSING_REQUEST_CERT_MESSAGE}"
|
|
187
191
|
|
|
188
192
|
|
|
189
193
|
@pytest.mark.openapi_version("3.0")
|
|
@@ -544,10 +548,7 @@ def test_hypothesis_database_with_derandomize(cli, schema_url):
|
|
|
544
548
|
result = cli.run(schema_url, "--hypothesis-database=:memory:", "--hypothesis-derandomize")
|
|
545
549
|
assert result.exit_code == ExitCode.INTERRUPTED, result.stdout
|
|
546
550
|
lines = result.stdout.split("\n")
|
|
547
|
-
assert
|
|
548
|
-
lines[3]
|
|
549
|
-
== "Error: --hypothesis-derandomize implies no database, so passing --hypothesis-database too is invalid."
|
|
550
|
-
)
|
|
551
|
+
assert lines[3] == f"Error: {INVALID_DERANDOMIZE_MESSAGE}"
|
|
551
552
|
|
|
552
553
|
|
|
553
554
|
@pytest.mark.openapi_version("3.0")
|
|
@@ -1524,7 +1525,7 @@ def test_wsgi_app_missing(testdir, cli):
|
|
|
1524
1525
|
assert result.exit_code == ExitCode.TESTS_FAILED, result.stdout
|
|
1525
1526
|
lines = result.stdout.strip().split("\n")
|
|
1526
1527
|
assert "AttributeError: module 'location' has no attribute 'app'" in lines
|
|
1527
|
-
assert "
|
|
1528
|
+
assert "Unable to import application from the provided module." in lines
|
|
1528
1529
|
|
|
1529
1530
|
|
|
1530
1531
|
def test_wsgi_app_internal_exception(testdir, cli):
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Bug report
|
|
3
|
-
about: Create a report to help us improve
|
|
4
|
-
title: "[BUG]"
|
|
5
|
-
labels: "Status: Review Needed, Type: Bug"
|
|
6
|
-
assignees: Stranger6667
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
**Checklist**
|
|
10
|
-
|
|
11
|
-
- [ ] I checked the [FAQ section](https://schemathesis.readthedocs.io/en/stable/faq.html#frequently-asked-questions) of the documentation
|
|
12
|
-
- [ ] I looked for similar issues in the [issue tracker](https://github.com/schemathesis/schemathesis/issues)
|
|
13
|
-
|
|
14
|
-
**Describe the bug**
|
|
15
|
-
A clear and concise description of what the bug is.
|
|
16
|
-
|
|
17
|
-
**To Reproduce**
|
|
18
|
-
Steps to reproduce the behavior:
|
|
19
|
-
|
|
20
|
-
1. Run this command '...'
|
|
21
|
-
2. See error
|
|
22
|
-
|
|
23
|
-
If possible, please post a minimal version of your API schema that cause this behavior:
|
|
24
|
-
|
|
25
|
-
```yaml
|
|
26
|
-
{
|
|
27
|
-
"openapi": "3.0.2"
|
|
28
|
-
... Add more here
|
|
29
|
-
}
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
**Expected behavior**
|
|
33
|
-
A clear and concise description of what you expected to happen.
|
|
34
|
-
|
|
35
|
-
**Environment (please complete the following information):**
|
|
36
|
-
|
|
37
|
-
- OS: [e.g. Linux or Windows]
|
|
38
|
-
- Python version: [e.g. 3.7.2]
|
|
39
|
-
- Schemathesis version: [e.g. 2.4.1]
|
|
40
|
-
- Spec version: [e.g. Open API 3.0.2]
|
|
41
|
-
|
|
42
|
-
**Additional context**
|
|
43
|
-
Add any other context about the problem here.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Feature request
|
|
3
|
-
about: Suggest an idea for this project
|
|
4
|
-
title: "[FEATURE]"
|
|
5
|
-
labels: "Status: Review Needed, Type: Feature"
|
|
6
|
-
assignees: Stranger6667
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
**Is your feature request related to a problem? Please describe.**
|
|
10
|
-
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
11
|
-
|
|
12
|
-
**Describe the solution you'd like**
|
|
13
|
-
A clear and concise description of what you want to happen.
|
|
14
|
-
|
|
15
|
-
**Describe alternatives you've considered**
|
|
16
|
-
A clear and concise description of any alternative solutions or features you've considered.
|
|
17
|
-
|
|
18
|
-
**Additional context**
|
|
19
|
-
Add any other context or screenshots about the feature request here.
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
🚨Please review the [guidelines for contributing](https://github.com/schemathesis/schemathesis/blob/master/CONTRIBUTING.rst) to this repository.
|
|
2
|
-
|
|
3
|
-
### Description
|
|
4
|
-
|
|
5
|
-
Please explain the changes you made here.
|
|
6
|
-
|
|
7
|
-
### Checklist
|
|
8
|
-
|
|
9
|
-
- [ ] Created tests which fail without the change (if possible)
|
|
10
|
-
- [ ] All tests passing
|
|
11
|
-
- [ ] Added a changelog entry
|
|
12
|
-
- [ ] Extended the README / documentation, if necessary
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
Introduction
|
|
2
|
-
============
|
|
3
|
-
|
|
4
|
-
Schemathesis is a tool for testing your web applications built with Open API or GraphQL specifications.
|
|
5
|
-
|
|
6
|
-
Installation
|
|
7
|
-
------------
|
|
8
|
-
|
|
9
|
-
We recommend using the latest version of Python. Schemathesis supports Python 3.7 and newer.
|
|
10
|
-
|
|
11
|
-
Install the most recent Schemathesis version using ``pip``:
|
|
12
|
-
|
|
13
|
-
.. code-block:: text
|
|
14
|
-
|
|
15
|
-
$ pip install schemathesis
|
|
16
|
-
|
|
17
|
-
Supported API specs
|
|
18
|
-
-------------------
|
|
19
|
-
|
|
20
|
-
We support the following API specifications:
|
|
21
|
-
|
|
22
|
-
- Swagger 2.0
|
|
23
|
-
- Open API 3.0.x
|
|
24
|
-
- GraphQL June 2018
|
|
25
|
-
|
|
26
|
-
Experimental Support:
|
|
27
|
-
|
|
28
|
-
- OpenAPI 3.1 (see :ref:`Experimental Features <experimental-openapi-31>` for details)
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
Schemathesis as a Service
|
|
2
|
-
=========================
|
|
3
|
-
|
|
4
|
-
`Schemathesis.io <https://app.schemathesis.io/auth/sign-up/?utm_source=oss_docs&utm_content=saas_docs_top>`_ is a platform that runs property-based API tests and visualises their outcomes for you. It also may store
|
|
5
|
-
your CLI test results and run additional analysis on them.
|
|
6
|
-
|
|
7
|
-
On top of the usual Schemathesis benefits, the platform gives you:
|
|
8
|
-
|
|
9
|
-
- Handy visual navigation through test results
|
|
10
|
-
- Additional static analysis of your API schema & app responses
|
|
11
|
-
- Improved data generation, that finds more bugs
|
|
12
|
-
- Many more additional checks for Open API & GraphQL issues
|
|
13
|
-
- Visual API schema coverage (**COMING SOON**)
|
|
14
|
-
- Tailored tips on API schema improvement (**COMING SOON**)
|
|
15
|
-
- Support for gRPC, AsyncAPI, and SOAP (**COMING SOON**)
|
|
16
|
-
|
|
17
|
-
Tutorial
|
|
18
|
-
--------
|
|
19
|
-
|
|
20
|
-
This step-by-step tutorial walks you through the flow of setting up your Schemathesis.io account to test your Open API schema.
|
|
21
|
-
As part of this tutorial, you will:
|
|
22
|
-
|
|
23
|
-
- Add your Open API schema to Schemathesis.io
|
|
24
|
-
- Execute property-based tests against your application
|
|
25
|
-
- See what request parameters cause issues
|
|
26
|
-
|
|
27
|
-
.. note::
|
|
28
|
-
|
|
29
|
-
We provide a sample Flask application with a pre-defined set of problems to demonstrate some of the possible issues
|
|
30
|
-
Schemathesis.io can find automatically. You can find the `source code <https://github.com/schemathesis/schemathesis/tree/master/test/apps/openapi/_flask>`_ in the Schemathesis repository.
|
|
31
|
-
|
|
32
|
-
Alternatively, you can follow this guide as a reference and run tests against your Open API or GraphQL based application.
|
|
33
|
-
|
|
34
|
-
Prerequisites
|
|
35
|
-
~~~~~~~~~~~~~
|
|
36
|
-
|
|
37
|
-
- A Schemathesis.io `account <https://app.schemathesis.io/auth/sign-up/?utm_source=oss_docs&utm_content=saas_docs_prerequisites>`_
|
|
38
|
-
|
|
39
|
-
Step 1: Add the API schema
|
|
40
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
41
|
-
|
|
42
|
-
1. Open `Schemathesis.io dashboard <https://app.schemathesis.io/apis/>`_
|
|
43
|
-
2. Click on the **Add API** button to get to the API schema submission form
|
|
44
|
-
|
|
45
|
-
.. image:: https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/service_no_apis_yet.png
|
|
46
|
-
|
|
47
|
-
3. Enter your API name, so you can easily identify it later (for example, "Example API")
|
|
48
|
-
4. Fill **https://example.schemathesis.io/openapi.json** into the "API Schema" field
|
|
49
|
-
5. **Optional**. If your API requires authentication, choose the appropriate authentication type (HTTP Basic & Header are available at the moment) and fill in its details
|
|
50
|
-
6. **Optional**. If your API is available on a different domain than your API schema, fill the proper base URL into the "Base URL" field
|
|
51
|
-
7. Save the API schema entry by clicking "Add"
|
|
52
|
-
|
|
53
|
-
.. image:: https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/service_api_form.png
|
|
54
|
-
|
|
55
|
-
.. warning::
|
|
56
|
-
|
|
57
|
-
Don't ever run tests against your production deployments!
|
|
58
|
-
|
|
59
|
-
Step 2: Run API tests
|
|
60
|
-
~~~~~~~~~~~~~~~~~~~~~
|
|
61
|
-
|
|
62
|
-
At this point, you can start testing your API! The simplest option is to use our test runners on the "Cloud" tab.
|
|
63
|
-
|
|
64
|
-
.. image:: https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/service_api_created.png
|
|
65
|
-
|
|
66
|
-
**Optional**. If you'd like to run tests on your side and upload the results to Schemathesis.io feel free to use one of the provided code samples:
|
|
67
|
-
|
|
68
|
-
Generate an access token and authenticate into Schemathesis.io first:
|
|
69
|
-
|
|
70
|
-
.. code:: text
|
|
71
|
-
|
|
72
|
-
# Replace `LOmOZoBh3V12aP3rRkvqYYKGGGV6Ag` with your token
|
|
73
|
-
st auth login LOmOZoBh3V12aP3rRkvqYYKGGGV6Ag
|
|
74
|
-
|
|
75
|
-
And then run the tests:
|
|
76
|
-
|
|
77
|
-
.. code::
|
|
78
|
-
|
|
79
|
-
st run demo-1 --checks all --report
|
|
80
|
-
|
|
81
|
-
.. note::
|
|
82
|
-
|
|
83
|
-
Replace ``demo-1`` with the appropriate API ID shown in the SaaS code sample
|
|
84
|
-
|
|
85
|
-
Once all events are uploaded to Schemathesis.io you'll see a message at the end of the CLI output:
|
|
86
|
-
|
|
87
|
-
.. code:: text
|
|
88
|
-
|
|
89
|
-
Upload: COMPLETED
|
|
90
|
-
|
|
91
|
-
Your test report is successfully uploaded! Please, follow this link for details:
|
|
92
|
-
|
|
93
|
-
https://app.schemathesis.io/r/mF9ke/
|
|
94
|
-
|
|
95
|
-
To observe the test run results, follow the link from the output.
|
|
96
|
-
|
|
97
|
-
Use the ``--report`` argument followed by a file name to save the report as a tar gz file. Inside, you'll find multiple JSON files that capture details like the API schema and test data.
|
|
98
|
-
|
|
99
|
-
**Why save the report?** Developers might want to integrate this report into their systems, derive custom analytics, or generate their own formatted reports.
|
|
100
|
-
|
|
101
|
-
**Note**: We don't officially document the exact structure or contents of these JSON files. The format might evolve even without a major version bump. Utilizing this report directly is for advanced users; proceed with caution.
|
|
102
|
-
|
|
103
|
-
.. note::
|
|
104
|
-
|
|
105
|
-
If you'd like to disable the suggestion to visualize test reports, then set the ``SCHEMATHESIS_REPORT_SUGGESTION`` environment variable to ``false``.
|
|
106
|
-
|
|
107
|
-
Step 3: Observe the results
|
|
108
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
109
|
-
|
|
110
|
-
As the tests are running you will see failures appear in the UI:
|
|
111
|
-
|
|
112
|
-
.. image:: https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/service_run_results.png
|
|
113
|
-
|
|
114
|
-
Each entry in the **Failures** list is clickable, and you can check its details. The failure below shows that the application
|
|
115
|
-
response does not conform to its API schema and shows what part of the schema was violated.
|
|
116
|
-
|
|
117
|
-
.. image:: https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/service_non_conforming_response.png
|
|
118
|
-
|
|
119
|
-
In this case, the schema requires the "success" property to be present but it is absent in the response.
|
|
120
|
-
|
|
121
|
-
Each failure is accompanied by a cURL snippet you can use to reproduce the issue.
|
|
122
|
-
|
|
123
|
-
.. image:: https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/service_server_error.png
|
|
124
|
-
|
|
125
|
-
What Data is Sent?
|
|
126
|
-
------------------
|
|
127
|
-
|
|
128
|
-
The following data is included in the reports sent to Schemathesis.io by the CLI:
|
|
129
|
-
|
|
130
|
-
- **Metadata**:
|
|
131
|
-
|
|
132
|
-
- Information about your host machine to help us understand our users better.
|
|
133
|
-
- Collected data includes your Python interpreter version, implementation, system/OS name, and release.
|
|
134
|
-
|
|
135
|
-
- **Test Runs**:
|
|
136
|
-
|
|
137
|
-
- Most of the Schemathesis runner's events are included, encompassing all generated data and explicitly passed headers.
|
|
138
|
-
- Sensitive data within the generated test cases and received responses is automatically sanitized by default, replaced with the string ``[Filtered]`` to prevent accidental exposure.
|
|
139
|
-
- Further information on what is considered sensitive and how it is sanitized can be found at :ref:`Sanitizing Output <sanitizing-output>`.
|
|
140
|
-
|
|
141
|
-
- **Environment Variables**:
|
|
142
|
-
|
|
143
|
-
- Some environment variables specific to CI providers are included.
|
|
144
|
-
- These are used to comment on pull requests.
|
|
145
|
-
|
|
146
|
-
- **Command-Line Options**:
|
|
147
|
-
|
|
148
|
-
- Command-line options without free-form values are sent to help us understand how you use the CLI.
|
|
149
|
-
- Rest assured, any sensitive data passed through command-line options is sanitized by default.
|
|
150
|
-
|
|
151
|
-
For more details on our data handling practices, please refer to our `Privacy Policy <https://schemathesis.io/legal/privacy>`_. If you have further questions or concerns about data handling, feel free to contact us at `support@schemathesis.io <mailto:support@schemathesis.io>`_.
|
|
152
|
-
|
|
153
|
-
For information on data access, retention, and deletion, please refer to the `FAQ section <https://docs.schemathesis.io/faq>`_ in our SaaS documentation.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
File without changes
|