Ich bin relativ neu in Hudson, also bitte vergib mir, wenn das eine "Duh" -Frage ist.Wie bekomme ich mein Hudson-Projekt fertig, um beim zweiten Satz von Nasetests fehlzuschlagen?
Ich habe ein Projekt geschrieben in Python (mit Pylonen und Nasetests), die sowohl eine Server-Komponente und eine Client-Komponente enthält. Ich habe Funktionstests in der Server-Hierarchie und der Client-Hierarchie eingerichtet, um beide Komponenten zu trainieren. In meinem Build-Skript (ein Shell-Skript aus der hudson Projektkonfiguration Seite ins Leben gerufen), ich laufe zwei verschiedene nosetests, seriell, etwa so:
# Python tests for server
find $WORKSPACE/server/src/project/tests -iname "*test_*.py" | xargs $NOSETESTS --with-coverage --cover-package=project --cover-html --cover-erase --with-pylons="$PYLONS_INI"
echo "SERVER TEST EXIT STATUS: $?"
if [ $? -ne 0 ]; then
test_status=$test_status+$?
export TEST_STATUS=$test_status
exit $?
fi
(Dann, nach dem Starten des Servers bis)
# Python tests for client
find $WORKSPACE/server/src/project/tests -iname "*test_*.py" | xargs $NOSETESTS --with-coverage --cover-package=projectclient --cover-html --cover-erase --with-pylons="$PYLONS_INI"
echo "CLIENT TEST EXIT STATUS: $?"
if [ $? -ne 0 ]; then
test_status=$test_status+$?
export TEST_STATUS=$test_status
exit $?
fi
Dann habe ich den Server heruntergefahren.
Die ersten Tests (die Server-Tests) funktionieren immer. Wenn ein Test fehlschlägt, meldet der Build einen Fehler und der Ball wird rot. Der zweite Satz (die Client-Tests) funktioniert jedoch nie. Wenn ein Test fehlschlägt, meldet STDOUT den Fehler und das Skript zeigt den Exit-Status 123 an, aber der Build schlägt nie fehl.
Ich habe versucht,
maven.test.failure.ignore=falsezu meiner Hudson-Konfiguration hinzuzufügen, basierend auf einigen anderen Fragen, die ich hier auf Stackoverflow gesehen habe, aber es scheint keinen Unterschied gemacht zu haben. Ich habe versucht, das Skript zu zwingen, mit einem künstlichen Ausgangswert zu beenden, um zu sehen, ob es sogar auf den Ausgangswert achtete, und das änderte nichts. Ich habe auch versucht, die Client-Tests über die Server-Tests zu verschieben, um zu sehen, ob es einen Grund gab, warum Hudson nur einen Satz von Nose-Tests erlaubte, aber das schien auch nichts zu ändern.
Wenn jemand eine Idee hat, was ich falsch machen könnte, würde ich sicher die Hilfe zu schätzen wissen. Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen.
Danke!
============================
UPDATE:
konnte ich das bekommen zweite Reihe von Tests wie so arbeiten:
find $WORKSPACE/client/python/src/tests -iname "*test_*.py" | xargs $NOSETESTS --with-coverage --cover-package=projectclient --cover-html --cover-erase --with-pylons="$PYLONS_INI"
client_test_status=$?
if [ $client_test_status -ne 0 ]; then
echo "Client Test Status = $client_test_status"
exit $client_test_status
fi
aber ich habe nicht diese Änderung an den Server Tests zu machen. Nur die Kunden. Die Server-Tests arbeiten nach wie vor, und sehen immer noch so:
find $WORKSPACE/server/src/project/tests -iname "*test_*.py" | xargs $NOSETESTS --with-coverage --cover-package=project --cover-html --cover-erase --with-pylons="$PYLONS_INI"
if [ $? -ne 0 ]; then
exit $?
fi
Eine Hypothese hier schwimmen, ist, dass es möglicherweise ein Problem mit dem PIPE Schlucken $ sein ?, aber das erklärt nicht, warum die Server-Tests erfolgreich (bei Fehler), aber die Client-Tests nicht (es sei denn, die $? wird erfasst).
Das ist ein toller Punkt. Ich werde es versuchen und zurück zu dir kommen. –
@ Peter - Peter, das war genau das Problem. Aber ich bin wirklich verwirrt darüber, warum. Ich lege das $? Aus in eine Temp-Var und testete die Temp-Var, und das scheiterte den Build wie erwartet.Liegt es daran, dass "-ne" das $ zurücksetzt? ? Aber wenn das der Fall ist, dann bin ich ratlos, warum das gleiche Problem für die Server-Tests nicht existiert. –
Um den obigen Kommentar zu klären - Ich entfernte alle Echos, aber das Skript war immer noch mit einer 0 beenden, bis ich die $ speicherte? in eine Temp-Var. –