¿Por qué PyTest no recopila pruebas (recolectó 0 elementos)?

5 minutos de lectura

Avatar de usuario de Ramkumar Hariharan
Ramkumar Hariharan

He estado tratando de ejecutar pruebas unitarias usando pytest.

Escribí un módulo con una clase y algunos métodos dentro de esa clase, y escribí una prueba unitaria para este módulo (con una declaración de afirmación simple para verificar la igualdad de las listas) donde primero instalé la clase con una lista.

Luego invoco un método en ese objeto (de la clase). Ambos test.py y el script a probar están en la misma carpeta. cuando corro pytest en él, informa “0 elementos recopilados”.

soy nuevo en pytest y pero no puedo ejecutar sus ejemplos con éxito. ¿Que me estoy perdiendo aqui?

Estoy ejecutando Python versión 3.5.1 y pytest versión 2.8.1 en Windows 7.

Mi prueba.py código:

from sort_algos import Sorts

def integer_sort_test():
    myobject1 = Sorts([-100, 10, -10])
    assert myobject1.merge_sort() == [-101, -100, 10]

sort_algos.py es un módulo que contiene Sorts clase.

merge_sort es un método de Sorts.

  • Por favor, publique un ejemplo mínimo reproducible. ¿Qué esperaría como resultado si coloca un vacío .py ¿archivo?

    – Zulán

    20 mayo 2016 a las 19:50


  • Memoria aleatoria: algo sobre .py siendo omitido si es ejecutable – vea si lo es y cámbielo a no ejecutable, o vea si pytest tiene un include executable ¿opción?

    – dwanderson

    20 mayo 2016 a las 20:15

  • @ Zulan, agregué un código de muestra a mi publicación

    – Ramkumar Hariharan

    20 mayo 2016 a las 20:26

avatar de usuario de cewing
cewing

pytest reúne las pruebas de acuerdo con una convención de nomenclatura. De forma predeterminada, cualquier archivo que contenga pruebas debe tener un nombre que comience con test_las clases que contienen pruebas deben nombrarse comenzando con Testy cualquier función en un archivo que deba tratarse como una prueba también debe comenzar con test_.

Si cambia el nombre de su archivo de prueba a test_sorts.py y cambie el nombre de la función de ejemplo que proporciona arriba como test_integer_sortluego encontrará que se recopila y ejecuta automáticamente.

Este comportamiento de recopilación de pruebas puede ser cambiado para satisfacer sus deseos. Cambiarlo requerirá aprender sobre configuración en pytest.

  • ¡Muchas gracias! Sí, eso funcionó. ¡Dios mío, nunca me di cuenta de eso!

    – Ramkumar Hariharan

    21 mayo 2016 a las 19:45

  • Me alegro de haber podido ayudar. ¿Te importaría marcar esto como la respuesta correcta? ¡Gracias!

    – cewing

    26 de mayo de 2016 a las 4:55

  • Ambos enlaces en esta respuesta ahora son Error 404 🙁

    – Gerrit

    24 de julio de 2019 a las 13:41

  • Estaba atascado incluso CONOCIENDO la convención de nomenclatura, pero la estaba ignorando. Gran recordatorio. Gracias

    – Roberto Alejandro

    31 de enero a las 19:17

Avatar de usuario de Iván Camilito Ramírez Verdes
Iván Camilito Ramírez Verdes

Tuve el mismo problema, pero mi función fue llamada test.py. Nunca pensé que el problema sería el nombre del archivo.

En la documentación dice:

pytest ejecutará todos los archivos del formulario test_*.py o *_test.py en el directorio actual y sus subdirectorios. De manera más general, sigue las reglas estándar de descubrimiento de pruebas.

¡Exactamente! El nombre debe ser test_.py o test_something.py y trabaja para mí.

Me siento tan estúpido, jeje.

Avatar de usuario de Flora Posteschild
Flora Posteschild

Todavía no puedo votar, pero quiero participar con una solución combinada que funcionó para mí.

Primero, según lo anterior, cambié el nombre de mi archivo con ‘test_’: test_hello.py.

En segundo lugar, también según lo anterior, cambié el nombre de cada bit que quería probar con ‘test_’

def test_greeting():
    print('Hello, world!')

def test_checkout():
    print("This is checkout")

def logout():
    print("This is logout")

def test_executable():
    """says hello world by default"""
    out = getoutput({prg})

Y finalmente, para ejecutar la prueba, ingresé lo siguiente en la línea de comando:

python -m pytest -v test_hello.py

Sin el -m hay un mensaje de que el archivo no se puede abrir. Funciona sin el -v, pero con él, descompone cada parte que se prueba. RESULTADO:

---------------------------------------------
collected 3 items

test_hello.py::test_greeting PASSED                                                                              [ 33%]
test_hello.py::test_checkout PASSED                                                                              [ 66%]
test_hello.py::test_executable FAILED


def test_executable():
        """says hello world by default"""
>       out = getoutput({prg})
E       NameError: name 'getoutput' is not defined

test_hello.py:12: NameError

Como puede ver, saltó logout(), la parte del programa sin test_, y entregó un útil mensaje de error. Entonces, con ese simple ejemplo, las cosas funcionan como deberían. Gracias a todos los que me ayudaron a armarlo.

También enfrenté este problema y me tomó un día entero descubrir que el nombre de la clase debería comenzar con “Prueba”, mi nombre de clase era “prueba” en su lugar. Eso me hizo ejecutar mi código con éxito.

Asegúrese de que el nombre del archivo de prueba de Python y el nombre del método también comiencen con “test_”

Avatar de usuario de Rameshbabu Lakshmanan
Rameshbabu Lakshmanan

Esto me ayudó mucho. Inicialmente nombré mis pruebas a continuación:

def login():
    print("This is login")

def checkout():
    print("This is checkout")

def logout():
    print("This is logout")

Mi comando pytest se ejecutó sin errores. Sin embargo, no se produjeron resultados. También observé:

recogido 0 artículos

Por lo tanto, cambié el nombre de las pruebas anteriores a test_login(), test_checkout(), test_logout() ¡y ahora obtuve resultados exitosos!

Avatar de usuario de Peter Mortensen
Pedro Mortensen

Me encontré con este problema también. Y eso fue no causado por los nombres de los scripts, pero debido a un complemento llamado “pytest-appium” que no tengo intención de usar en primer lugar.

Finalmente lo descubrí del informe: (‘c:\python39\lib\site-packages\pytest_appium\plugin.py’, 8, ‘Omitido: sin archivo de variables’)

Desde plugin.py requiere variables que no tengo idea de para qué sirve.

@pytest.fixture(scope="session")
def appium(variables):
    if not variables:
        pytest.skip('no variables file')

Solución:

pip uninstall pytest-appium

Si todavía estás recibiendo

recogido 0 artículos

======================= no se ejecutó ninguna prueba en X.XXs==================== ==

guarde sus archivos nuevamente (en VSCode) para actualizar los archivos

¿Ha sido útil esta solución?