Lorsque le corpus de tests 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 exécuteurs de test principaux est déjà compatible avec la segmentation. Aucune action supplémentaire n'est donc requise. Ceux-ci sont déjà compatibles avec la segmentation: tests d'instrumentation, tests pilotés côté hôte et GTest.
Tradefed prend en charge 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 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 de ces deux partitions consiste à créer la liste ordonnée complète des tests, puis à les répartir 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
Segmentation 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 simplement car nous ne pouvons pas prédire à l'avance l'exécution de chaque test dans chaque segment. La distribution comporte approximativement le même nombre de scénarios de test dans chaque segment.
Options
--shard-count XX --shard-index XX
Segmentation des jetons
La segmentation de jetons ne peut être utilisée qu'avec la segmentation locale. 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 fonctionnent peut-être que lorsque cette ressource spéciale est disponible et échouent dans le cas contraire.
Le fractionnement de jetons est notre solution à 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 l'exécution d'une carte SIM, mais qu'aucun appareil ne possède de carte SIM, le module de test échoue.
Implémentation
Transmettez cet indicateur de fonctionnalité à la ligne de commande principale de Tradefed:
--enable-token-sharding