Quelle est la structure typique d'un test automatisé?

Comment structurer nos tests automatisés? Plus important encore, comment pouvons-nous rendre nos tests automatisés déterministes et reproductibles?

Chaque test automatisé doit être validé par rapport à une ou plusieurs conditions prescrites. Autrement dit, lors de la création d'un test automatisé, nous devons savoir quel devrait être le résultat d'une action afin de pouvoir mettre en place des déclarations d'évaluation appropriées.

Les tests automatisés doivent être exécutés automatiquement sans intervention manuelle. De plus, les résultats des tests automatisés doivent être déterministes et fiables.


Mais comment y parvenir?

La réponse est assez simple mais souvent négligée, à savoir l'utilisation de données contrôlées .




Composantes d'un test

Pour exécuter un test, nous avons besoin de trois composants:

  • Application
  • Scénario
  • Données

Le seul composant qui influence fortement le comportement d'une application est Les données ; Les données dont l'application a besoin et les données qui lui sont fournies.

Pour illustrer cela, pensez à une application e-commerce où les utilisateurs peuvent rechercher des produits.

La page de résultats de recherche apparaît et se comporte différemment lorsqu'il y a des produits dans la base de données et lorsque la base de données est vide.


Évidemment, nos tests automatisés doivent prendre en compte différents états d'application et vérifier les différents comportements.

Lorsque nous recherchons un produit et que nous voyons des listes, comment pouvons-nous valider les résultats? Comment pouvons-nous être absolument sûrs que ces données correspondent à ce que nous attendons? De plus, comment pouvons-nous rendre ce processus reproductible de sorte qu'à chaque nouveau déploiement, nous obtenions le même résultat?



Comment rendre les tests automatisés déterministes

Pourquoi avons-nous besoin de données contrôlées dans les tests automatisés?

Je vous donne un exemple de mauvaise pratique que je constate fréquemment dans des tests automatisés:


Un très mauvais test est que nous recherchons un produit et nous affirmons que nous obtenons des listes affichées. Nous n'allons pas vérifier en profondeur - tant qu'il y aura des produits affichés sur la page, alors tout va bien. FOU!

Malheureusement, cela laisserait certaines questions sans réponse:

  • Comment savons-nous que les données proviennent de la bonne base de données? Sommes-nous connectés à un serveur simulé avec des données simulées?
  • Comment savons-nous que les données renvoyées correspondent réellement à celles que nous avons recherchées?
  • Comment savons-nous que le nombre correct d'éléments est affiché dans la page de résultats de recherche?

Nous devons pouvoir nous affirmer sur les résultats des tests. Les affirmations doivent avoir un sens et être des vérifications valides.

Si nous ne contrôlons pas les données, nous n’avons aucun moyen de connaître ou de vérifier les questions ci-dessus.


Pour rendre les tests automatisés déterministes, nous devons semer les données nous-mêmes. Les tests automatisés doivent injecter des données connues et valider le résultat par rapport à ces données.

Si nous nous basons uniquement sur les données utilisées par d'autres processus et susceptibles de changer, nos tests automatisés ne seraient pas fiables. Nous n'avons aucun moyen de déterminer les résultats.



Comment rendre les tests automatisés répétables

Les tests automatisés doivent s'exécuter automatiquement. De manière véritablement automatisée, les tests sont déclenchés par un processus tel qu'un pipeline de build CI / CD qui contrôle l'exécution et le reporting des tests.

Encore une fois, la façon dont nous traitons les données affecte la fiabilité et la répétabilité des tests automatisés.


Une structure typique pour un bon test automatisé est

  • 1 - Configuration [Créer des données connues]
  • 2 - Test [Utiliser les données créées]
  • 3 - Démontage [Détruire les données créées]

Créer des données de test

Pourquoi avons-nous besoin de configurer les données de test à chaque fois? Cela ne va-t-il pas nous ralentir à chaque fois que nous effectuons les tests? Ne pouvons-nous pas le configurer une seule fois, puis réutiliser les mêmes données?

Eh bien, comment savoir ce qu'il advient des données une fois le test terminé? Le test d’une autre personne a peut-être modifié ou supprimé les données?

Comment pouvons-nous être sûrs que la prochaine fois que nous voudrons exécuter le même test, les données sont déjà présentes pour que nous les utilisions?

Détruire les données de test

Pourquoi devons-nous détruire les données de test créées?

Parce que lors de la prochaine exécution, lorsque nous essaierons de créer les données de test, il y aura des données en double ou pire, nous pourrions avoir des exceptions lancées dans les tests.

Si nous ne supprimons pas les données de test et ne continuons pas à recréer des données de test aléatoires, alors, au fil du temps, la base de données aura beaucoup de données de test et nous aurons d’autres problèmes.

Assurez-vous donc de créer et de détruire vos données de test.



Résumé

Afin de tirer le meilleur parti de nos efforts d'automatisation des tests, nous devons concevoir de bons tests avec une bonne structure.

Une façon de rendre nos tests prévisibles et déterministes est de contrôler les données de test. Au lieu de s'appuyer sur les données existantes pour les tests, les tests automatisés devraient amorcer les données comme une étape préalable à l'exécution de scénarios.

En semant nos propres données de test, nous pouvons tester diverses conditions. De plus, nous pouvons être certains que les instructions assert vérifient les données connues. Cela rendra les tests déterministes.

Pour exécuter des scénarios de test automatisés à plusieurs reprises, nous devons nous assurer que nos tests créent les données de test avant d'exécuter les scénarios. Cela se fait dans la section de configuration d'un test automatisé.

Les scénarios utiliseraient ensuite les données créées à l'étape de configuration.

Enfin, lorsque nous en avons terminé avec les tests, nous devrions avoir un moyen de nettoyer l'environnement de test en supprimant toutes les données créées. Cela se fait dans la section de démontage d'un test automatisé.

En rapport: