¿Cómo desactivo una prueba usando pytest?

Resuelto ericmjl asked hace 8 años • 10 respuestas

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 pytestejecutar solo esa prueba? El resultado podría verse así...

@pytest.disable()
def test_func_one():
    ...

def test_func_two():
    ...

def test_func_three():
    ...
ericmjl avatar Jul 19 '16 00:07 ericmjl
Aceptado

Pytest tiene los decoradores skip y skipif, similares al módulo unittest de Python (que usa skipy 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():
    ...
Alex Huszagh avatar Jul 18 '2016 17:07 Alex Huszagh

El skipdecorador haría el trabajo:

@pytest.mark.skip(reason="no way of currently testing this")
def test_func_one():
    # ...

( reasonEl 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(...)
alecxe avatar Jul 18 '2016 17:07 alecxe

Puede marcar una prueba con los decoradores skipy skipifcuando 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 skipdecorador, 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 skipifen 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 xfailmarcador para indicar que espera que una prueba falle.

lmiguelvargasf avatar Jul 08 '2020 22:07 lmiguelvargasf

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.

Arindam Roychowdhury avatar May 18 '2020 12:05 Arindam Roychowdhury