Ich verwende Pytest mit Pytest-Xdist für den parallelen Test ausgeführt. Es scheint nicht die -s
Option zu erfüllen, die Standardausgabe an das Terminal zu übergeben, während die Tests ausgeführt werden. Gibt es eine Möglichkeit, dies zu erreichen? Ich weiß, dass dies dazu führen könnte, dass die Ausgabe der verschiedenen Prozesse im Terminal durcheinander gebracht wird, aber damit bin ich einverstanden.pytest + xdist ohne Erfassung der Ausgabe?
Antwort
verwendete ich den gefolgten Code:
# conftest.py
import _pytest.capture
def get_capman(plugin_manager):
capman_list = filter(lambda p: isinstance(p, _pytest.capture.CaptureManager), plugin_manager._plugins)
return capman_list[0] if len(capman_list) == 1 else None
def get_xdist_slave(plugin_manager):
# TODO: have no idea how to check isinstance "__channelexec__.SlaveInteractor"
slave_list = filter(lambda p: hasattr(p, 'slaveid'), plugin_manager._plugins)
return slave_list[0] if len(slave_list) == 1 else None
def is_remote_xdist_session(plugin_manager):
return get_xdist_slave(plugin_manager) is not None
def pytest_configure(config):
if is_remote_xdist_session(config.pluginmanager) and get_capman(config.pluginmanager) is not None:
capman = get_capman(config.pluginmanager)
capman._method = "no"
capman.reset_capturings()
capman.init_capturings()
Legen Sie es
Die Hauptsache sicher sein conftest.py ist, dass es Remote-Session ist, und wir haben Capture Instanz neu zu konfigurieren. Es gibt ein ungelöstes Problem, wie überprüft werden kann, ob das entfernte Objekt den Typ "__channelexec__.SlaveInteractor
" hat.
Hmm das scheint bei mir nicht zu funktionieren. Ich habe "print" -Aussagen in meinen Fixtures, die definitiv ausgeführt werden, aber ich sehe ihre Ausgabe nicht im Testlauf. –
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 einzelnen Zeile Python-Code erreicht werden:
sys.stdout = sys.stderr
Wenn in conftest.py platziert, gilt es für alle Tests.
Es gibt ein offenes Problem für dieses hier: https://github.com/pytest-dev/pytest/issues/680 –
woohoo, pytest xdist jetzt ehrt die '-s' Option! Siehe oben. –