The pytest-pyspec plugin provides semantics to the pytest output. It transforms the pytest's output into a result similar to the RSpec.
The default pytest output is like the following:
test/test_pytest.py::TestFunction::test_use_test_name PASSED
test/test_pytest.py::TestFunction::test_use_the_prefix_test PASSED
test/test_pytest.py::TestFunction::test_use_the_prefix_it PASSED
test/test_pytest.py::TestFunction::WithDocstring::test_use_docstring PASSED
The pytest-pyspec transforms the output into the following:
A function
✓ use test name
✓ use the prefix test
✓ use the prefix it
A function
with docstring
✓ use docstring
You just need to prefix your test case classes with:
- describe / test to represent objects
- with / without to represent context
And prefix your tests with:
- it / test to represent objects
The following is a sample test that generates the previous tests` output.
class TestFunction:
def test_use_test_name(self):
assert 1 == 1
def test_use_the_prefix_test(self):
assert 1 == 1
def test_use_the_prefix_it(self):
assert 1 == 1
class WithDocstring:
def test_use_docstring(self):
assert 1 == 1
Moreover, you can use a docstring to overwrite the test description. The following tests have the same output as the previous tests:
class TestA:
""" Function """
def test_1(self):
""" use test name """
assert 1 == 1
def test_2(self):
""" use the prefix test """
assert 1 == 1
def test_3(self):
""" use the prefix it """
assert 1 == 1
class TestB:
""" with docstring """
def test_4(self):
""" use docstring """
assert 1 == 1
The following test sample:
import pytest
class DescribeHouse:
def it_has_door(self):
assert 1 == 1
class WithTwoFloors:
def it_has_stairs(self):
assert 1 == 1
def it_has_second_floor(self):
assert 1 == 1
def it_has_third_floor(self):
assert 1 == 2
Generates the following output:
test/test_sample.py
A house
✓ has door
A house
with two floors
✓ has stairs
✓ has second floor
✗ has third floor
pip install pytest pytest-pyspec
pytest --pyspec