Tester la segmentation

Lorsque le corpus de tests est volumineux ou que le temps d'exécution devient long, nous offrons la possibilité de répartir les tests sur plusieurs appareils : le sharding .

Le partage nécessite des conditions préalables pour que l'exécuteur de test prenne en charge le partage.

La majorité des principaux testeurs prennent déjà en charge le partitionnement, aucun travail supplémentaire n'est donc requis. Ceux-ci prennent déjà en charge le sharding : tests d'instrumentation, tests pilotés côté hôte, GTest.

Il existe deux types de partitionnement que nous prenons en charge dans Tradefed : local et distribué. Ils partagent certaines similitudes, c'est pourquoi cette page décrit les propriétés communes puis les spécificités de chacun.

Propriétés communes

Les deux formes de partitionnement supposent les mêmes propriétés de la part des exécuteurs de tests : les fragments doivent être indépendants et déterministes . La première étape des deux partitionnements consiste à créer la liste complète ordonnée des tests, puis à les diviser en différents groupes/fragments.

La principale différence entre les formulaires de partitionnement réside dans la manière dont ils exécutent les tests. Plus de détails dans les sections ci-dessous.

Partage local

Le partitionnement local signifie que tous les appareils impliqués dans l’exécution de l’invocation partitionnée sont connectés au même hôte physique.

Exécution

Le partitionnement local tire parti du fait que tous les appareils sont connectés au même hôte en créant un pool de tests qui doivent être exécutés et en demandant à chaque appareil d'interroger les tests lorsqu'il est libre (c'est-à-dire effectué avec le test précédent). Il en résulte une utilisation optimisée de l’appareil. Nous l'appelons également le partitionnement dynamique .

Possibilités

--shard-count XX

Partitionnement distribué

Le partitionnement distribué signifie que tous les appareils impliqués dans l’exécution de l’invocation fragmentée peuvent vivre n’importe où et être connectés à différents hôtes physiques.

Exécution

Le partitionnement distribué se produit lors de la création de la liste de tests, et le contenu de chaque partition exécute uniquement la partition actuellement demandée. Ainsi, tous les fragments distribués créent d’abord la même liste, puis en exécutent un sous-ensemble mutuellement exclusif, ce qui entraîne l’exécution de tous les tests.

La principale propriété de cette forme est que les fragments ne se connaissent absolument pas et peuvent échouer indépendamment.

Le principal inconvénient est que la longueur des fragments n'est pas nécessairement équilibrée, simplement parce que nous ne pouvons pas prédire à l'avance la durée d'exécution de chaque test dans chaque fragment. La distribution est faite pour avoir approximativement le même nombre de cas de test dans chaque fragment.

Possibilités

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

Partage de jetons

Le partage de jetons peut être utilisé uniquement avec le partage local. L'indicateur n'est pas opérationnel dans les cas d'utilisation de partitionnement non local. Parfois, l'un des appareils impliqués dans le sharding détient des ressources spéciales que d'autres n'ont pas, comme une carte SIM. Certains tests peuvent fonctionner uniquement lorsque cette ressource spéciale est disponible et échoueraient autrement.

Le partage de jetons est notre solution à de tels cas d'utilisation. Les modules de test sont capables de déclarer la ressource spéciale dont ils ont besoin dans leur AndroidTest.xml , et Tradefed achemine les tests vers un appareil disposant de la ressource.

Configuration XML

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

La value du jeton correspond à TokenProperty de Tradefed et est associée à un gestionnaire dans TokenProviderHelper .

Cela permet d'exécuter des modules de test sur des appareils capables d'exécuter correctement les tests.

Que se passe-t-il si aucun appareil ne peut exécuter le test ?

Si aucun périphérique disponible ne dispose de la ressource correspondant au module de test, le module de test échoue et est ignoré car il ne peut pas s'exécuter correctement.

Par exemple, si un module de test demande l'exécution d'une carte SIM mais qu'aucun appareil ne dispose d'une carte SIM, le module de test échoue.

Mise en œuvre

Transmettez cet indicateur de fonctionnalité à la ligne de commande principale de Tradefed :

--enable-token-sharding