Skip to content
unittest subTest() support and subtests fixture
Branch: master
Clone or download
Latest commit efa2980 Apr 5, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
tests
.gitignore Initial commit Mar 19, 2019
.pre-commit-config.yaml Setup CI and update general configuration Mar 19, 2019
.travis.yml Configure travis stages and deployment Apr 1, 2019
CHANGELOG.rst
HOWTORELEASE.rst Add HOWTORELEASE docs Apr 1, 2019
LICENSE Add cookiecutter files Mar 19, 2019
README.rst Add black badge Apr 4, 2019
azure-pipelines.yml Skip pypy3 build on Windows Mar 19, 2019
pytest_subtests.py
setup.py
tox.ini Support subtests with xdist>=1.28 Apr 3, 2019

README.rst

pytest-subtests

unittest subTest() support and subtests fixture.

PyPI version Python versions See Build Status on Travis CI See Build Status on Azure

This pytest plugin was generated with Cookiecutter along with @hackebrot's cookiecutter-pytest-plugin template.

Features

  • Adds support for TestCase.subTest.
  • New subtests fixture, providing similar functionality for pure pytest tests.

Requirements

  • Python >= 3.4.
  • pytest >= 4.4.

Installation

You can install pytest-subtests via pip from PyPI:

$ pip install pytest-subtests

Usage

unittest subTest() example

import unittest


class T(unittest.TestCase):
    def test_foo(self):
        for i in range(5):
            with self.subTest("custom message", i=i):
                self.assertEqual(i % 2, 0)


if __name__ == "__main__":
    unittest.main()

Output

λ pytest .tmp\test-unit-subtest.py
======================== test session starts ========================
...
collected 1 item

.tmp\test-unit-subtest.py FF.                                  [100%]

============================= FAILURES ==============================
_________________ T.test_foo [custom message] (i=1) _________________

self = <test-unit-subtest.T testMethod=test_foo>

    def test_foo(self):
        for i in range(5):
            with self.subTest('custom message', i=i):
>               self.assertEqual(i % 2, 0)
E               AssertionError: 1 != 0

.tmp\test-unit-subtest.py:9: AssertionError
_________________ T.test_foo [custom message] (i=3) _________________

self = <test-unit-subtest.T testMethod=test_foo>

    def test_foo(self):
        for i in range(5):
            with self.subTest('custom message', i=i):
>               self.assertEqual(i % 2, 0)
E               AssertionError: 1 != 0

.tmp\test-unit-subtest.py:9: AssertionError
================ 2 failed, 1 passed in 0.07 seconds =================

subtests fixture example

def test(subtests):
    for i in range(5):
        with subtests.test(msg="custom message", i=i):
            assert i % 2 == 0

Output

λ pytest .tmp\test-subtest.py
======================== test session starts ========================
...
collected 1 item

.tmp\test-subtest.py .F.F..                                    [100%]

============================= FAILURES ==============================
____________________ test [custom message] (i=1) ____________________

    def test(subtests):
        for i in range(5):
            with subtests.test(msg='custom message', i=i):
>               assert i % 2 == 0
E               assert (1 % 2) == 0

.tmp\test-subtest.py:4: AssertionError
____________________ test [custom message] (i=3) ____________________

    def test(subtests):
        for i in range(5):
            with subtests.test(msg='custom message', i=i):
>               assert i % 2 == 0
E               assert (3 % 2) == 0

.tmp\test-subtest.py:4: AssertionError
================ 2 failed, 1 passed in 0.07 seconds =================

Contributing

Contributions are very welcome. Tests can be run with tox:

tox -e py37,linting

License

Distributed under the terms of the MIT license, "pytest-subtests" is free and open source software

Issues

If you encounter any problems, please file an issue along with a detailed description.

You can’t perform that action at this time.