UIAutomation mit Codeabdeckung

8

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:

  1. Hinzufügen von UIAutomation zu einer bereits ausgeführten Anwendung im iOS-Simulator.
    • das scheint unmöglich. Entweder wird die laufende Anwendung von den Geräten beendet und eine neue Instanz wird neu gestartet oder es wird eine kryptische Fehlermeldung ausgegeben.
  2. Beenden Sie den Simulator am Ende des js-Skripts mit einer Kombination aus osascript und UIAHost. performTaskWithPathArgumentsTimeout .
    • Anwendung wurde ordnungsgemäß beendet, aber keine Abdeckung generiert.

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.

    
Sulthan 19.11.2012, 12:20
quelle

2 Antworten

2

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: Ссылка

    
Ed-E G 09.07.2013 15:25
quelle
0

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.

    
JonB 31.12.2012 08:49
quelle

Tags und Links