Главная страница Новости кинофильмов Игровые новости Новости спорта Новости технологий

Тест покрытия Python, зависящий от платформы, с помощью Tox

Новости

Последнее обновление от 20 декабря 2020 г.

При тестировании программ на Python, coverage.py часто используется для измерения охвата кода, и обеспечение 100%-ного охвата кода считается хорошей практикой:

#.coveragerc [покрытие:report] # Enforce 100% coverage test fail_under = 100 show_missing = TrueОднако, если есть несколько строк кода, зависящих от платформы (т.е. они никогда не выполняются хотя бы на одной платформе), тесты покрытия кода обычно завершаются неудачей. Например, следующий фрагмент кода всегда приводил бы к покрытию, которое составляет менее 100% на платформе, отличной от Операционная система:

если os.name != ‘nt’: # Сделайте что-нибудь, если операционная система не Windows…

Вы можете попросить coverage.py игнорировать этот блок, добавив комментарий # pragma: без обложки, но тогда coverage.py будет игнорировать его на всех платформах, включая все платформы, отличные от Windows. Если вы используете tox для тестирования, эта проблема может быть решена без проблем.

Сначала отметьте свой код на Python, который вы хотели бы исключить, с некоторыми комментариями, относящимися к конкретной платформе:

если os.name != ‘nt’: # прагма: нет закрывающих окон. Не выполняется эта ветка в Windows # Сделайте что-нибудь, если операционная система не Windows…

Для исключений Linux и macOS используйте # pragma: не использовать linux и # pragma: не использовать macos соответственно. Теперь мы попробуем сделать coverage.py игнорируйте эти специально выделенные строки. Для примера, приведенного выше, мы сделаем coverage.py игнорируем отмеченный if-блок в Windows и только в Windows.

В tox.ini добавьте следующую часть, чтобы убедиться, что эта конфигурация tox совместима с платформой (смотрите документацию по tox, чтобы узнать, как это работает):

# tox.ini [tox] envlist = py{36,37,38,39}-{linux,macos,windows} [testenv] платформа = linux: linux macos: darwin windows: win32 setenv = linux: ПЛАТФОРМА = linux macos: ПЛАТФОРМА = macos windows: ПЛАТФОРМА = windows. Затем создайте файл шаблона coveragerc с именем.coveragerc.in , включая следующий раздел вместе с другими вашими настройками coverage.py :

#.coveragerc.in [покрытие:отчет] exclude_lines = pragma: нет покрытия {платформа}

Эти строки означают, что coverage.py следует игнорировать строку, если присутствует pragma: нет покрытия {платформа}.Вернемся к tox.ini, включив в него следующие строки:# tox.ini [testenv:py{36,37,38,39}-{linux,macos,windows}] setenv = COVERAGE_RCFILE = {envtmpdir}/coveragerc commands_pre = {envpython} -c ‘из pathlib импортирует путь; Path(r»{env:COVERAGE_RCFILE}»).write_text(Path(«.coveragerc.in»).read_text().format(platform=»{env:PLATFORM}»)) ‘ commands = coverage run -m pytest -v

Эти строки считываются из.coveragerc.in, заменяют {platform} соответствующим именем платформы и записывают его во временный файл, который coverage.py распознается как файл конфигурации для этого запуска.

Теперь при запуске tox -e py39-windows (или других версий Python) будут игнорироваться строки, помеченные символом # pragma: не закрывать окна для целей покрытия, а tox -e py39-linux (или другие версии Python и операционные системы) не будут игнорировать эти строки.

Для наглядного примера ознакомьтесь с репозиторием исполняемого кода flake8, в частности с tox.ini,.coveragerc.in и исходным файлом Python с пометками.

Сообщение Тест покрытия Python, зависящий от платформы, с помощью Tox появилось впервые в Top Bug Net.


Другие новости: