2013-09-25 5 views
10

Ich habe Jenkins mit dem Xcode-Plugin konfiguriert, um Komponententests auszuführen, indem ich die Testbuild-Aktion zur benutzerdefinierten xcodebuild-Argumenteinstellung hinzufüge. Weitere Informationen darüber, wie Jenkins die Komponententests überhaupt mit Xcode 5 ausführen kann, finden Sie unter question.xcodebuild korrumpiert die Testergebnisausgabe, wenn die Ausgabe in die Datei umgeleitet wird

Jetzt, da ich es laufen lasse, scheint es Konsolenausgabe von NSLog-Anweisungen oder der endgültigen ** TEST SUCCEEDED ** Nachricht mit den Testergebnissen zu mischen und stolpert gelegentlich den Parser, der Komponententestergebnisse in das für Jenkins erforderliche JUnit-Format umwandelt.

Zum Beispiel zeigt die Jenkins Log-Ausgabe wie folgt aus:

Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsNotZero]' passed (** TEST SUCCEEDED ** 

0.000 seconds). 
Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsZero]' started. 

wenn es eigentlich sein sollte:

Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsNotZero]' passed (0.000 seconds). 
Test Case '-[Redacted_Conversion_Tests testConvertTo_ShouldSetamount_WhenamountIsZero]' started. 
** TEST SUCCEEDED ** 

Ich habe sah in diese weiter und zog Jenkins aus dem Bild heraus. Wenn ich den Befehl xcodebuild direkt an der Eingabeaufforderung ausfühle:

Die Ausgabe kommt immer in Ordnung, in Ordnung.

Wenn jedoch der Ausgang I Rohr an ein anderes Programm oder eine Umleitung zu einer Datei:

xcodebuild \ 
    -workspace project.xcworkspace \ 
    -scheme Tests \ 
    -configuration Release \ 
    -sdk iphonesimulator7.0 \ 
    -destination "platform=iOS Simulator,name=iPhone Retina (4-inch),OS=latest" \ 
    test > xcodebuild.out 
cat xcodebuild.out 

Der Ausgang ist out-of-order wie oben beschrieben.

Könnte das auf Pufferung oder Pufferung zurückzuführen sein, wenn nicht direkt in stdout geschrieben wird? Weiß jemand, warum dies geschieht und welche Abhilfe ich eventuell schaffen könnte, um es zu beheben?

+0

Welche Parser haben Sie die Ausgabe junit Testergebnisse zu ändern verwenden, um? – kocodude

+0

[OCUnit2JUnit] (https://github.com/ciryon/OCUnit2JUnit) – GBegen

Antwort

9

Dank dieser answer, entdeckte ich eine Möglichkeit, Pufferung mit dem script Befehl im Wesentlichen deaktivieren.

script -q -t 0 xcodebuild.out \ 
    xcodebuild \ 
     -workspace project.xcworkspace \ 
     -scheme Tests \ 
     -configuration Release \ 
     -sdk iphonesimulator7.0 \ 
     -destination "platform=iOS Simulator,name=iPhone Retina (4-inch),OS=latest" \ 
     test 
cat xcodebuild.out 
+0

Wenn Sie zu einem anderen Befehl leiten * hust * ocunit2junit * hust * dann '' ' script -q/dev/null xcodebuild ... | ocunit2junit '' ' wird funktionieren – Jon

+5

Spät zum Spiel, aber eine andere Möglichkeit, dies zu tun ist mit' env NSUnbufferedIO = JA xcodebuild ... '. Getestet auf Yosemite und Xcode 7. –

9

Wie Malte in einem Kommentar oben erwähnt, könnte eine sauberere Lösung sein

env NSUnbufferedIO=YES xcodebuild ... 
+0

Das ist die echte Lösung –

Verwandte Themen