Skip to main content

Generate test data from JSON schemata with Hypothesis

Project description

hypothesis-jsonschema

A Hypothesis strategy for generating data that matches some JSON schema.

Here's the PyPI page.

API

The public API consists of just one function: hypothesis_jsonschema.from_schema, which takes a JSON schema and returns a strategy for allowed JSON objects.

from hypothesis import given

from hypothesis_jsonschema import from_schema


@given(from_schema({"type": "integer", "minimum": 1, "exclusiveMaximum": 10}))
def test_integers(value):
    assert isinstance(value, int)
    assert 1 <= value < 10


@given(
    from_schema(
        {"type": "string", "format": "card"},
        # Standard formats work out of the box.  Custom formats are ignored
        # by default, but you can pass custom strategies for them - e.g.
        custom_formats={"card": st.sampled_from(EXAMPLE_CARD_NUMBERS)},
    )
)
def test_card_numbers(value):
    assert isinstance(value, str)
    assert re.match(r"^\d{4} \d{4} \d{4} \d{4}$", value)


@given(from_schema({}, allow_x00=False, codec="utf-8").map(json.dumps))
def test_card_numbers(payload):
    assert isinstance(payload, str)
    assert "\0" not in payload  # use allow_x00=False to exclude null characters
    # If you want to restrict generated strings characters which are valid in
    # a specific character encoding, you can do that with the `codec=` argument.
    payload.encode(codec="utf-8")

For more details on property-based testing and how to use or customise strategies, see the Hypothesis docs.

JSONSchema drafts 04, 05, and 07 are fully tested and working. As of version 0.11, this includes resolving non-recursive references!

Supported versions

hypothesis-jsonschema requires Python 3.6 or later. In general, 0.x versions will require very recent versions of all dependencies because I don't want to deal with compatibility workarounds.

hypothesis-jsonschema may make backwards-incompatible changes at any time before version 1.x - that's what semver means! - but I've kept the API surface small enough that this should be avoidable. The main source of breaks will be if or when schema that never really worked turn into explicit errors instead of generating values that don't quite match.

You can sponsor me to get priority support, roadmap input, and prioritized feature development.

Contributing to hypothesis-jsonschema

We love external contributions - and try to make them both easy and fun. You can read more details in our contributing guide, and see everyone who has contributed on GitHub. Thanks, everyone!

Changelog

Patch notes can be found in CHANGELOG.md.

Security contact information

To report a security vulnerability, please use the Tidelift security contact. Tidelift will coordinate the fix and disclosure.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hypothesis-jsonschema-0.23.1.tar.gz (42.9 kB view details)

Uploaded Source

Built Distribution

hypothesis_jsonschema-0.23.1-py3-none-any.whl (29.2 kB view details)

Uploaded Python 3

File details

Details for the file hypothesis-jsonschema-0.23.1.tar.gz.

File metadata

File hashes

Hashes for hypothesis-jsonschema-0.23.1.tar.gz
Algorithm Hash digest
SHA256 f4ac032024342a4149a10253984f5a5736b82b3fe2afb0888f3834a31153f215
MD5 240b837b4f6793d14a46cc54a3e88bb9
BLAKE2b-256 4fad2073dd29d8463a92c243d0c298370e50e0d4082bc67f156dc613634d0ec4

See more details on using hashes here.

Provenance

File details

Details for the file hypothesis_jsonschema-0.23.1-py3-none-any.whl.

File metadata

File hashes

Hashes for hypothesis_jsonschema-0.23.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a4d74d9516dd2784fbbae82e009f62486c9104ac6f4e3397091d98a1d5ee94a2
MD5 0bfb4d974701af5f61b54afab847e3df
BLAKE2b-256 1744635a8d2add845c9a2d99a93a379df77f7e70829f0a1d7d5a6998b61f9d01

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page