My pytest setup is running very slow, especially during collection phase.
So I have put up a pytest setup for my Django project, and each Django app's test-files are located in its own folder, i.e., the tree looks as follows
root
|
+--a
| |
| +--tests
| |
| +--conftest.py
| +--testAa.py
| +--testBa.py
+--b
| |
| +--tests
| |
| +--conftest.py
| +--testAb.py
| +--testBb.py
...
pytest.ini
The pytest.ini file specifies where to look for the tests and has the following content
[pytest]
DJANGO_SETTINGS_MODULE = project.project.settings.test
python_files = tests.py test_*.py *_tests.py
addopts = --reuse-db
For each app within the tests
folder I have a file called contest.py
. This file creates a set of objects that are used multiple times in the test files. For instance if an object of class A
is used more than once, a contest creates that variable once and the tests use this conftest as input. Each conftest has the decorator @pytest.fixture(scope="function")
, and the tests have the decorator @pytest.mark.django_db
.
I don't think the loading times are caused by the conftests, or the decorators discussed in the last paragraph, but rather the tree structure and pytest.ini
file I have put up. Are there any rules for what is a good structure for this? As I said, the loading times are extremely high for collecting the tests. To be more accurate, I have about 80 tests, and collecting them takes about 40 seconds. Running them all takes an additional 20.