PyQuickTest

PyQuickTest is an experimental python testing framework designed to deliver an easy-and-quick-to-start python testing mechanism.


Keywords
Code, testing, Experimental, framework
License
Python-2.0
Install
pip install PyQuickTest==0.1.0

Documentation

PyQuickTest

PyQuickTest is an experimental python testing framework designed to deliver an easy-and-quick-to-start python testing mechanism.

Getting started

PyQuickTest test kit is divided into few categories:

Decorators

@is_test

Transform the decorated function into a test function for the framework.
example:
    "my_function" is not a test.
    def my_function():
        ok()
    ~~~~~~~~~~~~
    "my_function" is a test.
    @is_test()
    def my_function():
        ok()

@qpt_group

Categorize the decorated function as belonging to the given groups and subgroups. Groups and subgroups should be given as arguments.
example:
    "my_function" has no test group.
    @is_test()
    def my_function():
        ok()
~~~~~~~~~~~~~~
    "my_function" belong to the test group "Group".
    @is_test()
    @qpt_group("Group")
    def my_function():
        ok()
~~~~~~~~~~~~~~
    "my_function" belong to the test group "Group" and subgroup "Subgroup".
    @is_test()
    @qpt_group("Group", "Subgroup")
    def my_function():
        ok()

@qpt_execnbr

Order the decorated test function to be run a given number of times.
example:
    "my_function" is run once.
    @is_test()
    def my_function():
        ok()
    ~~~~~~~~~~~~
    "my_function" is run 100 times.
    @is_test()
    @qpt_execnbr(100)
    def my_function():
        ok()

@qpt_parametrize

Use the given parameters to the test function.
example:
    "my_function" will fail once tested because no arg is provided.
    @is_test()
    def my_function(arg):
        ok()
    ~~~~~~~~~~~~~~
    "my_function" will will be run with arg = 8.
    @is_test()
    @qpt_parametrize(8)
    def my_function(arg):
        ok()
    ~~~~~~~~~~~~~~
    "my_function" will will be run with arg1 = 8, arg2 = 'a' and arg3 = [45.19].
    @is_test()
    @qpt_parametrize(8, 'a', [45.19])
    def my_function(arg1, arg2, arg3):
        ok()

Assertion functions

ok

Validate the current test.
example:
    The test "my_function" will pass.
    @is_test()
    def my_function(arg):
        ok()

ko

Unvalidate the current test with an optional error message.
example:
    The test "my_function" will fail.
    @is_test()
    def my_function(arg):
        ko("This test failed!")

check

Unvalidate the current test if the given boolean is False. An optional error message can be provided. If the given boolean is True, do nothing.
example:
    The test "my_function" will fail if the generated number 'a' is lower than 10.
    @is_test()
    def my_function(arg):
        a = gen_int()
        check(a > 10, "a isn't greater than 10")
        ok()

ensure

Validate or unvalidate the current test depending on the given boolean. An optional error message can be provided.
example:
    The test "my_function" will pass if the generated number 'a' if greater than 10, and fail otherwise.
    @is_test()
    def my_function(arg):
        a = gen_int()
        ensure(a > 10, "a isn't greater than 10")

Generator functions

gen_none

Generate None.

gen_bool

Generate a random boolean.

gen_int

Generate a random integer. Min and max can be provided.

gen_signed_int

Generate a random signed integer. Min / max can be given.

gen_float

Generate a random float.

gen_signed_float

Generate a random signed float. Min and max can be given.

gen_ascii_lower_char

Generate a random ascii lower char.

gen_ascii_upper_char

Generate a random ascii upper char.

gen_ascii_char

Generate a random ascii char.

gen_ascii_lower_string

Generate a random ascii lower string.

gen_ascii_upper_string

Generate a random ascii upper string.

gen_ascii_string

Generate a random ascii string.

gen_callable

Generate a random callable. The number of arguments can be specified with nbr_args, as well as the generator function for the returned value with gen_return. If raised_exception = True, then the callable will raise an exception.

gen_generator

Generate a random iterator. The iterator length can be provided, as well as the elements generator function with the gen_element argument.

gen_list

Generate a random list. The list length can be provided, as well as the elements generator function with the the gen_element argument.

gen_dict

Generate a random dict. The dict length can be provided, as well as the keys generator function with the the gen_keys argument, and the element generator function with the gen_element argument.

gen_random_value

Generate a random value from any single value generator decorated with the "is_gen_value" flag attribute.

gen_random_iterable

Generate a random iterable from any iterable generator decorated with the "is_gen_iterable" flag attribute.

gen_random

Generate a random data from any generator decorated with the "is_gen" flag attribute.

Testing functions

test_one

Run a single test function. A few optional arguments can be provided, but if this function is directly used alone, only passing the test function as a parameter is certainly enough.
example:
    Run the test "my_function".
    test_one(my_function)
    ~~~~~~~~~~~~~~~
    Run the test "my_function" with a printed prefix "==>" before the test result output.
    test_one(
        my_function,
        prefix="==>"
    )
    ~~~~~~~~~~~
    Run the test "my_function" with an indentation of 4 spaces and a printed prefix "==>" before the test result output.
    test_one(
        my_function,
        prefix="==>"
        indent=4
    )

test_group

Run a group of test functions. If you want to run a subgroup, pass every group and subgroup as a parameter. If no context is provided, it will be obtained by importing the caller file. If a filename is provided, the context will be retrieved from this file.
example:
    Run the test functions from group "G".
    test_group("G")
    ~~~~~~~~~~
    Run the test functions from group "G" and subgroup "Subgroup".
    test_group(
        "G",
        "Subgroup"
    )
    ~~~~~~~~~
    Run the test functions from group "G", subgroup "SG" and sub-subgroup "SSG".
    test_group(
        "G",
        "SG",
        "SSG",
        filename="tests.py"
    )

test_all

Run every test functions. If no context is provided, it will be obtained by importing the caller file. If a filename is provided, the context will be retrieved from this file.
example:
    Run the test functions from caller file context.
    test_all()
    ~~~~~~
    Run the test functions from file "test.py".
    test_all(
        filename="tests.py"
    )

Installation

TBA