¿Cómo desactivo una prueba usando pytest?
Digamos que tengo un montón de pruebas:
def test_func_one():
...
def test_func_two():
...
def test_func_three():
...
¿Existe un decorador o algo similar que pueda agregar a las funciones para evitar pytest
ejecutar solo esa prueba? El resultado podría verse así...
@pytest.disable()
def test_func_one():
...
def test_func_two():
...
def test_func_three():
...
Pytest tiene los decoradores skip y skipif, similares al módulo unittest de Python (que usa skip
y skipIf
), que se puede encontrar en la documentación aquí .
Se pueden encontrar ejemplos del enlace 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 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 instalada la biblioteca pandas 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():
...
El skip
decorador haría el trabajo:
@pytest.mark.skip(reason="no way of currently testing this")
def test_func_one():
# ...
( reason
El argumento es opcional, pero siempre es una buena idea especificar por qué se omite una prueba).
También existe skipif()
la posibilidad de desactivar 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 variable global pytestmark
:
# test_module.py
pytestmark = pytest.mark.skipif(...)
Puede marcar una prueba con los decoradores skip
y skipif
cuando desee omitir una prueba en pytest
.
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 aprobarse como opcional reason
.
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 según una condición
@pytest.mark.skipif(sys.version_info < (3, 6), reason="requires python3.6 or higher")
def test_func_one():
...
Si desea omitir según un condicional, puede utilizarlo skipif
en su 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.
Si desea omitir la prueba pero no codificar un marcador, es mejor usar una expresión de palabra clave para escapar de ella.
pytest test/test_script.py -k 'not test_func_one'
Nota: Aquí, ' expresión de palabra clave ' es básicamente expresar algo usando palabras clave proporcionadas por pytest (o python) y hacer algo. En el ejemplo anterior, " no " es una palabra clave.
Para obtener más información, consulte este enlace .
Se pueden encontrar más ejemplos de expresiones de palabras clave en esta respuesta.