unittest
или pytest
с CI/CD, необходимо:
unittest
: python -m unittest discover
(или указать конкретный тестовый файл).pytest
: pytest
(или указать конкретные тесты/папку).pytest
(например, JUnit XML).pytest
можно использовать плагины, такие как pytest-cov
для генерации отчетов о покрытии кода, или pytest-html
для создания HTML отчетов..gitlab-ci.yml
:
stages:
- test
test:
stage: test
image: python:3.9
before_script:
- pip install -r requirements.txt
script:
- pytest --junitxml=report.xml # Запуск pytest с генерацией отчета
artifacts:
reports:
junit: report.xml # Публикация отчета
Интеграция `unittest` и `pytest` с системой непрерывной интеграции (CI/CD) – это важный шаг для автоматизации тестирования вашего Python-проекта и обеспечения качества кода на протяжении всего цикла разработки. Основная задача состоит в автоматическом запуске тестов при каждом изменении кода (например, при push в репозиторий) и получении обратной связи о результатах тестирования.
Общий подход:
pip install -r requirements.txt
где `requirements.txt` содержит список всех необходимых библиотек, включая `unittest` или `pytest` и любые библиотеки для тестирования (например, `coverage`, `mock`).python -m unittest discover -s tests -p "test_*.py"
Эта команда обнаруживает и запускает все тесты, соответствующие шаблону `test_*.py` в каталоге `tests`.pytest --cov=./ --cov-report term-missing tests/
Эта команда запускает тесты с включенным покрытием кода (coverage). `--cov=.` указывает корневой каталог для отслеживания покрытия, а `--cov-report term-missing` указывает, что отчет о покрытии должен быть выведен в терминал и показывать отсутствующие строки. Каталог `tests/` определяет, где искать тестовые файлы.pytest --junitxml=report.xml tests/
И CI/CD система должна быть настроена для обработки этого XML файла.coverage run -m pytest tests/
coverage xml
И затем интегрировать `coverage.xml` в CI/CD систему для визуализации.Пример файла `.gitlab-ci.yml` (для GitLab CI):
stages:
- test
test:
stage: test
image: python:3.9
before_script:
- pip install -r requirements.txt
script:
- pytest --cov=./ --cov-report term-missing --junitxml=report.xml tests/
artifacts:
reports:
junit: report.xml
Ключевые моменты:
Таким образом, интеграция `unittest` или `pytest` с CI/CD позволяет автоматизировать процесс тестирования, повысить качество кода и ускорить цикл разработки.