Skip to main content

py.test plugin for regression tests

Project description

This pytest-plugin allows capturing of output of test functions which can be compared to the captured output from former runs.

This is a common technique to start TDD if you have to refactor legacy code which ships without tests.

To install and activate this plugin execute:

$ pip install pytest-regtest

from your command line.

This py.test plugin provides a fixture named regtest for recording data by writing to this fixture, which behaves like an output stream:

from __future__ import print_function

def test_squares_up_to_ten(regtest):

    result = [i*i for i in range(10)]

    # one way to record output:
    print(result, file=regtest)

    # alternative method to record output:
    regtest.write("done")

If you run this test script with py.test the first time we have no recorded output for this test function so far and thus the test will fail with a message including a diff:

$ py.test
...

def test_squares_up_to_ten(regtest):
E
>       Regression test failed
>
>       --- is
>       +++ tobe
>       @@ -1,2 +1 @@
>       -[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>       -done
>       +

For accepting this output, we run py.test with the –reset-regtest flag:

$ py.test --regtest-reset

The recorded output is written to files in the subfolder _regtest_outputs next to your test script(s).

Now the next execution of py.test will succeed:

$ py.test

Other features

Another way to record output is the regtest_redirect fixture:

def test_squares_up_to_ten(regtest_redirect):

    result = [i*i for i in range(10)]

    with regtest_redirect():
        print result

You can reset recorded output of files and functions individually as:

$ py.test --regtest-reset tests/test_00.py
$ py.test --regtest-reset tests/test_00.py::test_squares_up_to_ten

If you want to check that the testing function still produces the same output, you ommit the flag and run you tests as usual:

$ py.test

This shows diffs for the tests failing because the current and recorded output deviate.

To supress the diff and only see the stats use:

$ py.test --regtest-nodiff

If you want to see the during the test run recorded output use:

$ py.test --regtest-tee -s

If you develop on mixed platforms it might be usefull to ignore white spaces at the end of the lines when comparing output. This can be achieved by specifying:

$ py.test --regtest-ignore-line-endings

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

pytest-regtest-0.12.1.tar.gz (5.2 kB view details)

Uploaded Source

File details

Details for the file pytest-regtest-0.12.1.tar.gz.

File metadata

File hashes

Hashes for pytest-regtest-0.12.1.tar.gz
Algorithm Hash digest
SHA256 b39fb2400d79f73de2772172c1e26a0321d971fd7977cd33729600cc9b3a9068
MD5 b6136e314c73175e37368d177b3a45c8
BLAKE2b-256 71cf928ed1eb3aa9357c8f17316ea71c3757546b5834c0176d2fd54b41b722a9

See more details on using hashes here.

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