Pytest tiene los decoradores skip y skipif, similar al módulo de prueba de unidad de Python (que usa skip
y skipIf
), que se puede encontrar en la documentación aquí .
Aquí se pueden encontrar ejemplos del enlace:
@pytest.mark.skip(reason="no way of currently testing this")
def test_the_unknown():
...
import sys
@pytest.mark.skipif(sys.version_info < (3,3),
reason="requires python3.3")
def test_function():
...
El primer ejemplo siempre omite la prueba, el segundo ejemplo le permite omitir pruebas condicionalmente (excelente cuando las pruebas dependen de la plataforma, la versión ejecutable o las bibliotecas opcionales).
Por ejemplo, si quiero comprobar si alguien tiene la biblioteca pandas instalada para una prueba.
import sys
try:
import pandas as pd
except ImportError:
pass
@pytest.mark.skipif('pandas' not in sys.modules,
reason="requires the Pandas library")
def test_pandas_function():
...
.skip
que tiene Mocha (Node.js)?it('tests something'...)
->it.skip('tests something'...)
que deshabilitaría esa prueba en particular. También tiene lo opuesto útil:.only
que solo ejecutará esa prueba y nada más.only
lado, puede hacerlo a través de la línea de comando o lo que sea que use para inicializar el corredor de prueba: stackoverflow.com/a/36539692/4131059 En cuanto ait
yit.skip
, creo que la funcionalidad aquí lo cubre completamente.El
skip
decorador haría el trabajo:@pytest.mark.skip(reason="no way of currently testing this") def test_func_one(): # ...
(el
reason
argumento es opcional, pero siempre es una buena idea especificar por qué se omite una prueba).También existe
skipif()
que permite deshabilitar una prueba si se cumple alguna condición específica.Estos decoradores se pueden aplicar a métodos, funciones o clases.
Para omitir todas las pruebas en un módulo , defina una
pytestmark
variable global :# test_module.py pytestmark = pytest.mark.skipif(...)
fuente
No estoy seguro de si está obsoleto, pero también puede usar la
pytest.skip
función dentro de una prueba:def test_valid_counting_number(): number = random.randint(1,5) if number == 5: pytest.skip('Five is right out') assert number <= 3
fuente
También puede querer ejecutar la prueba incluso si sospecha que la prueba fallará. Para tal escenario, https://docs.pytest.org/en/latest/skipping.html sugiere usar decorator @ pytest.mark.xfail
@pytest.mark.xfail def test_function(): ...
En este caso, Pytest seguirá ejecutando su prueba y le hará saber si pasa o no, pero no se quejará ni romperá la compilación.
fuente
Si desea omitir la prueba pero no codificar un marcador, es mejor usar la expresión de palabra clave para escapar.
pytest test/test_script.py -k 'not test_func_one'
fuente
Puede marcar una prueba con los decoradores
skip
yskipif
cuando desee omitir una pruebapytest
.Saltarse una prueba
@pytest.mark.skip(reason="no way of currently testing this") def test_func_one(): ...
La forma más sencilla de omitir una prueba es marcarla con el
skip
decorador, que puede pasar como opcionalreason
.También es posible omitir imperativamente durante la ejecución o configuración de la prueba llamando a la
pytest.skip(reason)
función. Esto es útil cuando no es posible evaluar la condición de omisión durante el tiempo de importación.def test_func_one(): if not valid_config(): pytest.skip("unsupported configuration")
Saltarse una prueba basada en una condición
@pytest.mark.skipif(sys.version_info < (3, 6), reason="requires python3.6 or higher") def test_func_one(): ...
Si desea omitir en función de un condicional, puede usar
skipif
en lugar. En el ejemplo anterior, la función de prueba se omite cuando se ejecuta en un intérprete anterior a Python3.6.Finalmente, si desea omitir una prueba porque está seguro de que está fallando, también puede considerar usar el
xfail
marcador para indicar que espera que una prueba falle.fuente