Skip to main content

pytest plugin to generate random data inspired by QuickCheck

Project description

Requirements

  • Python 2.6 or 3.x and later

Features

  • Provide pytest.mark.randomize function for generating random test data

Installation

$ easy_install pytest-quickcheck # or
$ pip install pytest-quickcheck

Quick Start

Just pass the signature of function to randomize marker. The signature is represented a tuple consist of argument name and its type.

@pytest.mark.randomize(("i1", "int"), ("i2", "int"), ncalls=1)
def test_generate_ints(i1, i2):
    pass

More complex data structure:

@pytest.mark.randomize(
    ("d1", "{'x': int, 'y': [str, (int, int)], 'z': {'x': str}}")
)
def test_generate_dict(d1):
    pass

The randomize marker is able to use with parametrize marker.

@pytest.mark.parametrize("prime", [2, 3, 5])
@pytest.mark.randomize(("i1", "int"), ("f1", "float"), ncalls=1)
def test_gen_parametrize_with_randomize_int_float(prime, i1, f1):
    pass

Using command line option --randomize restricts only the randomize test.

$ py.test -v --randomize test_option.py
==========================================================================================
test session starts
==========================================================================================
test_option.py:5: test_normal SKIPPED
test_option.py:8: test_generate_ints[74-22] PASSED

Usage

There some options for each data type:

$ py.test --markers
@pytest.mark.randomize((argname, type), **options): mark the test function with
random data generating any data type.
  There are options for each data type: (see doc for details)
  int: ['min_num', 'max_num']
  float: ['min_num', 'max_num', 'positive']
  str: ['encoding', 'fixed_length', 'max_length', 'str_attrs']
  • common option

    ncalls: set the number of calls. Defaults to 3. (e.g. ncalls=5)
    choices: choose from given sequence. (e.g. choices=[3, 5, 7])
  • int

    min_num: lower limit for generating integer number. (e.g. min_num=0)
    max_num: upper limit for generating integer number. (e.g. max_num=10)
  • float

    min_num: lower limit for generating real number. (e.g. min_num=0.0)
    max_num: upper limit for generating real number. (e.g. max_num=1.0)
    positive: generate only positive real number if set to True. Defaults to False. (e.g. positive=True)
  • str

    encoding: generate unicode string encoded given character code. (e.g. encoding=”utf-8”) # for Python 2.x only
    fixed_length: generate fixed length string. (e.g. fixed_length=8)
    max_length: generate the string less than or equal to max length (e.g. max_length=32)
    str_attrs: generate the string in given letters. set a tuple consist of attribute names in the string module. (e.g. str_attrs=(“digits”, “punctuation”)

Probably, tests/test_plugin_basic.py is useful for learning how to use these options.

Python 3

For Python 3, the signature of function is given as function annotation.

@pytest.mark.randomize(min_num=0, max_num=2, ncalls=5)
def test_generate_int_anns(i1: int):
    pass

Mixed representation is also OK, but it might not be useful.

@pytest.mark.randomize(("i1", "int"), fixed_length=8)
def test_generate_arg_anns_mixed(i1, s1: str):
    pass

See also: PEP 3107 – Function Annotations

ChangeLog

0.6 (2012-03-29)

  • add generating data feature from function annotation

0.5 (2012-03-18)

  • first release

Project details


Download files

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

Files for pytest-quickcheck, version 0.6
Filename, size File type Python version Upload date Hashes
Filename, size pytest-quickcheck-0.6.tar.gz (10.5 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page