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