- Automatic JSON Schema generation from data examples (using the
gensonlibrary). - Format detection: Automatic detection and validation of string formats (email, UUID, date, date-time, URI, IPv4).
- Schema storage and management.
- Validation of data against saved schemas.
- Schema update via
--schema-update(create new schemas, remove unused ones, update existing). - Support for both
asyncand synchronous functions. - Support for
Uniontypes and optional fields. - Built-in diff comparison of changes via jsonschema-diff.
pip install pytest-jsonschema-snapshot- Use the
schemashotfixture in your tests
from you_lib import API
from typed_schema_shot import SchemaShot
@pytest.mark.asyncio
async def test_something(schemashot: SchemaShot):
data = await API.get_data()
# There are data - need to validate through the schema
schemashot.assert_json_match(
data, # data for validation / convert to schema
"test_name" # name of the schema
)
schema = await API.get_schema()
# There is a schema (data is optional) - validate by what is
schemashot.assert_schema_match(
schema,
(API.get_schema, "test_name", 1) # == `API.get_schema.test_name.1` filename
data=data # data for validation (optional)
)-
On first run, generate schemas with the
--schema-updateor--schema-reset(what is the difference? see the documentation) flagpytest --schema-update --save-original
--save-original: save the original data on which the validation was performed. Saving occurs when
--schema-updateor--schema-reset, if you run the schema update without this attribute, the old original data will be deleted without saving new ones. -
On subsequent runs, tests will validate data against saved schemas
pytest
-
Union Types: support multiple possible types for fields
-
Optional Fields: automatic detection of required and optional fields
-
Format Detection: automatic detection of string formats including:
Format Example JSON Schema Email user@example.com{"format": "email"}UUID 550e8400-e29b-41d4-a716-446655440000{"format": "uuid"}Date 2023-01-15{"format": "date"}Date-Time 2023-01-01T12:00:00Z{"format": "date-time"}URI https://example.com{"format": "uri"}IPv4 192.168.1.1{"format": "ipv4"} -
Cleanup: automatic removal of unused schemas when running in update mode
-
Schema Summary: colored terminal output showing created, updated, deleted and unused schemas
Advanced Usage? Check the docs!
- Commit schemas to version control: Schemas should be part of your repository
- Review schema changes: When schemas change, review the diffs carefully without
--schema-updateresets. - Clean up regularly: Use
--schema-updateperiodically to remove unused schemas - Descriptive names: Use clear, descriptive names for your schemas
# Fork the repo, then:
git clone https://github.com/Miskler/pytest-jsonschema-snapshot.git
cd jsonschema-diff
# Install
make reinstall
# Ensure everything works
make test
make lint
make type-check
# After code editing
make formatMIT License - see LICENSE file for details.
Made with ❤️ for developers working with evolving JSON schemas

