Lorsque le corpus de test est volumineux ou que le temps d'exécution devient long, nous proposons de répartir les tests sur plusieurs appareils (segmentation).
La segmentation nécessite des conditions préalables pour que le lanceur de tests soit compatible avec la segmentation.
La majorité des principaux outils d'exécution de tests est déjà compatible avec le fractionnement. Aucun travail supplémentaire n'est donc requis. Ils sont déjà compatibles avec le fractionnement: tests d'instrumentation, tests gérés côté hôte, GTest.
Tradefed est compatible avec deux types de partitionnement: local et distribué. Ils partagent certaines similitudes. Cette page décrit donc les propriétés communes, puis les spécificités de chacun.
Propriétés communes
Les deux formes de sharding 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 segmentations consiste à créer la liste complète et triée des tests, puis à les diviser en différents groupes/segments.
La principale différence entre les formes de partitionnement réside dans la manière dont elles exécutent les tests. Pour en savoir plus, consultez les sections ci-dessous.
Division locale
Le fractionnement local signifie que tous les appareils impliqués dans l'exécution de l'appel fractionné sont connectés au même hôte physique.
Exécution
Le sharding local exploite tous les appareils connectés au même hôte en créant un pool de tests à exécuter et en demandant à chaque appareil de polliner les tests lorsqu'il est libre (c'est-à-dire qu'il a terminé le test précédent). L'utilisation de l'appareil est ainsi optimisée. Nous l'appelons également partitionnement dynamique.
Options
--shard-count XX
Division en partitions distribuée
Le partitionnement distribué signifie que tous les appareils impliqués dans l'exécution de l'appel fractionné peuvent se trouver n'importe où et être connectés à différents hôtes physiques.
Exécution
Le fractionnement distribué se produit lors de la création de la liste des tests, et le contenu de chaque fractionnement n'exécute que le fractionnement actuellement demandé. Ainsi, tous les fragments distribués créent d'abord la même liste, puis exécutent un sous-ensemble mutuellement exclusif, ce qui permet d'exécuter tous les tests.
La principale propriété de ce format est que les fragments sont totalement ignorants les uns des autres et peuvent échouer indépendamment.
Le principal inconvénient est que la longueur des segments n'est pas nécessairement équilibrée, car nous ne pouvons pas prédire à l'avance la durée d'exécution de chaque test dans chaque segment. La distribution est conçue pour que chaque segment contienne à peu près le même nombre de cas de test.
Options
--shard-count XX --shard-index XX
Division des jetons
Le fractionnement par jeton ne peut être utilisé qu'avec le fractionnement 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 fractionnement contient des ressources spéciales que les autres ne possèdent pas, comme une carte SIM. Certains tests ne peuvent fonctionner que lorsque cette ressource spéciale est disponible et échouent dans le cas contraire.
Le fractionnement de jetons est notre solution pour ces cas d'utilisation. Les modules de test peuvent 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" />
Le value
du jeton correspond à TokenProperty
de Tradefed et est associé à 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 appareil 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 une carte SIM pour s'exécuter, mais qu'aucun appareil ne dispose d'une carte SIM, le module de test échoue.
Implémentation
Transmettez cet indicateur de fonctionnalité à la ligne de commande principale de Tradefed:
--enable-token-sharding