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
и запускайте тесты, написанные с использованием обоих фреймворков, без каких-либо дополнительных настроек в большинстве случаев.