2011-01-06 5 views
2

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=false
zu 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).

Antwort

2

Wenn Sie sich Ihren Beendigungsbefehl ansehen, frage ich mich, warum Ihr Build bricht, wenn der Server-Test fehlschlägt. Es kann mit der Tatsache verbunden sein, dass Ihr Server nicht startet, wenn Ihr Build fehlschlägt. Tatsächlich überprüfen Sie den Exit-Status von Echo und nicht den Exit-Status Ihrer Testsuite. Erfassen Sie zuerst Ihren Exit-Status my_exit = $? und verwenden Sie dann immer $my_exit anstelle von $?.

+0

Das ist ein toller Punkt. Ich werde es versuchen und zurück zu dir kommen. –

+0

@ 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. –

+0

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. –

Verwandte Themen