I have a bunch of tests which I decided to put within a class, sample code is below:
class IntegrationTests:
@pytest.mark.integrationtest
@pytest.mark.asyncio
async def test_job(self):
assert await do_stuff()
However, when I try to run the tests:
pipenv run pytest -v -m integrationtest
, they are not detected at all, where I got the following before moving them to a class:
5 passed, 4 deselected in 0.78 seconds
I now get this:
2 passed, 4 deselected in 0.51 seconds
Why does pytest
not detect these tests? Are test classes not supported?
The name of the class needs to start with Test
for the pytest discovery to find it.
class TestIntegration:
@pytest.mark.integrationtest
@pytest.mark.asyncio
async def test_job(self):
assert await do_stuff()
See Conventions for Python test discovery
From the docs:
In case you need to change the naming convention for test files, classes and tests, you can create a file
pytest.ini
, and set the optionspython_files
,python_classes
, andpython_functions
:
# content of pytest.ini
# Example 1: have pytest look for "check" instead of "test"
# can also be defined in tox.ini or setup.cfg file, although the section
# name in setup.cfg files should be "tool:pytest"
[pytest]
python_files = check_*.py
python_classes = *Tests
python_functions = *_check
In your case, if you don't want to change the name of the class IntegrationTests
, set python_classes
to *Tests
.
pytest /path/to/test_file_name.py::ClassName
pytest /path/to/test_file_name.py::ClassName::test_name
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With