Чтобы протестировать библиотеку, установленную через pip
в виртуальном окружении, можно использовать несколько подходов, в зависимости от сложности тестирования и интеграции с вашей текущей системой разработки. Основная идея заключается в изолированном запуске тестов, чтобы избежать конфликтов с другими пакетами и версиями.
Общая схема действий:
python -m venv .venv
(или python3 -m venv .venv
в зависимости от вашей системы).pip
и python
выполнялись в контексте этого окружения. Команда для активации:
source .venv/bin/activate
.venv\Scripts\activate
pip
. Например: pip install your_library
. Также, необходимо установить все необходимые зависимости для тестирования, такие как pytest
, unittest
, tox
и т.д. pip install pytest
, например.tests/
).pytest
. pytest автоматически обнаружит и запустит все файлы, имена которых начинаются с test_
или заканчиваются на _test.py
.unittest
, необходимо написать скрипт, который обнаруживает и запускает тесты. Пример:
import unittest
if __name__ == '__main__':
unittest.main()
tox
или nox
. Эти инструменты позволяют создавать несколько виртуальных окружений с разными версиями Python и зависимостей, и запускать тесты в каждом из них. Пример конфигурации tox.ini
:
[tox]
envlist = py39, py310
[testenv]
deps =
pytest
your_library
commands =
pytest
Запуск: tox
Пример использования pytest
:
Предположим, у вас есть библиотека mylib
с функцией add
, и вы хотите ее протестировать:
Файл mylib/mylib.py
:
def add(a, b):
return a + b
Файл tests/test_mylib.py
:
from mylib import mylib
def test_add():
assert mylib.add(2, 3) == 5
assert mylib.add(-1, 1) == 0
assert mylib.add(0, 0) == 0
После установки mylib
и pytest
в виртуальном окружении, запустите pytest
в корневом каталоге проекта. pytest обнаружит и запустит тесты, и вы увидите результат.
В заключение: Тестирование в виртуальном окружении - это важная практика для обеспечения качества кода, предотвращения конфликтов зависимостей и воспроизводимости тестов. Использование автоматизации и CI/CD позволяет сделать этот процесс более эффективным и надежным.