2016-04-19 9 views
4

Ich verwende py.test, um Tests auszuführen. Ich verwende es mit pytest-xdist, um die Tests parallel auszuführen. Ich möchte die Ausgabe von Druckanweisungen in meinen Tests sehen.So drucken Sie die Ausgabe bei Verwendung von Pytest mit xdist

Ich habe: Ubuntu 15.10, Python 2.7.10, Pytest-2.9.1, Pluggy-0.3.1.

Hier ist meine Testdatei:

def test_a(): 
    print 'test_a' 


def test_b(): 
    print 'test_b' 

Als ich laufen py.test, wird nichts gedruckt. Das wird erwartet: Standardmäßig erfasst py.test die Ausgabe.

Wenn ich laufe py.test es, druckt es Test_a und test_b, wie es sollte. Wenn ich py.test -s-n2 ausführen, wird wieder nichts gedruckt. Wie kann ich die Druckanweisungen während der Verwendung von -n2 erhalten?

Ich habe bereits pytest + xdist without capturing output und dies bug report gelesen.

+1

Ich fand eine Abhilfe, obwohl keine vollständige Lösung. Durch das Umleiten von stdout nach stderr wird die Ausgabe von print-Anweisungen angezeigt. Dies kann mit einer einzigen Zeile Python-Code erreicht werden: sys.stdout = sys.stderr. Wenn es in conftest.py platziert wird, gilt es für alle Tests. –

+0

Komplettere Antwort in http://stackoverflow.com/q/27006884/151641, überprüfen Sie auch das GitHub-Problem, das dort verlinkt ist (https://github.com/pytest-dev/pytest/issues/680) – mloskot

Antwort

0

Ich sehe die gerade zu diesem Thema erklären in Github https://github.com/pytest-dev/pytest/issues/1693

pytest-xdist Einsatz sys stdin/stdout zur Steuerung der Ausführung, der einzige Weg, Druck zu zeigen, aus std.err sein sollte.

import sys 
def test_a(): 
    print >> sys.stderr, 'test_a' 


def test_b(): 
    print >> sys.stderr, 'test_b' 

Keine gute Idee, aber Arbeit.

Auch Sie sollten beachten, dass der arg -s hat keine Verwendung, wenn Sie xdist-Plugin verwenden.


In Python 3, denke ich logging.warning eine bessere Wahl ist, denn das ist es bis auf stderr standardmäßig zu schreiben.

import logging 
logging.basicConfig(format='%(message)s') 

def test_a(): 
    logging.warning('test_a') 


def test_b(): 
    logging.warning('test_b') 
Verwandte Themen