Sharding testen

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 meisten der wichtigsten Testläufer unterstützen bereits das Sharding, sodass keine zusätzlichen Arbeiten erforderlich sind. Diese unterstützen Fragmentierung bereits: Instrumentierungstests, gesteuerten Tests, GTest.

In Tradefed werden zwei Arten von Sharding unterstützt: lokal und verteilt. 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 bei beiden Shardings besteht darin, die vollständige sortierte Liste der Tests zu erstellen und sie dann in verschiedene Gruppen/Shards aufzuteilen.

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

Lokales Sharding

Bei lokalem Sharding sind alle Geräte, die an der Ausführung der ge shardeten Aufrufe beteiligt sind, mit demselben physischen Host verbunden.

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. mit dem vorherigen Test durchgeführt wurden. Dies führt zu einer optimierten Geräteauslastung. Wir nennen das auch dynamisches Sharding.

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

Das verteilte Sharding erfolgt beim Erstellen der Liste der Tests. Der Inhalt jedes Shards wird nur für den aktuell angeforderten Shard ausgeführt. So erstellen alle verteilten Shards zuerst dieselbe Liste und führen dann eine sich gegenseitig ausschließende Teilmenge davon aus, 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 ist so, dass in jedem Shard ungefähr die gleiche Anzahl von Testfällen vorhanden ist.

Optionen

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

Token-Sharding

Die Token-Fragmentierung kann nur mit der lokalen Fragmentierung verwendet werden. Das Flag ist bei nicht lokalen Sharding-Anwendungsfällen nicht funktionsfähig. 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 diese spezielle Ressource verfügbar ist, und würden andernfalls fehlschlagen.

Die Token-Fragmentierung ist unsere Lösung für solche Anwendungsfälle. Testmodule können in ihrem AndroidTest.xml angeben, welche spezielle Ressource sie benötigen. Tradefed leitet die Tests dann an ein Gerät weiter, auf dem die Ressource vorhanden ist.

XML-Konfiguration

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

Die value des Tokens stimmt mit der TokenProperty von Tradefed überein und ist mit einem Handler in TokenProviderHelper verknüpft.

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

Was passiert, wenn kein Gerät den Test ausführen kann?

Wenn keine Geräte verfügbar sind, auf denen die mit dem Testmodul übereinstimmende Ressource vorhanden ist, schlägt das Testmodul fehl und wird übersprungen, da es nicht richtig ausgeführt werden kann.

Wenn ein Testmodul beispielsweise eine SIM-Karte anfordert, aber keine Geräte eine SIM-Karte haben, schlägt das Testmodul fehl.

Implementierung

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

--enable-token-sharding