Testfragmentierung

Wenn der Testkorpus groß oder die Ausführungszeit lang ist, bieten wir Möglichkeit der Aufteilung der Tests auf mehrere Geräte: Fragmentierung.

Für die Fragmentierung gelten Voraussetzungen damit der Test-Runner die Fragmentierung unterstützt.

Die Mehrzahl der Haupt-Test-Runner unterstützt bereits das Sharding, sodass keine zusätzlichen Arbeit erforderlich ist. Diese unterstützen Fragmentierung bereits: Instrumentierungstests, gesteuerten Tests, GTest.

In Tradefed werden zwei Arten von Fragmentierung unterstützt: lokal und dezentrale. Sie haben einige Gemeinsamkeiten. Daher werden auf dieser Seite die allgemeinen Eigenschaften und und die jeweiligen Besonderheiten.

Allgemeine Eigenschaften

Bei beiden Formen der Fragmentierung werden dieselben Eigenschaften von den Test-Runnern vorausgesetzt: Shards. müssen unabhängig und deterministisch sein. Der erste Schritt beider Fragmentierung um die komplette geordnete Liste der Tests zu erstellen Gruppen/Shards.

Der Hauptunterschied der Fragmentierungsformen liegt in der Art und Weise, wie die Tests ausgeführt werden. Weitere Informationen finden Sie in den folgenden Abschnitten.

Lokale Fragmentierung

Lokale Fragmentierung bezieht sich auf alle Geräte, die an der Ausführung der fragmentierten Tabelle beteiligt sind. Aufrufe mit demselben physischen Host verbunden sind.

Umsetzung

Bei der lokalen Fragmentierung werden Vorteile genutzt, die alle Geräte mit demselben indem Sie einen Pool von Tests erstellen, die ausgeführt werden müssen Geräteumfragen durchführen, wenn sie kostenlos sind, d. h., sie haben mit dem vorherigen Test durchgeführt. Dies führt zu einer optimierten Geräteauslastung. Wir nennen es auch dynamische Fragmentierung.

Optionen

--shard-count XX

Verteilte Fragmentierung

Verteilte Fragmentierung bezieht sich auf alle Geräte, die an der Ausführung des Fragmentierter Aufruf kann überall auftreten und mit verschiedenen physischen Hosts.

Umsetzung

Die verteilte Fragmentierung erfolgt beim Erstellen der Testliste und Jedes Shard führt nur das aktuell angeforderte Shard aus. Alle Verteilte Shards erstellen zunächst dieselbe Liste und führen dann gegenseitig exklusive Teilmenge davon, was dazu führt, dass alle Tests ausgeführt werden.

Die Haupteigenschaft dieser Form ist, dass die Scherben keineswegs bewusst sind. und unabhängig voneinander ausfallen können.

Der Hauptnachteil ist, dass die Shard-Länge nicht unbedingt ausgeglichen ist, da wir die Laufzeit jedes Tests in jedem Shard nicht im Voraus vorhersagen können. Die Verteilung soll ungefähr die gleiche Anzahl von Testläufen umfassen. in den einzelnen Shards.

Optionen

--shard-count XX --shard-index XX

Token-Fragmentierung

Die Token-Fragmentierung kann nur mit der lokalen Fragmentierung verwendet werden. Die Kennzeichnung lautet in nicht lokalen Sharding-Anwendungsfällen nicht funktionsfähig sind. Manchmal kann eines der Geräte die an der Fragmentierung beteiligt sind, enthält besondere Ressourcen, die andere nicht haben, z. B. eine SIM-Karte . Einige Tests funktionieren möglicherweise nur, wenn die entsprechende spezielle Ressource verfügbar ist und sonst scheitern würde.

Die Token-Fragmentierung ist unsere Lösung für solche Anwendungsfälle. Testmodule können in der AndroidTest.xml angeben, welche spezielle Ressource benötigt wird, und Tradefed leitet die Tests an ein Gerät mit der Ressource weiter.

XML-Konfiguration

<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />

Der value des Tokens stimmt mit dem von Tradefed überein TokenProperty und einem Handler in TokenProviderHelper

So können Testmodule auf Geräten ausgeführt werden, die Tests ausführen.

Was passiert, wenn der Test auf keinem Gerät ausgeführt werden kann?

Wenn auf keinem Gerät eine Ressource vorhanden ist, die dem Testmodul entspricht: Das Testmodul ist fehlgeschlagen und wurde übersprungen, da es nicht ordnungsgemäß ausgeführt werden kann.

Beispiel: Ein Testmodul fordert die Ausführung einer SIM-Karte an, aber keine Geräte haben ein SIM-Karte: Das Testmodul schlägt fehl.

Implementierung

Übergeben Sie dieses Funktions-Flag an die Tradefed-Hauptbefehlszeile:

--enable-token-sharding