Comment gérer de gros volumes de tests avec Agilitest

26 septembre 2019

Agilitest a été spécialement étudié pour permettre de gérer de gros volumes de tests :

  • Les scripts ATS qu’il génère sont au format texte, lisibles, transférables et gérables dans des outils de gestion de configuration.
  • Ils sont stockés dans des répertoires qui peuvent être locaux ou partagés et sur lesquels les outils des systèmes d’exploitation sont opérants (recherches, remplacements…).
  • Un test correspond à un script et vous n’avez pas de fichiers binaires additionnels, (évidemment sauf si vous utilisez la reconnaissance graphique).
  • Vous pouvez utiliser des sous-scripts et les mutualiser entre les scripts.
Affichage du répertoire d’un projet dans l’explorateur Agilitest

Ainsi, il n’est pas rare de voir certains de nos clients maintenir plus de 1000 tests dans le cadre d’un projet de tests.

Il y a plusieurs actions possibles qui peuvent être mises en place pour y arriver :

  • Agir sur la gestion des tests
  • Agir sur la granularité des tests
  • Agir sur les données de tests
  • Agir sur les environnements d’exécution des tests

La gestion des tests

Avec Agilitest vous avez trois possibilités pour gérer vos tests :

Gestion à plat

Tous vos tests « racine » sont dans un seul répertoire et vous pouvez utiliser des règles de nommage pour les identifier et repérer les différents domaines fonctionnels qu’ils couvrent. Ce n’est pas la panacée lorsque vous avez beaucoup de tests, mais cette solution a le mérite de vous montrer d’un seul coup d’œil l’ensemble de vos tests. N’oubliez pas que chaque test peut être représenté par un seul fichier dans le répertoire de base, et que vous pouvez ensuite mettre les sous-scripts dans des sous-répertoires dédiés.

Un exemple simple pour faire un test sur des rôles ou sur un workflow, vous pouvez renommer votre test par l’utilisation <nom de l’objet>,<état de l’objet>,<nom du rôle>, <action réalisée>.

Gestion en packages

Vous pouvez créer autant de sous-répertoires que vous avez de domaines fonctionnels à couvrir par vos tests, l’intérêt est que chaque domaine fonctionnel soit identifié et que le nombre de tests soit plus réduit par domaine. Malheureusement, vous aurez des difficultés à gérer les tests inter-domaines.

Gestion par les groupes

Agilitest permet d’affilier les tests à des groupes qui permettront par la suite d’effectuer des règles de filtrage. Cela permet de classer les tests dans plusieurs domaines en même temps, où qu’ils puissent être stockés dans vos arborescences de tests. Dans ce cas, les deux options précédentes restent applicables.

  • Différents domaines fonctionnels de votre application : les groupes permettent à un test d’appartenir à plusieurs domaines fonctionnels
  • Différentes priorité d’exécution : en fonction de vos besoins de livraison, il peut être utile de restreindre vos listes de tests pour faire des non-régressions rapides, ou alors de tout rejouer la nuit…
  • Différents typage des tests : vous pouvez avoir des tests qui couvrent des fonctionnalités et qui ont été réalisés lors du développement de celles-ci, d’autres tests peuvent répondre à la correction d’un bug.
  • Environnements d’exécution : vous pouvez typer vos tests en fonction des environnements sur lesquels vous souhaitez les exécuter : différents navigateurs, mobilité.

La gestion des tests reste un affaire de bon sens, mais n’oubliez pas que vous aller pouvoir les transférer d’un répertoire à l’autre, voire en modifier un certain nombre identifié en utilisant des outils d’édition en batch : les tests sont en effet des fichiers texte.

La granularité des tests

Agilitest est un outil très graphique, mais permet de gérer des tests ayant quand même un grand nombre d’actions.

Nous entendons par action une opération fonctionnelle simple (cliquer sur un bouton, entrer du texte, rechercher un élément) qui au final va inclure tout un ensemble de contrôles techniques qui sont cachés à l’utilisateur final, et qui souvent sont représentées par plusieurs lignes de codes dans des outils équivalents, mais plus bas niveau.

Cela dépend de votre application évidemment, mais nous considérons qu’un test commence à être trop long à partir d’une centaine de lignes
environ.

C’est pourquoi nous avons prévu les appels de sous-scripts pour vous permettre d’une part de mutualiser des comportements entre les tests, et d’autre part de simplifier ceux-ci en les rendant moins longs et plus faciles à appréhender.

Finalement, à partir d’un ensemble de sous-scripts correctement gérés, par exemple dans des répertoires dédiés (login, création de données, opération fonctionnelle simple…), vous pouvez facilement générer très rapidement tout un ensemble de tests fonctionnels complexes et complémentaires.

Les données de tests

Les tests doivent être déterministes : chaque test doit savoir à l’avance quels doivent être les résultats envoyés par l’application et toujours contrôler des données qui lui sont propres. (Cela vous permet d’ailleurs d’envisager plus sereinement la parallélisation des replays nocturnes…).

C’est pourquoi nous pensons qu’il n’y a que deux façons de gérer correctement les données de tests.

Chaque test crée ses données

C’est le plus simple à mettre en œuvre avec l’utilisation des sous-scripts et des fichiers CSV qui vont permettre d’importer très rapidement un ensemble de données pertinentes.

Agilitest fournit une façon efficace de gérer les fichiers de données CSV en les positionnant dans un répertoire dédié sous src/assets/data.

Il est alors possible pour chaque test d’utiliser des fichiers communs avec les autres tests dont il pourra traiter certaines entrées pour les rendre uniques dans son application (par exemple, utilisation des fonctions $uuid, $now, $rndstring permettant de créer des identifiants uniques).

Gestion des fichiers de données de tests dans Agilitest

Les données sont créées par le système d’intégration continue au préalable

Le principe est de générer un ensemble de données de tests préalablement au lancement de la campagne de tests, qui s’appuie sur les fichiers CSV présents dans l’arborescence de tests, et par la suite, les tests vont contrôler que les données sont bien présentes et remontées par l’application.

L’intérêt est que cela peut être plus rapide à l’exécution que de demander à chaque test de créer ses données en utilisant l’application.

Le problème est qu’il faut connaître le modèle de données sous-jacent et donc que l’algorithme qui fait l’import doit être modifié à chaque fois que le modèle évolue.

Les environnements d’exécution des tests

Agilitest permet simplement de créer des exécutions qui vont agir sur des environnements d’exécution des tests différents et de les utiliser avec des systèmes d’intégration continue.

Ainsi pour un ensemble de jeux de tests communs, il sera très simple de générer autant de possibilités de rejouer les tests que l’application supporte d’environnements, à chaque fois cela passe par une exécution ayant des variables d’environnement qui peuvent varier :

  • Plusieurs navigateurs web en passant le nom du navigateur comme variable d’entrée.
  • Une succession de mobiles ayant des propriétés graphiques différentes.
  • Des listes de terminaux qui peuvent varier d’une exécution à l’autre
  • Des fichiers de données différents d’une exécution à l’autre

Dans Agilitest, quasiment tout peut être variabilisé, y compris le nom des fichiers CSV et des sous-scripts. Cela apporte beaucoup de souplesse et de combinatoires possibles sans beaucoup de travail supplémentaire.

La mise en œuvre

Finalement, la mise en œuvre va dépendre beaucoup de ce que vous allez vouloir faire pour réaliser vos tests, ce qu’il est important de retenir cependant est :

  • Qu’il existe un ensemble de mécanismes qui permettent d’apporter beaucoup de mutualisations, de réutilisations et de combinatoires simples à mettre en œuvre pour démultiplier les capacités de testing.
  • Que rien n’est figé, c’est la souplesse d’ATS : des fichiers texte, des répertoires partagés et des éditions en masse possibles permettent de rapidement envisager et mettre en œuvre des évolutions.
  • Qu’Agilitest est un outil qui permet une grande productivité et une rapidité de correction des tests qui vous permettra de gérer facilement l’ensemble de ces tests.