Skip to main content

Library to generate random test data using Hypothesis based on Lollipop schema

Project description

License: MIT Build Status PyPI

Library to generate random test data using Hypothesis based on Lollipop schema.

Example

from collections import namedtuple
import lollipop.types as lt
import lollipop.validators as lv
import string

EMAIL_REGEXP = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]{2,}\.[a-zA-Z0-9-.]{2,}$"
Email = lt.validated_type(lt.String, 'Email', lv.Regexp(EMAIL_REGEXP))

User = namedtuple('User', ['name', 'email', 'age'])

USER = lt.Object({
    'name': lt.String(validate=lv.Length(min=1)),
    'email': Email(),
    'age': lt.Optional(lt.Integer(validate=lv.Range(min=18))),
}, constructor=User)

import hypothesis as h
import hypothesis.strategies as hs
import lollipop_hypothesis as lh

# Write a test using data generation strategy based on Lollipop schema
@h.given(lh.type_strategy(USER))
def test_can_register_any_valid_user(user):
    register(user)

# Configure custom strategy for Email type
lh.register(
    Email,
    lambda _, type, context=None: \
        hs.tuples(
            hs.text('abcdefghijklmnopqrstuvwxyz'
                    'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
                    '0123456789'
                    '_.+-', min_size=1),
            hs.lists(
                hs.text('abcdefghijklmnopqrstuvwxyz'
                        'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
                        '0123456789', min_size=2),
                min_size=2,
                average_size=3,
            )
        ).map(lambda (name, domain_parts): name + '@' + '.'.join(domain_parts)),
)

# Or configure custom strategy for the whole type instance
lh.register(
    USER,
    lambda registry, type, context=None: \
        hs.builds(
            User,
            name=hs.text(min_size=1),
            email=registry.convert(Email(), context),
            age=hs.integers(min_value=0, max_value=100),
        )
)

Installation

$ pip install lollipop-hypothesis

# install optional package for regex support
$ pip install lollipop-hypothesis[regex]

Requirements

License

MIT licensed. See the bundled LICENSE file for more details.

Project details


Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
lollipop_hypothesis-0.2-py2.py3-none-any.whl (7.1 kB) Copy SHA256 hash SHA256 Wheel py2.py3
lollipop-hypothesis-0.2.tar.gz (7.2 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page