python - unit - ¿Cómo desactivo una prueba usando py.test?
unittest python 3 (4)
Digamos que tengo un montón de pruebas:
def test_func_one():
...
def test_func_two():
...
def test_func_three():
...
¿Hay algún decorador o algo similar que pueda agregar a las funciones para evitar que py.test ejecute solo esa prueba? El resultado podría ser algo así como ...
@pytest.disable()
def test_func_one():
...
def test_func_two():
...
def test_func_three():
...
He buscado algo como esto en los documentos de py.test, pero creo que podría faltar algo aquí.
El decorador de skip
haría el trabajo:
@pytest.mark.skip(reason="no way of currently testing this")
def test_func_one():
# ...
(El argumento de la reason
es opcional, pero siempre es una buena idea especificar por qué se omite una prueba).
También hay skipif()
que permite desactivar una prueba si se cumple alguna condición específica.
Estos decoradores pueden ser aplicados a métodos, funciones o clases.
Para omitir todas las pruebas en un módulo , defina una variable pytestmark
global:
# test_module.py
pytestmark = pytest.mark.skipif(...)
No estoy seguro de si está depreciado, pero también puede usar la función pytest.skip
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
Pytest tiene los decoradores skip y skipif, similares al módulo de prueba de unidad de Python (que usa skip
y skipIf
), que puede encontrar en la documentación here .
Los ejemplos del enlace se pueden encontrar aquí:
@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 condicionalmente las pruebas (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 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():
...
También es posible que desee 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 tu prueba y te permitirá ahora si pasa o ahora, pero no se quejará ni romperá la construcción.