schemathesis 3.35.0__py3-none-any.whl → 3.35.2__py3-none-any.whl

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.
@@ -28,7 +28,7 @@ from ..exceptions import (
28
28
  make_unique_by_key,
29
29
  )
30
30
  from ..generation import DataGenerationMethod
31
- from ..models import Case, Check, Interaction, Request, Response, Status, TestResult
31
+ from ..models import Case, Check, Interaction, Request, Response, Status, TestPhase, TestResult
32
32
  from ..transports import deserialize_payload, serialize_payload
33
33
 
34
34
  if TYPE_CHECKING:
@@ -385,6 +385,7 @@ class SerializedInteraction:
385
385
  checks: list[SerializedCheck]
386
386
  status: Status
387
387
  data_generation_method: DataGenerationMethod
388
+ phase: TestPhase | None
388
389
  recorded_at: str
389
390
 
390
391
  @classmethod
@@ -395,6 +396,7 @@ class SerializedInteraction:
395
396
  checks=[SerializedCheck.from_check(check) for check in interaction.checks],
396
397
  status=interaction.status,
397
398
  data_generation_method=interaction.data_generation_method,
399
+ phase=interaction.phase,
398
400
  recorded_at=interaction.recorded_at,
399
401
  )
400
402
 
schemathesis/schemas.py CHANGED
@@ -1,12 +1,3 @@
1
- """Schema objects provide a convenient interface to raw schemas.
2
-
3
- Their responsibilities:
4
- - Provide a unified way to work with different types of schemas
5
- - Give all paths / methods combinations that are available directly from the schema;
6
-
7
- They give only static definitions of paths.
8
- """
9
-
10
1
  from __future__ import annotations
11
2
 
12
3
  from collections.abc import Mapping
@@ -69,6 +60,7 @@ from .types import (
69
60
  NotSet,
70
61
  PathParameters,
71
62
  Query,
63
+ Specification,
72
64
  )
73
65
  from .utils import PARAMETRIZE_MARKER, GivenInput, given_proxy
74
66
 
@@ -89,6 +81,7 @@ def get_full_path(base_path: str, path: str) -> str:
89
81
  class BaseSchema(Mapping):
90
82
  raw_schema: dict[str, Any]
91
83
  transport: Transport
84
+ specification: Specification
92
85
  location: str | None = None
93
86
  base_url: str | None = None
94
87
  filter_set: FilterSet = field(default_factory=FilterSet)
@@ -408,6 +401,7 @@ class BaseSchema(Mapping):
408
401
 
409
402
  return self.__class__(
410
403
  self.raw_schema,
404
+ specification=self.specification,
411
405
  location=self.location,
412
406
  base_url=base_url, # type: ignore
413
407
  app=app,
@@ -21,7 +21,7 @@ from ...internal.validation import require_relative_url
21
21
  from ...loaders import load_schema_from_url
22
22
  from ...throttling import build_limiter
23
23
  from ...transports.headers import setup_default_headers
24
- from ...types import PathLike
24
+ from ...types import PathLike, Specification
25
25
 
26
26
  if TYPE_CHECKING:
27
27
  from graphql import DocumentNode
@@ -254,6 +254,7 @@ def from_dict(
254
254
  rate_limiter = build_limiter(rate_limit)
255
255
  instance = GraphQLSchema(
256
256
  raw_schema,
257
+ specification=Specification.GRAPHQL,
257
258
  location=location,
258
259
  base_url=base_url,
259
260
  app=app,
@@ -25,7 +25,7 @@ from ...generation import DataGenerationMethod, GenerationConfig
25
25
  from ...hooks import HookContext, HookDispatcher, apply_to_all_dispatchers
26
26
  from ...internal.copy import fast_deepcopy
27
27
  from ...internal.validation import is_illegal_surrogate
28
- from ...models import APIOperation, Case, GenerationMetadata, cant_serialize
28
+ from ...models import APIOperation, Case, GenerationMetadata, TestPhase, cant_serialize
29
29
  from ...serializers import Binary
30
30
  from ...transports.content_types import parse_content_type
31
31
  from ...transports.headers import has_invalid_characters, is_latin_1_encodable
@@ -123,6 +123,7 @@ def get_case_strategy(
123
123
  body: Any = NOT_SET,
124
124
  media_type: str | None = None,
125
125
  skip_on_not_negated: bool = True,
126
+ phase: TestPhase = TestPhase.GENERATE,
126
127
  ) -> Any:
127
128
  """A strategy that creates `Case` instances.
128
129
 
@@ -213,6 +214,7 @@ def get_case_strategy(
213
214
  headers=headers_.generator,
214
215
  cookies=cookies_.generator,
215
216
  body=body_.generator,
217
+ phase=phase,
216
218
  ),
217
219
  )
218
220
  auth_context = auths.AuthContext(
@@ -13,7 +13,7 @@ from hypothesis_jsonschema import from_schema
13
13
  from ...constants import DEFAULT_RESPONSE_TIMEOUT
14
14
  from ...generation import get_single_example
15
15
  from ...internal.copy import fast_deepcopy
16
- from ...models import APIOperation, Case
16
+ from ...models import APIOperation, Case, TestPhase
17
17
  from ._hypothesis import get_case_strategy, get_default_format_strategies
18
18
  from .constants import LOCATION_TO_CONTAINER
19
19
  from .formats import STRING_FORMATS
@@ -67,6 +67,8 @@ def get_strategies_from_examples(
67
67
  examples = list(extract_top_level(operation))
68
68
  # Add examples from parameter's schemas
69
69
  examples.extend(extract_from_schemas(operation))
70
+ as_strategy_kwargs = as_strategy_kwargs or {}
71
+ as_strategy_kwargs["phase"] = TestPhase.EXPLICIT
70
72
  return [
71
73
  get_case_strategy(operation=operation, **{**parameters, **(as_strategy_kwargs or {})}).map(serialize_components)
72
74
  for parameters in produce_combinations(examples)
@@ -26,7 +26,7 @@ from ...loaders import load_schema_from_url, load_yaml
26
26
  from ...throttling import build_limiter
27
27
  from ...transports.content_types import is_json_media_type, is_yaml_media_type
28
28
  from ...transports.headers import setup_default_headers
29
- from ...types import Filter, NotSet, PathLike
29
+ from ...types import Filter, NotSet, PathLike, Specification
30
30
  from . import definitions, validation
31
31
 
32
32
  if TYPE_CHECKING:
@@ -349,6 +349,7 @@ def from_dict(
349
349
  _maybe_validate_schema(raw_schema, definitions.SWAGGER_20_VALIDATOR, validate_schema)
350
350
  instance = SwaggerV20(
351
351
  raw_schema,
352
+ specification=Specification.OPENAPI,
352
353
  app=app,
353
354
  base_url=base_url,
354
355
  filter_set=filter_set,
@@ -388,6 +389,7 @@ def from_dict(
388
389
  _maybe_validate_schema(raw_schema, validator, validate_schema)
389
390
  instance = OpenApi30(
390
391
  raw_schema,
392
+ specification=Specification.OPENAPI,
391
393
  app=app,
392
394
  base_url=base_url,
393
395
  filter_set=filter_set,
@@ -117,6 +117,7 @@ class OpenAPI20Parameter(OpenAPIParameter):
117
117
  "uniqueItems",
118
118
  "enum",
119
119
  "multipleOf",
120
+ "example",
120
121
  )
121
122
 
122
123
  @property
@@ -163,6 +164,7 @@ class OpenAPI30Parameter(OpenAPIParameter):
163
164
  "properties",
164
165
  "additionalProperties",
165
166
  "format",
167
+ "example",
166
168
  )
167
169
 
168
170
  @property
@@ -48,6 +48,8 @@ class RunnerContext:
48
48
  current_response: GenericResponse | None = None
49
49
  # Total number of failures
50
50
  failures_count: int = 0
51
+ # The total number of completed test scenario
52
+ completed_scenarios: int = 0
51
53
  # Metrics collector for targeted testing
52
54
  metric_collector: TargetMetricCollector = field(default_factory=lambda: TargetMetricCollector(targets=[]))
53
55
 
@@ -64,6 +66,7 @@ class RunnerContext:
64
66
  return events.ScenarioStatus.REJECTED
65
67
 
66
68
  def reset_scenario(self) -> None:
69
+ self.completed_scenarios += 1
67
70
  self.current_step_status = None
68
71
  self.current_response = None
69
72
 
@@ -9,7 +9,7 @@ from typing import TYPE_CHECKING, Any, Generator, Iterator, Type
9
9
  import hypothesis
10
10
  import requests
11
11
  from hypothesis.control import current_build_context
12
- from hypothesis.errors import Flaky
12
+ from hypothesis.errors import Flaky, Unsatisfiable
13
13
  from hypothesis.stateful import Rule
14
14
 
15
15
  from ..exceptions import CheckFailed
@@ -265,6 +265,13 @@ def _execute_state_machine_loop(
265
265
  ctx.mark_current_suite_as_seen_in_run()
266
266
  continue
267
267
  except Exception as exc:
268
+ if isinstance(exc, Unsatisfiable) and ctx.completed_scenarios > 0:
269
+ # Sometimes Hypothesis randomly gives up on generating some complex cases. However, if we know that
270
+ # values are possible to generate based on the previous observations, we retry the generation
271
+ if ctx.completed_scenarios >= config.hypothesis_settings.max_examples:
272
+ # Avoid infinite restarts
273
+ break
274
+ continue
268
275
  # Any other exception is an inner error and the test run should be stopped
269
276
  suite_status = events.SuiteStatus.ERROR
270
277
  event_queue.put(events.Errored(exception=exc))
schemathesis/types.py CHANGED
@@ -1,3 +1,4 @@
1
+ import enum
1
2
  from pathlib import Path
2
3
  from typing import TYPE_CHECKING, Any, Callable, Dict, List, Set, Tuple, Union
3
4
 
@@ -34,3 +35,10 @@ Hook = Union[
34
35
  RawAuth = Tuple[str, str]
35
36
  # Generic test with any arguments and no return
36
37
  GenericTest = Callable[..., None]
38
+
39
+
40
+ class Specification(str, enum.Enum):
41
+ """Specification of the given schema."""
42
+
43
+ OPENAPI = "openapi"
44
+ GRAPHQL = "graphql"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: schemathesis
3
- Version: 3.35.0
3
+ Version: 3.35.2
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
@@ -113,9 +113,6 @@ Description-Content-Type: text/markdown
113
113
  <a href="https://discord.gg/R9ASRAmHnA" target="_blank">
114
114
  <img src="https://img.shields.io/discord/938139740912369755" alt="Discord">
115
115
  </a>
116
- <a href="[https://discord.gg/R9ASRAmHnA](https://schemathesis.readthedocs.io/en/stable/)" target="_blank">
117
- <img src="https://readthedocs.org/projects/schemathesis/badge/?version=stable" alt="Documentation">
118
- </a>
119
116
  <a href="https://opensource.org/licenses/MIT" target="_blank">
120
117
  <img src="https://img.shields.io/pypi/l/schemathesis.svg" alt="License">
121
118
  </a>
@@ -123,78 +120,73 @@ Description-Content-Type: text/markdown
123
120
 
124
121
  ## Schemathesis
125
122
 
126
- Schemathesis is a tool that levels up your API testing by automating the process of finding crashes, uncovering bugs, and validating spec compliance. With Schemathesis, you can:
127
-
128
- 🎯 **Catch Hard-to-Find Bugs**
129
-
130
- - Uncover hidden crashes and edge cases that manual testing might miss
131
- - Identify spec violations and ensure your API adheres to its defined contract
132
-
133
- ⚡ **Accelerate Testing Cycles**
123
+ Schemathesis is an API testing tool that automatically finds crashes and validates spec compliance.
134
124
 
135
- - Automatically generate a wide range of test cases based on your API schema
136
- - Save time and effort by eliminating the need for manual test case creation
125
+ <p align="center">
126
+ <img src="https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/demo.gif" alt="Schemathesis Demo"/>
127
+ </p>
137
128
 
138
- 🧩 **Integrate Seamlessly**
129
+ <p align="center">
130
+ <i>Finding server crashes in the Demo API.</i>
131
+ </p>
139
132
 
140
- - Works with popular API formats such as OpenAPI, GraphQL.
141
- - Easily integrate into your existing testing pipeline and CI/CD workflows
133
+ ### Highlights
142
134
 
143
- 🔧 **Customize and Extend**
135
+ 🎯 **Catches Hard-to-Find Bugs**
144
136
 
145
- - Tune the testing process to your specific requirements using Python extensions
146
- - Modify and enhance various aspects of the testing flow to suit your needs with rich configuration options
137
+ - Uncover hidden crashes and edge cases that manual testing might miss
138
+ - Identify spec violations and ensure your API adheres to its contract
147
139
 
148
- 📊 **Gain Valuable Insights**
140
+ **Accelerates Testing Cycles**
149
141
 
150
- - Get detailed reports and actionable insights to help you identify and fix issues quickly
151
- - Reproduce failing test cases effortlessly with generated code samples and cURL commands
142
+ - Automatically generate a wide range of test cases based on your API schema
143
+ - Save time by reducing the need for manual test case creation
152
144
 
153
- ## Quick Demo
145
+ 🧩 **Integrates Seamlessly**
154
146
 
155
- <p align="center">
156
- <img src="https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/demo.gif" alt="Schemathesis Demo"/>
157
- </p>
147
+ - Works with popular API formats such as OpenAPI, GraphQL.
148
+ - Easily integrate into your existing CI/CD workflows.
158
149
 
159
- With a summary right in your PRs:
150
+ 🔧 **Customizable and Extendable**
160
151
 
161
- ![image](https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/service_github_report.png)
152
+ - Tune the testing process using Python extensions.
153
+ - Adjust the testing flow to suit your needs with rich configuration options.
162
154
 
163
- ## Getting Started
155
+ 🐞 **Simplifies Debugging**
164
156
 
165
- Choose from multiple ways to start testing your API with Schemathesis.
157
+ - Get detailed reports to identify and fix issues quickly.
158
+ - Reproduce failing test cases with cURL commands.
166
159
 
167
- > 💡 Your API schema can be either a URL or a local path to a JSON/YAML file.
160
+ 🔬 **Proven by Research**
168
161
 
169
- ### 💻 Command-Line Interface
162
+ - Validated through academic studies on API testing automation
163
+ - Featured in [ICSE 2022 paper](https://ieeexplore.ieee.org/document/9793781) on semantics-aware fuzzing
164
+ - Recognized in [ACM survey](https://dl.acm.org/doi/10.1145/3617175) as state-of-the-art RESTful API testing tool
170
165
 
171
- Quick and easy for those who prefer the command line.
166
+ ## Installation
172
167
 
173
- **Python**
168
+ Use Schemathesis via Docker, or install it from [PyPI](https://pypi.org/project/schemathesis/)
174
169
 
175
- 1. Install via pip: `python -m pip install schemathesis`
176
- 2. Run tests
170
+ ```console
171
+ # Via Docker.
172
+ $ docker pull schemathesis/schemathesis:stable
177
173
 
178
- ```bash
179
- st run --checks all https://example.schemathesis.io/openapi.json
174
+ # With pip.
175
+ $ pip install schemathesis
180
176
  ```
181
177
 
182
- **Docker**
178
+ ## Getting Started
183
179
 
184
- 1. Pull Docker image: `docker pull schemathesis/schemathesis:stable`
185
- 2. Run tests
180
+ Schemathesis works as a standalone CLI:
186
181
 
187
- ```bash
182
+ ```console
188
183
  docker run schemathesis/schemathesis:stable
189
184
  run --checks all https://example.schemathesis.io/openapi.json
185
+ # Or when installed with pip
186
+ schemathesis run --checks all https://example.schemathesis.io/openapi.json
190
187
  ```
191
188
 
192
- ### 🐍 Python Library
193
-
194
- For more control and customization, integrate Schemathesis into your Python codebase.
195
-
196
- 1. Install via pip: `python -m pip install schemathesis`
197
- 2. Add to your tests:
189
+ Or a Python library:
198
190
 
199
191
  ```python
200
192
  import schemathesis
@@ -207,19 +199,13 @@ def test_api(case):
207
199
  case.call_and_validate()
208
200
  ```
209
201
 
210
- > 💡 See a complete working example project in the [/example](https://github.com/schemathesis/schemathesis/tree/master/example) directory.
211
-
212
- ### :octocat: GitHub Integration
202
+ See a complete working example project in the [/example](https://github.com/schemathesis/schemathesis/tree/master/example) directory.
213
203
 
214
- **GitHub Actions**
215
-
216
- Run Schemathesis tests as a part of your CI/CD pipeline.
217
-
218
- Add this YAML configuration to your GitHub Actions:
204
+ Schemathesis can be easily integrated into your CI/CD pipeline using GitHub Actions. Add this block to your GitHub Actions to run Schemathesis against your API:
219
205
 
220
206
  ```yaml
221
207
  api-tests:
222
- runs-on: ubuntu-22.04
208
+ runs-on: ubuntu-latest
223
209
  steps:
224
210
  - uses: schemathesis/action@v1
225
211
  with:
@@ -228,42 +214,30 @@ api-tests:
228
214
  token: ${{ secrets.SCHEMATHESIS_TOKEN }}
229
215
  ```
230
216
 
231
- For more details, check out our [GitHub Action](https://github.com/schemathesis/action) repository.
232
-
233
- > 💡 See our [GitHub Tutorial](https://docs.schemathesis.io/tutorials/github) for a step-by-step guidance.
234
-
235
- **GitHub App**
236
-
237
- Receive automatic comments in your pull requests and updates on GitHub checks status. Requires usage of our SaaS platform.
238
-
239
- 1. Install the [GitHub app](https://github.com/apps/schemathesis).
240
- 2. Enable in your repository settings.
241
-
242
- ### Software as a Service
217
+ For more details, check out our [GitHub Action](https://github.com/schemathesis/action) repository or see our [GitHub Tutorial](https://docs.schemathesis.io/tutorials/github).
243
218
 
244
- Schemathesis CLI integrates with Schemathesis.io to enhance bug detection by optimizing test case generation for efficiency and realism. It leverages various techniques to infer appropriate data generation strategies, provide support for uncommon media types, and adjust schemas for faster data generation. The integration also detects the web server being used to generate more targeted test data.
219
+ For test reports in your pull requests, install the [GitHub app](https://github.com/apps/schemathesis):
245
220
 
246
- Schemathesis.io offers a user-friendly UI that simplifies viewing and analyzing test results. If you prefer an all-in-one solution with quick setup, we have a [free tier](https://schemathesis.io/#pricing) available.
247
-
248
- ## How it works
249
-
250
- Here’s a simplified overview of how Schemathesis operates:
251
-
252
- 1. **Test Generation**: Using the API schema to create a test generator that you can fine-tune to your testing requirements.
253
- 2. **Execution and Adaptation**: Sending tests to the API and adapting through statistical models and heuristics to optimize subsequent cases based on responses.
254
- 3. **Analysis and Minimization**: Checking responses to identify issues. Minimizing means simplifying failing test cases for easier debugging.
255
- 4. **Stateful Testing**: Running multistep tests to assess API operations in both isolated and integrated scenarios.
256
- 5. **Reporting**: Generating detailed reports with insights and cURL commands for easy issue reproduction.
221
+ ![image](https://raw.githubusercontent.com/schemathesis/schemathesis/master/img/service_github_report.png)
257
222
 
258
- ### Research Findings on Open-Source API Testing Tools
223
+ ### Schemathesis.io
259
224
 
260
- Our study, presented at the **44th International Conference on Software Engineering**, highlighted Schemathesis's performance:
225
+ Schemathesis CLI integrates with Schemathesis.io to enhance bug detection by optimizing test case generation. It also provides a user-friendly UI for viewing and analyzing test results. For a quick setup all-in-one solution, we offer a [free tier](https://schemathesis.io/#pricing).
261
226
 
262
- - **Defect Detection**: identified a total of **755 bugs** in **16 services**, finding between **1.4× to 4.5× more defects** than the second-best tool in each case.
227
+ ## Who's Using Schemathesis?
263
228
 
264
- - **High Reliability**: consistently operates seamlessly on any project, ensuring unwavering stability and reliability.
229
+ Schemathesis is used by a number of projects and companies, including direct usage or integration into other tools:
265
230
 
266
- Explore the full paper at https://ieeexplore.ieee.org/document/9793781 or pre-print at https://arxiv.org/abs/2112.10328
231
+ - Abstract Machines ([Magistrala](https://github.com/absmach/magistrala))
232
+ - Bundesstelle für Open Data ([smard-api](https://github.com/bundesAPI/smard-api))
233
+ - [CheckMK](https://github.com/Checkmk/checkmk)
234
+ - Chronosphere.io ([Calyptia](https://github.com/chronosphereio/calyptia-api))
235
+ - HXSecurity ([DongTai](https://github.com/HXSecurity/DongTai))
236
+ - Netflix ([Dispatch](https://github.com/Netflix/dispatch))
237
+ - [Pixie](https://github.com/pixie-io/pixie)
238
+ - [Qdrant](https://github.com/qdrant/qdrant)
239
+ - Spotify ([Backstage](https://github.com/backstage/backstage))
240
+ - WordPress ([OpenVerse](https://github.com/WordPress/openverse))
267
241
 
268
242
  ## Testimonials
269
243
 
@@ -299,20 +273,18 @@ Explore the full paper at https://ieeexplore.ieee.org/document/9793781 or pre-pr
299
273
 
300
274
  ## Contributing
301
275
 
302
- We welcome contributions in code and are especially interested in learning about your use cases.
303
- Understanding how you use Schemathesis helps us extend its capabilities to better meet your needs.
276
+ We welcome contributions in code and are especially interested in learning about your use cases. Your input is essential for improving Schemathesis and directly influences future updates.
304
277
 
305
- Feel free to discuss ideas and questions through [GitHub issues](https://github.com/schemathesis/schemathesis/issues) or on our [Discord channel](https://discord.gg/R9ASRAmHnA).
306
- For more details on how to contribute, see our [contributing guidelines](https://github.com/schemathesis/schemathesis/blob/master/CONTRIBUTING.rst).
278
+ ### How to Contribute
307
279
 
308
- ## Let's make it better together 🤝
280
+ 1. Discuss ideas and questions through [GitHub issues](https://github.com/schemathesis/schemathesis/issues) or on our [Discord channel](https://discord.gg/R9ASRAmHnA).
281
+ 2. For code contributions, see our [contributing guidelines](https://github.com/schemathesis/schemathesis/blob/master/CONTRIBUTING.rst).
282
+ 3. Share your experience and thoughts using [this feedback form](https://forms.gle/kJ4hSxc1Yp6Ga96t5).
309
283
 
310
- Your feedback is essential for improving Schemathesis.
311
- By sharing your thoughts, you help us develop features that meet your needs and expedite bug fixes.
284
+ ### Why Your Input Matters
312
285
 
313
- 1. **Why Give Feedback**: Your input directly influences future updates, making the tool more effective for you.
314
- 2. **How to Provide Feedback**: Use [this form](https://forms.gle/kJ4hSxc1Yp6Ga96t5) to share your experience.
315
- 3. **Data Privacy**: We value your privacy. All data is kept confidential and may be used in anonymized form to improve our test suite and documentation.
286
+ - Enables us to develop useful features and fix bugs faster
287
+ - Improves our test suite and documentation
316
288
 
317
289
  Thank you for contributing to making Schemathesis better! 👍
318
290
 
@@ -330,77 +302,6 @@ To discuss a custom support arrangement that best suits your organization, pleas
330
302
 
331
303
  Schemathesis is built on top of <a href="https://hypothesis.works/" target="_blank">Hypothesis</a>, a powerful property-based testing library for Python.
332
304
 
333
- ## Who's Using Schemathesis?
334
-
335
- Schemathesis is used by a number of projects and companies, including direct usage or integration into other tools:
336
-
337
- - Abstract Machines ([Magistrala](https://github.com/absmach/magistrala))
338
- - Bundesstelle für Open Data ([smard-api](https://github.com/bundesAPI/smard-api))
339
- - [CheckMK](https://github.com/Checkmk/checkmk)
340
- - [Chronosphere.io](https://github.com/chronosphereio/calyptia-api)
341
- - HXSecurity ([DongTai](https://github.com/HXSecurity/DongTai))
342
- - Netflix ([Dispatch](https://github.com/Netflix/dispatch))
343
- - [Pixie](https://github.com/pixie-io/pixie)
344
- - [Qdrant](https://github.com/qdrant/qdrant)
345
- - Spotify ([Backstage](https://github.com/backstage/backstage))
346
- - WordPress ([OpenVerse](https://github.com/WordPress/openverse))
347
-
348
- ## Additional content
349
-
350
- ### Papers
351
-
352
- - [Deriving Semantics-Aware Fuzzers from Web API Schemas](https://ieeexplore.ieee.org/document/9793781) by **@Zac-HD** and **@Stranger6667**
353
- - **Description**: Explores the automation of API testing through semantics-aware fuzzing. Presented at ICSE 2022.
354
- - **Date**: 20 Dec 2021
355
-
356
- ### Articles
357
-
358
- - [Boost Your FastAPI Reliability with Schemathesis Automated Testing](https://medium.com/@jeremy3/boost-your-fastapi-reliability-with-schemathesis-automated-testing-e8b70ff704f6) by **Jeremy**
359
- - **Description**: Showcases how easy Schemathesis covers API testing in FastAPI projects.
360
- - **Date**: 17 Jul 2024
361
-
362
- - [Implementing Schemathesis at PayLead](https://medium.com/paylead/implementing-schemathesis-at-paylead-a469a5d43626) by **Jérémy Pelletier** at **PayLead**
363
- - **Description**: In-depth walkthrough including custom hooks, stateful testing and CI/CD integration.
364
- - **Date**: 29 May 2024
365
-
366
- - [Auto-Generating & Validating OpenAPI Docs in Rust: A Streamlined Approach with Utoipa and Schemathesis](https://identeco.de/en/blog/generating_and_validating_openapi_docs_in_rust/) by **identeco**
367
- - **Description**: Demonstrates OpenAPI doc generation with Utoipa and validating it with Schemathesis.
368
- - **Date**: 01 Jun 2023
369
- - [Testing APIFlask with schemathesis](http://blog.pamelafox.org/2023/02/testing-apiflask-with-schemathesis.html) by **@pamelafox**
370
- - **Description**: Explains how to test APIFlask applications using Schemathesis.
371
- - **Date**: 27 Feb 2023
372
- - [Using Hypothesis and Schemathesis to Test FastAPI](https://testdriven.io/blog/fastapi-hypothesis/) by **@amalshaji**
373
- - **Description**: Discusses property-based testing in FastAPI with Hypothesis and Schemathesis.
374
- - **Date**: 06 Sep 2022
375
- - [How to use Schemathesis to test Flask API in GitHub Actions](https://notes.lina-is-here.com/2022/08/04/schemathesis-docker-compose.html) by **@lina-is-here**
376
- - **Description**: Guides you through setting up Schemathesis with Flask API in GitHub Actions.
377
- - **Date**: 04 Aug 2022
378
- - [Using API schemas for property-based testing](https://habr.com/ru/company/oleg-bunin/blog/576496/) (RUS) about Schemathesis by **@Stranger6667**
379
- - **Description**: Covers the usage of Schemathesis for property-based API testing.
380
- - **Date**: 07 Sep 2021
381
- - [Schemathesis: property-based testing for API schemas](https://dygalo.dev/blog/schemathesis-property-based-testing-for-api-schemas/) by **@Stranger6667**
382
- - **Description**: Introduces property-based testing for OpenAPI schemas using Schemathesis.
383
- - **Date**: 26 Nov 2019
384
-
385
- ### Videos
386
-
387
- - [API Testing With Unittest Mock, Pytest & Schemathesis](https://youtu.be/56whiv57T9I) by **
388
- Ssali Jonathan**
389
- - **Description**: Describes various API testing techniques and features Schemathesis for automatic test generation.
390
- - **Date**: 29 Jul 2024
391
- - [API Fuzzing: What it is and why you should use it](https://youtu.be/wX3GMJY9B6A) by **José Haro Peralta**
392
- - **Description**: A comprehensive overview and demo of Schemathesis.
393
- - **Date**: 14 Feb 2023
394
- - [Schemathesis tutorial](https://appdev.consulting.redhat.com/tracks/contract-first/automated-testing-with-schemathesis.html) with an accompanying [video](https://www.youtube.com/watch?v=4r7OC-lBKMg) by **Red Hat**
395
- - **Description**: Provides a hands-on tutorial for API testing with Schemathesis.
396
- - **Date**: 09 Feb 2023
397
- - [Effective API schemas testing](https://youtu.be/VVLZ25JgjD4) from DevConf.cz by **@Stranger6667**
398
- - **Description**: Talks about using Schemathesis for property-based API schema testing.
399
- - **Date**: 24 Mar 2021
400
- - [API-schema-based testing with schemathesis](https://www.youtube.com/watch?v=9FHRwrv-xuQ) from EuroPython 2020 by **@hultner**
401
- - **Description**: Introduces property-based API testing with Schemathesis.
402
- - **Date**: 23 Jul 2020
403
-
404
305
  ## License
405
306
 
406
307
  This project is licensed under the terms of the [MIT license](https://opensource.org/licenses/MIT).