unittest и pytest в одном проекте, pytest автоматически обнаруживает и запускает тесты, написанные с использованием unittest. Дополнительной настройки обычно не требуется. Просто запустите pytest, и он найдет и выполнит ваши существующие тесты unittest наряду с тестами pytest. Важно обеспечить, чтобы обе системы тестирования не пересекались в именовании тестовых классов/функций для избежания неоднозначности. Если необходима особая конфигурация, можно использовать файлы pytest.ini или conftest.py для управления поведением pytest.
Интеграция unittest и pytest в одном проекте вполне возможна и может быть полезна для постепенного перехода от старого фреймворка тестирования (unittest) к более современному и гибкому (pytest).
Почему может понадобиться:
pytest.unittest, и вам может потребоваться запускать их в вашем проекте.Как это работает:
pytest автоматически обнаруживает и запускает тесты, написанные в стиле unittest. Вам не нужно вносить никаких изменений в существующие тесты unittest для того, чтобы pytest их запустил. pytest распознает классы, унаследованные от unittest.TestCase, и методы, начинающиеся с test_ внутри этих классов.
Пример структуры проекта:
my_project/
├── my_module/
│ ├── __init__.py
│ └── my_code.py
├── tests/
│ ├── __init__.py
│ ├── test_pytest.py # Тесты, написанные с использованием pytest
│ └── test_unittest.py # Тесты, написанные с использованием unittest
└── ...
Пример теста unittest (tests/test_unittest.py):
import unittest
class MyTestCase(unittest.TestCase):
def test_addition(self):
self.assertEqual(1 + 1, 2)
def test_subtraction(self):
self.assertEqual(5 - 3, 2)
if __name__ == '__main__':
unittest.main()
Пример теста pytest (tests/test_pytest.py):
def test_multiplication():
assert 2 * 2 == 4
def test_division():
assert 10 / 2 == 5
Запуск тестов:
Просто запустите pytest из корня вашего проекта:
pytest
pytest обнаружит и запустит как тесты unittest, так и тесты pytest.
Дополнительные возможности:
pytest имеет мощные возможности конфигурации. Вы можете использовать файл pytest.ini, tox.ini или pyproject.toml для настройки поведения pytest, например, для указания каталогов с тестами, добавления дополнительных аргументов командной строки и т.д.unittest не используют фикстуры pytest напрямую, pytest может использовать фикстуры для настройки окружения, которое необходимо для ваших тестов unittest.pytest (@pytest.mark.marker_name) для фильтрации тестов, например, для запуска только тестов pytest или только тестов unittest. Однако, маркировка применяется к функциям и классам тестов pytest, и не применяется напрямую к классам unittest. Для фильтрации тестов unittest можно использовать другие механизмы фильтрации, предоставляемые pytest.Заключение:
pytest обеспечивает отличную совместимость с тестами unittest, что позволяет интегрировать их в один проект и плавно переходить на новый фреймворк тестирования. Просто установите pytest и запускайте тесты, написанные с использованием обоих фреймворков, без каких-либо дополнительных настроек в большинстве случаев.