una salto print lista linea imprimir funcion end agregar python unit-testing python-2.7 py.test

python - salto - Cómo imprimir en consola en Py Test?



salto de linea en una lista python (4)

De acuerdo con los documentos de Pytest , pytest --capture=sys debería funcionar. Si desea capturar el estándar dentro de una prueba, consulte el accesorio capsys.

pytest utilizar Test-Driven Development con el módulo pytest . Pytest no se print en la consola cuando escriba print .

Yo uso py.test my_tests.py para ejecutarlo ...

La documentation parece decir que debería funcionar por defecto: http://pytest.org/latest/capture.html

Pero:

import myapplication as tum class TestBlogger: @classmethod def setup_class(self): self.user = "alice" self.b = tum.Blogger(self.user) print "This should be printed, but it won''t be!" def test_inherit(self): assert issubclass(tum.Blogger, tum.Site) links = self.b.get_links(posts) print len(links) # This won''t print either.

No se imprime nada en mi consola de salida estándar (solo el progreso normal y cuántas pruebas pasaron / fallaron).

Y el script que estoy probando contiene print:

class Blogger(Site): get_links(self, posts): print len(posts) # It won''t get printed in the test.

En el módulo unittest , todo se imprime por defecto, que es exactamente lo que necesito. Sin embargo, deseo usar pytest por otros motivos. Parece una funcionalidad tan básica que quizás me la estoy perdiendo?

¿Alguien sabe cómo hacer que se muestren las declaraciones impresas?


El uso de la opción -s imprimirá la salida de todas las funciones, que pueden ser demasiado.

Si necesita un resultado particular, la página de documentos que mencionó ofrece algunas sugerencias:

  1. Inserte la assert False, "dumb assert to make PyTest print my stuff" al final de su función, y verá su resultado debido a una prueba fallida.

  2. PyTest le ha pasado un objeto especial y puede escribir el resultado en un archivo para inspeccionarlo más tarde, como

    def test_good1(capsys): for i in range(5): print i out, err = capsys.readouterr() open("err.txt", "w").write(err) open("out.txt", "w").write(out)

    Puede abrir los archivos de out y de err en una pestaña separada y dejar que el editor lo actualice automáticamente, o realice una simple py.test; cat out.txt Comando de shell py.test; cat out.txt para ejecutar tu prueba.

Esa es una forma bastante hackosa de hacer las cosas, pero puede ser que es lo que necesitas: después de todo, TDD significa que te metas con cosas y las dejas limpias y silenciosas cuando están listas :-).


Necesitaba imprimir una advertencia importante sobre las pruebas omitidas exactamente cuando PyTest silenciaba literalmente todo .

No quería reprobar una prueba para enviar una señal, así que hice un truco de la siguiente manera:

def test_2_YellAboutBrokenAndMutedTests(): import atexit def report(): print C_patch.tidy_text(""" In silent mode PyTest breaks low level stream structure I work with, so I cannot test if my functionality work fine. I skipped corresponding tests. Run `py.test -s` to make sure everything is tested.""") if sys.stdout != sys.__stdout__: atexit.register(report)

El módulo atexit me permite imprimir cosas después de que PyTest lanzó las secuencias de salida. El resultado se ve de la siguiente manera:

============================= test session starts ============================== platform linux2 -- Python 2.7.3, pytest-2.9.2, py-1.4.31, pluggy-0.3.1 rootdir: /media/Storage/henaro/smyth/Alchemist2-git/sources/C_patch, inifile: collected 15 items test_C_patch.py .....ssss....s. ===================== 10 passed, 5 skipped in 0.15 seconds ===================== In silent mode PyTest breaks low level stream structure I work with, so I cannot test if my functionality work fine. I skipped corresponding tests. Run `py.test -s` to make sure everything is tested. ~/.../sources/C_patch$

El mensaje se imprime incluso cuando PyTest está en modo silencioso y no se imprime si ejecuta cosas con py.test -s , por lo que todo se ha probado py.test -s .


Por defecto, py.test captura el resultado de la salida estándar para que pueda controlar cómo se imprime. Si no lo hiciera, arrojaría una gran cantidad de texto sin el contexto de qué prueba imprimió ese texto.

Sin embargo, si una prueba falla, incluirá una sección en el informe resultante que muestre lo que se imprimió como estándar en esa prueba en particular.

Por ejemplo,

def test_good(): for i in range(1000): print(i) def test_bad(): print(''this should fail!'') assert False

Resultados en el siguiente resultado:

>>> py.test tmp.py ============================= test session starts ============================== platform darwin -- Python 2.7.6 -- py-1.4.20 -- pytest-2.5.2 plugins: cache, cov, pep8, xdist collected 2 items tmp.py .F =================================== FAILURES =================================== ___________________________________ test_bad ___________________________________ def test_bad(): print(''this should fail!'') > assert False E assert False tmp.py:7: AssertionError ------------------------------- Captured stdout -------------------------------- this should fail! ====================== 1 failed, 1 passed in 0.04 seconds ======================

Tenga en cuenta la sección Captured stdout .

Si desea ver print declaraciones print medida que se ejecutan, puede pasar la bandera -s a py.test . Sin embargo, tenga en cuenta que esto a veces puede ser difícil de analizar.

>>> py.test tmp.py -s ============================= test session starts ============================== platform darwin -- Python 2.7.6 -- py-1.4.20 -- pytest-2.5.2 plugins: cache, cov, pep8, xdist collected 2 items tmp.py 0 1 2 3 ... and so on ... 997 998 999 .this should fail! F =================================== FAILURES =================================== ___________________________________ test_bad ___________________________________ def test_bad(): print(''this should fail!'') > assert False E assert False tmp.py:7: AssertionError ====================== 1 failed, 1 passed in 0.02 seconds ======================