Testfragmentierung

Wenn der Testkorpus groß ist oder die Ausführungszeit zu lang wird, können Sie die Tests auf mehrere Geräte aufteilen: Sharding.

Für das Sharding gelten Voraussetzungen, damit der Test-Runner das Sharding unterstützt.

Die meisten der wichtigsten Testläufer unterstützen bereits das Sharding, sodass keine zusätzlichen Arbeiten erforderlich sind. Diese unterstützen bereits das Sharding: Instrumentierungstests, hostseitige Tests und GTest.

In Tradefed werden zwei Arten von Sharding unterstützt: lokal und verteilt. Sie haben einige Gemeinsamkeiten. Auf dieser Seite werden daher zuerst die gemeinsamen Eigenschaften und dann die Besonderheiten der einzelnen Typen beschrieben.

Gemeinsame Eigenschaften

Für beide Formen des Sharding gelten dieselben Eigenschaften für die Testausführer: 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 zwischen den Sharding-Formen besteht in der Ausführung der Tests. Weitere Informationen finden Sie in den folgenden Abschnitten.

Lokales Sharding

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

Umsetzung

Beim lokalen Sharding werden alle Geräte genutzt, die mit demselben Host verbunden sind. Dazu wird ein Pool mit Tests erstellt, die ausgeführt werden müssen, und jedes Gerät prüft, ob es verfügbar ist (d. h., ob der vorherige Test abgeschlossen ist). Das führt zu einer optimierten Geräteauslastung. Wir nennen sie auch dynamische Fragmentierung.

Optionen

--shard-count XX

Verteilte Fragmentierung

Verteilte Fragmentierung bedeutet, dass alle Geräte, die an der Ausführung des fragmentierten Aufrufs beteiligt sind, an einem beliebigen Ort existieren und mit verschiedenen physischen Hosts verbunden sein können.

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 Shards sich gegenseitig nicht kennen und unabhängig voneinander ausfallen können.

Der Hauptnachteil besteht darin, dass die Shard-Länge nicht unbedingt ausgewogen ist, da wir die Laufzeit der einzelnen Tests in den einzelnen Shards 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

Token-Sharding kann nur mit lokalem Sharding verwendet werden. Das Flag ist bei nicht lokalen Sharding-Anwendungsfällen nicht funktionsfähig. Manchmal enthält eines der am Sharding beteiligten Geräte spezielle 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.

Token-Sharding 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" />

Der value des Tokens entspricht dem TokenProperty von Tradefed und ist einem Handler in TokenProviderHelper zugeordnet.

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

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

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

Wenn ein Testmodul beispielsweise die Ausführung einer SIM-Karte anfordert, aber keine Geräte über eine SIM-Karte verfügen, schlägt das Testmodul fehl.

Implementierung

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

--enable-token-sharding