Ich automatisiere derzeit unsere iOS-Tests auf Jenkins. Bisher hatte ich keine Probleme damit, Komponententests durchzuführen, OCUnit in JUnit zu konvertieren und Code Coverage im Cobertura-Format zu erzeugen (viel Googeln, aber keine schweren Probleme).
Beim Erstellen eines UIAutomation-Jobs stehe ich jedoch fest. Die Tests werden erfolgreich ausgeführt (Aufruf von instruments
von der Befehlszeile aus). Einen Junit Report zu erstellen, war schwierig, aber möglich.
Das Problem ist, dass beim Ausführen von UIAutomation keine Coverage-Dateien generiert werden.
Gibt es eine Möglichkeit, sie zu generieren? Wenn nicht, könnten Sie bitte erklären warum?
Was ich bisher versucht habe:
UIAHost. performTaskWithPathArgumentsTimeout
.
Bearbeiten
Nach einigen Tests mit einem anderen Framework habe ich gemerkt, dass es nicht ausreicht, den Simulator zu beenden. Sie müssen exit()
explizit von der Anwendung aufrufen. Mit UI Automation ist dies ein bisschen schwierig, aber Sie können ein Anwendungsschema, z. my-app://exit
und rufen sie über MobileSafari mit UIAHost.performTaskWithPathArgumentsTimeout
auf. Wird prüfen, ob dies für die Generierung der Dateien ausreicht.
Nach diesen Schritten konnte ich die Code-Coverage-Dateien von der UI-Automatisierung generieren und die Informationen über das Jurtkins-Plugin von cobertura anzeigen.
Setzen Sie zuerst die Erstellungseinstellungen "Test Coverage-Dateien generieren" und "Geräte-Programmablauf" auf Ja. Dadurch werden jedes Mal, wenn Sie Ihre Anwendung im Simulator ausführen und die Anwendung beenden, Code Coverage-Dateien generiert. Fügen Sie UIApplicationExitsOnSuspend in Ihrer Info.plist-Datei hinzu und setzen Sie diese Option auf "YES". Führen Sie den UI-Automatisierungstest aus, und am Ende können Sie die App beenden, indem Sie entweder die Taste HOME im Simulator manuell drücken oder die Methode UIATarget.localTarget (). DisableAppForDuration () verwenden. Hinweis: Wenn Ihre Anwendung über UI-Automatisierungstests verfügt, die auf der Methode deactivateAppForDuration () basieren, werden die Tests nach Ausführung des Befehls beendet.
Sobald Sie die gcda-Dateien haben, können Sie die cobertura xml-Datei erzeugen, indem Sie gcovr herunterladen ( Ссылка ) und den Befehl ausführen
gcovr -r Ihr_Stammverzeichnis --Objektverzeichnis path_to_gcda_files --xml & gt; coverage.xml
Damit können Sie das Jenkins Cobertura-Plugin einrichten, um die Informationen nach Bedarf anzuzeigen.
Quelle: Ссылка
Aus meiner Sicht werden Coverage-Dateien erzeugt, wenn die App beendet wird, aber Sie können den Simulator nicht einfach töten.
Haben Sie versucht, ein separates Ziel für Ihre App zu erstellen, bei dem die info.plist-Eigenschaft "UIApplicationExitsOnSuspend" auf "true" gesetzt ist?
Es gibt jedoch ein etwas größeres Problem. Die generierten Coverage-Dateien sind nicht kumulativ und werden jedes Mal überschrieben, wenn die Anwendung beendet wird. Je nachdem, wie Ihre Tests strukturiert sind (d. H., Sie töten und starten die App für jeden einzelnen Test), haben Sie möglicherweise Schwierigkeiten, eine anständige Codeabdeckung zu erhalten.
Tags und Links ios ios-ui-automation