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
.
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 Test
y 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_sort
luego 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
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.
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_”
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!
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
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 sipytest
tiene uninclude 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