Tradefed-Test-Runner schreiben

Auf dieser Seite wird beschrieben, wie Sie einen neuen Test-Runner in Tradefed schreiben.

Hintergrund

Wenn Sie wissen möchten, wo sich Test-Runner in der Tradefed-Architektur befinden, Siehe Struktur eines Test-Runners.

Dies ist keine Voraussetzung für das Schreiben eines neuen Test-Runners. Test-Runner können isoliert geschrieben.

Minimales Minimum: Schnittstelle implementieren

Die Mindestanforderung für die Qualifizierung als Tradefed-Test-Runner ist die Implementierung der IRemoteTest-Schnittstelle und genauer gesagt die Methode run(TestInformation testInfo, ITestInvocationListener listener).

Diese Methode wird vom Harness aufgerufen, wenn der Test-Runner verwendet wird, einem Java Runnable.

Jeder Teil dieser Methode wird als Teil der Ausführung des Test-Runners betrachtet.

Ergebnisse des Test-Runners melden

Die Methode run in der Basisschnittstelle ermöglicht Zugriff auf das Listener-Objekt von Geben Sie ITestInvocationListener ein. Dieses Objekt ist der Schlüssel zur strukturierten Berichterstellung. Ergebnisse vom Test-Runner an das Harness.

Durch die Meldung strukturierter Ergebnisse hat ein Test-Runner die folgenden Eigenschaften:

  • Erstellen Sie eine Liste aller durchgeführten Tests, wie lange sie gedauert haben und ob sie einzeln bestanden wurden, oder nicht bestanden wurden.
  • Meldet Messwerte zu den Tests, falls zutreffend, z. B. die Messwerte zur Installationszeit.
  • Passt in die meisten Infrastruktur-Tools, wie Anzeige von Ergebnissen und Metriken usw.
  • Die Fehlerbehebung ist in der Regel einfacher, da es einen detaillierteren Trace der Seite gibt. Ausführung.

Das Melden strukturierter Ergebnisse ist jedoch optional. könnte ein Test-Runner den Status der gesamten Ausführung als BESTANDEN oder FEHLGESCHLAGEN ohne Einzelheiten zur Ausführung zu dokumentieren.

Die folgenden Ereignisse können für den Listener aufgerufen werden, um das Netzwerk des aktuellen Fortschritt der Ausführungen:

  • testRunStarted: Benachrichtigung am Anfang einer Gruppe von Testläufen, die zusammengehören.
    • testStarted: Benachrichtigen, wenn ein Testlauf gestartet wird.
    • testFailed/testIgnorieren: Statusänderung des Testlaufs benachrichtigen in Bearbeitung ist. Es wird ein Testlauf ohne Statusänderung berücksichtigt bestanden.
    • testEnded: Das Ende des Testlaufs wird benachrichtigt.
  • testRunFailed: Benachrichtigt, dass der Gesamtstatus der Gruppe von Testläufen die Ausführung scheitert. Ein Testlauf kann mit bestanden oder nicht bestanden sein. unabhängig von den Ergebnissen des Testlaufs, je nachdem, die Ausführung erwartet hat. Ein Binärprogramm mit mehreren Testläufen könnte alle bestandenen Testläufe melden, jedoch mit einem Fehler-Exit-Code (für alle Gründe: gehackte Dateien usw.).
  • testRunEnded: Benachrichtigt das Ende der Gruppe von Testläufen.

Die Beibehaltung und Sicherstellung der korrekten Reihenfolge der Callbacks ist das des Test-Runner-Implementierers, z. B. dafür zu sorgen, testRunEnded wird im Ausnahmefall mit einer finally-Klausel aufgerufen.

Testlauf-Callbacks (testStarted, testEnded usw.) sind optional. Ein Test kann ohne Testläufe erfolgen.

Sie werden feststellen, dass diese Struktur von Ereignissen Typische JUnit-Struktur. Das Ziel ist es, die Dinge so grundsätzlich wie möglich zu halten, sodass Entwickler wissen in der Regel.

Logs vom Test-Runner melden

Wenn Sie Ihre eigene Tradefed-Testklasse oder -Runner schreiben, implementieren Sie IRemoteTest und rufen Sie über die Methode run() ein ITestInvocationListener ab. Dieser Listener wie folgt zur Protokollierung verwendet werden:

    listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);

Mit einem Gerät testen

Die Mindestoberfläche oben ermöglicht die Ausführung sehr einfacher, isolierter Tests. und benötigen keine bestimmten Ressourcen, zum Beispiel Java-Unittests.

Testautoren, die mit dem nächsten Schritt des Gerätetests fortfahren möchten, benötigen die folgenden Oberflächen:

  • IDeviceTest lässt zu, das ITestDevice-Objekt zu empfangen, das das Gerät unter dem und stellt die API für die Interaktion bereit.
  • IBuildReceiver kann der Test das IBuildInfo-Objekt abrufen, das am Build-Provider-Schritt die alle Informationen und Artefakte im Zusammenhang mit der Testeinrichtung enthält.

Test-Runner sind in der Regel an diesen Oberflächen interessiert, Artefakte im Zusammenhang mit der Ausführung wie zusätzliche Dateien Gerät unter Test, das bei der Ausführung als Ziel verwendet wird.

Mit mehreren Geräten testen

Tradefed unterstützt die gleichzeitige Durchführung von Tests auf mehreren Geräten. Dies ist hilfreich beim Testen von Komponenten, die eine externe Interaktion erfordern, z. B. Smartphone und Smartwatch koppeln.

Um einen Test-Runner zu schreiben, der mehrere Geräte verwenden kann, benötigen Sie zur Implementierung der IMultiDeviceTest Damit kann eine Karte von ITestDevice zu IBuildInfo empfangen werden, die die vollständige Liste der Gerätedarstellungen und die zugehörigen Build-Informationen

Das Setter aus der Schnittstelle wird immer vor der run-Methode aufgerufen. kann davon ausgegangen werden, dass die Struktur verfügbar ist, wenn run aufgerufen wird.

Die Einrichtungen der Tests wurden erkannt

Für einige Test-Runner-Implementierungen sind möglicherweise Informationen zur Gesamteinrichtung erforderlich damit alles richtig funktioniert, zum Beispiel einige Metadaten zum Aufruf oder die target_preparer zuvor ausgeführt wurde usw.

Dazu kann ein Test-Runner auf das IConfiguration-Objekt zugreifen. Teil davon ist und in dem es ausgeführt wird. Weitere Informationen finden Sie in der Konfigurationsobjekt in der Beschreibung.

Für die Implementierung des Test-Runners müssen Sie den IConfigurationReceiver um das Objekt IConfiguration zu erhalten.

Flexibler Test-Runner

Test-Runner können eine flexible Möglichkeit zum Ausführen ihrer Tests bieten, wenn sie eine können Sie diese gezielt steuern. So kann ein JUnit-Test-Runner einzeln und führen Sie jeden Unittest aus.

So können der größere Netzwerk- und Infrastrukturbereich diese feine Kontrolle und Nutzer können den Test-Runner teilweise über Filterung ausführen.

Informationen zur Filterunterstützung finden Sie in der ITestFilterReceiver Damit können Gruppen von include- und exclude-Filtern für die Tests empfangen werden. die ausgeführt werden sollte oder nicht.

Gemäß unserer Konvention wird ein Test ausgeführt, wenn er einer oder mehreren der "Einschließen"-Filter UND stimmt mit keinem der "Ausschließen"-Filter überein. Falls nicht, füge -Filter angegeben sind, sollten alle Tests ausgeführt werden, solange sie keinem der zum Ausschließen.