В этой статье блога мы рассмотрим различные методы организации и запуска тестов pytest, которые хранятся в подпапках. Логическая и структурированная организация тестов может значительно повысить удобство сопровождения и читабельность вашего набора тестов. Мы рассмотрим различные подходы и примеры кода, которые помогут вам эффективно управлять тестами pytest во вложенных папках.
Методы:
-
Использование команды
pytest.
Один из самых простых способов запуска тестов pytest во вложенных папках — использование командыpytestс путь к подпапке. Например, чтобы запустить тесты в подпапке с именем «tests», вы можете использовать следующую команду:pytest tests/ -
Использование хука
pytest_collection_modifyitems.
Вы можете использовать хукpytest_collection_modifyitemsдля динамического изменения коллекции тестовых элементов перед их запуском. Это позволяет вам настроить способ обнаружения и организации тестов pytest в подпапках. Вот пример использования хука в файлеconftest.py:# conftest.py import pytest import os def pytest_collection_modifyitems(config, items): for item in items: if os.path.dirname(item.nodeid).startswith("tests/"): item.add_marker(pytest.mark.subfolder)Затем вы можете использовать маркер
@pytest.mark.subfolderдля выбора и запуска тестов в нужных подпапках. -
Использование файла конфигурации
pytest.ini.
Другой подход — использовать файл конфигурацииpytest.iniдля указания подпапок, в которых расположены тесты. Создайте файлpytest.iniв корневом каталоге вашего проекта и добавьте следующие строки:[pytest] testpaths = testsЭта конфигурация предписывает pytest искать тесты в подпапке «tests».
-
Использование Python
unittestTest Discovery.
Если ваши тесты написаны с использованием платформыunittest, вы можете использовать ее встроенный механизм обнаружения тестов. Создайте файл с именем__init__.pyв каждой подпапке, содержащей тесты, а затем используйте следующую команду для запуска тестов:python -m unittest discover -s testsЭта команда рекурсивно обнаруживает и запускает все тесты в подпапке «tests».
-
Использование обнаружения пользовательских тестов.
Если ни один из вышеперечисленных методов не соответствует вашим потребностям, вы можете реализовать логику обнаружения пользовательских тестов с помощью Pythonosиimportlib. модули. Вот пример пользовательской функции обнаружения тестов:import os import importlib def discover_tests(directory): for root, dirs, files in os.walk(directory): for file in files: if file.startswith("test_") and file.endswith(".py"): module_name = file[:-3] module_path = os.path.join(root, file) module = importlib.import_module(module_name) yield module # Usage for test_module in discover_tests("tests"): # Run tests from the discovered modules ...