Mochis NoticiasTecnologíaPrueba de cobertura de Python dependiente de la plataforma con Tox
Mochis NoticiasTecnologíaPrueba de cobertura de Python dependiente de la plataforma con Tox
Tecnología

Prueba de cobertura de Python dependiente de la plataforma con Tox

Última actualización el 20 de diciembre de 2020

Cuando se prueban programas Python, la cobertura.py se usa a menudo para medir la cobertura del código, y exigir una cobertura del código del 100% se considera una buena práctica:

# .coveragerc
[coverage:report]
# Enforce 100% coverage test
fail_under = 100
show_missing = True

Sin embargo, si hay líneas de código que dependen de la plataforma (es decir, que nunca se ejecutan en al menos una plataforma), las pruebas de cobertura de código generalmente fallan. Por ejemplo, el siguiente fragmento de código siempre da como resultado una cobertura inferior al 100 % en una plataforma que no sea Windows:

if os.name != 'nt':
    # Do something if the OS is not Windows...

Puedes pedirle a cobertura.py que ignore este bloque agregando un comentario. # pragma: no cover, pero luego cover.py lo ignora en todas las plataformas, incluidas todas las plataformas que no son Windows. Si utiliza un tóxico para realizar pruebas, este problema se puede resolver limpiamente.

Primero, marque el código Python que desea excluir con algunos comentarios de portada específicos de la plataforma:

if os.name != 'nt':  # pragma: no cover windows. No execution of this branch on Windows
    # Do something if the OS is not Windows...

Para exclusiones de Linux y MacOS, utilice # pragma: no cover linux y # pragma: no cover macos, respectivamente. Ahora intentaremos hacer que cover.py ignore estas líneas marcadas específicamente. Para el ejemplo anterior, haremos que cover.py ignore el bloque if marcado en Windows y solo en Windows.

filo tox.iniagregue la siguiente parte para asegurarse de que esta configuración tox sea compatible con la plataforma (consulte la documentación tox para saber cómo funciona):

# tox.ini
[tox]
envlist = py{36,37,38,39}-{linux,macos,windows}
[testenv]
platform = linux: linux
           macos: darwin
           windows: win32
setenv =
    linux: PLATFORM = linux
    macos: PLATFORM = macos
    windows: PLATFORM = windows

Luego, crea una plantilla. coveragerc archivo, mencionado .coveragerc.inincluyendo la siguiente sección junto con sus otras configuraciones de cobertura.py:

# .coveragerc.in
[coverage:report]
exclude_lines =
    pragma: no cover {platform}

Estas líneas significan que cobertura.py debería ignorar una línea if pragma: no cover {platform} está presente.

De regreso tox.iniincluir las siguientes líneas:

# tox.ini
[testenv:py{36,37,38,39}-{linux,macos,windows}]
setenv =
    COVERAGE_RCFILE = {envtmpdir}/coveragerc
commands_pre =
    {envpython} -c 'from pathlib import Path; Path(r"{env:COVERAGE_RCFILE}").write_text(Path(".coveragerc.in").read_text().format(platform="{env:PLATFORM}"))'
commands =
    coverage run -m pytest -v

Estas líneas son leídas por .coveragerc.insustituto {platform} con el nombre de plataforma apropiado y escríbalo en un archivo temporal que cover.py reconozca como el archivo de configuración para esta ejecución.

Ahora, corriendo tox -e py39-windows (u otras versiones de Python) ignorarán las líneas marcadas con # pragma: no cover windows para fines de cobertura, y tox -e py39-linux (u otras versiones de Python y OS) no ignorarán esas líneas.

Para ver un ejemplo en vivo, consulte el repositorio de código ejecutable de flake8, específicamente tox.ini, .coveragerc.iny el archivo fuente de Python con las marcas.

Source link

Hi, I’m Corina Guzman

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *