2012-10-02 14 views
5

Ich versuche, Tests in Jenkins für ein Python-Paket auszuführen, das PyQt4 verwendet, und die Tests erstellen Fenster. Da ich die Tests in Jenkins durchführe, muss ich die grafische Ausgabe umleiten, also verwende ich xvfb-run. Die meiste Zeit, das funktioniert, aber ein Bruchteil der Zeit, wird die Prüfung schlagen fehl mit:Ausführen von py.test mit xvfb-run

/usr/bin/xvfb-run: line 171: kill: (27375) - No such process 

Wenn ich die Tests erneut auszuführen, ist es in Ordnung die meiste Zeit funktioniert (es ist also nur ein One -Ausgabeproblem).

Hat jemand dieses Problem schon einmal festgestellt? Haben Sie Ideen für Workarounds, um die Stabilität des Tests zu verbessern?

+3

Ich denke, dass die Linie in der 'xvfb-run' Skript ist, wo er versucht, zu erkennen, ob es eine andere Instanz läuft, so dass, wenn die' -a' Schalter angegeben wurde, kann mit einer anderen wiederholen Servernummer. Versuchen Sie, mit '-a' (oder' -auto-servernum') zu laufen, um zu sehen, ob das einen Unterschied macht. –

Antwort

1

Wenn Ihre Kopie von xvfb-run die same as mine ist, kann ich bestätigen, dass ich das auch gesehen habe.

In meinem Fall verursachte der Zielprozess Xvfb zum Absturz. Dies bedeutet, dass das Wrapper-Skript selbst in Zeile 171 fehlschlägt, wenn es nicht mehr Xvfb ausführt. Um es zu umgehen habe ich kill $XVFBPID in einem set +e/set -e Block gewickelt. Es hilft auch, wenn Sie --error-file= angeben, damit xvfb-run die asynchrone Standardfehlerausgabe von Xvfb speichert, während der Zielprozess ausgeführt wird, damit die zugrunde liegende Ursache behoben werden kann.

Umgehen:

# Kill Xvfb now that the command has exited. 
# Ignore failure of kill since we want to be forgiving of Xvfb itself crashing 
set +e 
kill $XVFBPID 
set -e 
+0

Das hat leider nicht für mich funktioniert. Trotzdem danke. – Sam

1

es durch den Xvfb Prozess finden arbeiten und es töten.

ps auwx | grep "Xvfb" | grep -v grep