Lorsque le corpus de test est volumineux ou que le temps d'exécution devient long, nous vous proposons de répartir les tests sur plusieurs appareils : le partitionnement.
La segmentation comporte des conditions préalables pour que le test runner soit compatible avec la segmentation.
La majorité des principaux exécutants de tests prennent déjà en charge le partitionnement. Aucune action supplémentaire n'est donc requise. Les tests d'instrumentation, les tests pilotés côté hôte et GTest sont déjà compatibles avec le partitionnement.
Tradefed est compatible avec deux types de partitionnement : local et distribué. Elles partagent certaines similitudes. Cette page décrit donc les propriétés communes, puis les spécificités de chacune.
Propriétés courantes
Les deux formes de partitionnement supposent les mêmes propriétés de la part des exécuteurs de tests : les partitions doivent être indépendantes et déterministes. La première étape des deux types de partitionnement consiste à créer la liste complète et ordonnée des tests, puis à les diviser en différents groupes/partitions.
La principale différence entre les formes de partitionnement réside dans la façon dont elles exécutent les tests. Pour en savoir plus, consultez les sections ci-dessous.
Sharding 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 de tous les appareils connectés au même hôte en créant un pool de tests à exécuter et en demandant à chaque appareil d'interroger les tests lorsqu'il est libre (c'est-à-dire lorsqu'il a terminé le test précédent). Cela permet d'optimiser l'utilisation des appareils. Nous l'appelons également partitionnement dynamique.
Options
--shard-count XX
Partitionnement distribué
Le partitionnement distribué signifie que tous les appareils impliqués dans l'exécution de l'appel partitionné peuvent se trouver n'importe où et être connectés à différents hôtes physiques.
Exécution
Le partitionnement distribué a lieu lors de la création de la liste des tests. Le contenu de chaque partition n'exécute que la partition actuellement demandée. Ainsi, tous les shards distribués créent d'abord la même liste, puis exécutent un sous-ensemble mutuellement exclusif de celle-ci, ce qui permet d'exécuter tous les tests.
La principale propriété de ce formulaire est que les fragments ne se connaissent pas et peuvent échouer indépendamment.
Le principal inconvénient est que la longueur des partitions 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 partition. 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
Partitionnement des jetons
Le partitionnement des jetons ne peut être utilisé qu'avec le partitionnement local. L'indicateur n'est pas opérationnel dans les cas d'utilisation du partitionnement non local. Parfois, l'un des appareils impliqués dans le partitionnement détient des ressources spéciales que les autres n'ont pas, comme une carte SIM. Il est possible que certains tests ne fonctionnent que lorsque cette ressource spéciale est disponible et échouent dans le cas contraire.
Le partitionnement des jetons est notre solution pour ces cas d'utilisation. Les modules de test peuvent déclarer les ressources spéciales dont ils ont besoin dans leur fichier 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 n'en possède, le module de test échoue.
Implémentation
Transmettez ce flag de fonctionnalité à la ligne de commande Tradefed principale :
--enable-token-sharding