Bonnes pratiques et astuces

maj 31 oct 2024

Processus d'écriture de script

Tester au fur et à mesure de l’automatisation :

  • Ajouter les mots clé startMeasure,Nom d'étape au fichier de test

  • Ajouter la ou les instructions GDSL pour composer l'étape (par exemple, cliquer)

  • Identifier un texte sur l'application qui doit apparaître à la fin de l'action ou du chargement

  • Ajouter le texte attendu avec un mot-clé wait

  • Ajouter le mot clé stopMeasure pour terminer la mesure de l’étape

  • Lancer le test

  • Continuer comme cela étape par étape

Note: L'étape de mesure des charges résiduelles est nécessaire car des ressources sont utilisées même si la vue est présente (fin de chargement de certains éléments de la page, scripts...). Dans ce cas, la ligne pause,${PAUSEAFTERLOAD} est utilisée.

L'extension GDSL de VS Code permet de guider ce processus et d'éviter les erreurs.

 

## Ajouter des commentaires pertinents au code :

  • Au début du script, donnez une brève description du scénario

  • Lors de l'utilisation d'une commande ClickByXY ou ClickById, indiquez l'action effectuée par cette commande.

  • Lors de l'utilisation d'une commande if, while ou find. Précisez le but de l'utilisation.

  • Lorsqu'une manipulation sort de l'ordinaire (nécessité d'une intervention manuelle, traitement hors mesure, pause anormale, etc.) Expliquer la manipulation en question et pourquoi elle doit être effectuée de cette manière.

 

Astuces pour l’automatisation

Passer le terminal en anglais car les terminaux du testbench sont en anglais.

 

Pour aller plus vite lors de l'écriture des scripts et de la partie test, modifiez le fichier job.yml :

  • Remplacer PAUSEDURATION: 30000 qui définit le temps d’une étape de pause, par PAUSEDURATION: 1000

  • config-skipsetupphone: true permet de passer la préparation de l’appareil au début du test

  • La commande testrunner testdslcommand -c "clickBy..." permet d’exécuter une commande unitaire sans relancer le script entier

  • --dd ou --disable-dumpsys pour supprimer l'itération dumpsys avec le CLI. Veillez à supprimer cette option pour les mesures finales.

 

Chaque fois que vous lancez un test, il est envoyé par défaut sur le serveur Greenspector. Pendant la phase d'automatisation, il n'est pas nécessaire d'envoyer les données sur l'application Greenspector. Dans le fichier job.yml,

  • Remplacer online: true par online: false pour éviter que des mesures non pertinentes soient chargées dans l’interface web.

Si vous souhaitez voir des résultats détaillés sur la plateforme en ligne, réglez ce paramètre à true et créez une version test pour ne pas les mélanger avec les mesures officielles.

 

Parfois, il existe des éléments présents seulement au premier affichage d’un écran. Cela peut poser problème dans le cas où plusieurs tests sont effectués sur la même application.

Ainsi, nous vous conseillons d’utiliser les commandes suivantes : Les "waitUntilBeforeClick"

  • WaitUntilByTextBeforeClick

  • WaitUntilByDescBeforeClick

  • WaitUntilByTextExactBeforeClick

  • WaitUntilByIdBeforeClick

Le second paramètre de ces méthodes est un booléen optionnel qui permet s’il est à true de ne pas faire échouer le test sur cette instruction même si elle est fausse. La valeur par défaut de ce paramètre est false.

Ce test échouera si "OK" n'est pas trouvé : waitUntilByTextBeforeClick,OK

Ce test continue à la prochaine instruction si "OK" n'est pas trouvé : waitUntilByTextBeforeClick,OK,true

 

Bonnes pratiques en GDSL

Préparer la mesure de l’environnement web avec browserPrepareAndOpenForReference qui permet de nettoyer le cache et supprimer les onglets ouverts. Ensuite, une page entièrement noire est ouverte (https://dl.greenspector.com/black/), qui servira pour la mesure de référence pour le web.

 

Nommer les étapes avec la convention d'appellation camelCase (exemple : CHRGT_homePage)

  • Ne pas utiliser "/" dans le nom de l'étape : les mesures ne seront pas envoyées

  • Mentionner le nom de la vue dans celui de l'étape :

    • CHRGT_[nomVue]

    • Dans le cas d’une étape d’action, il est recommandé d’utiliser un nommage de la forme ACTION_[NomVue]_[nomAction] (exemple: ACTION_homePage_writeSearch)

    • SCROLL_[nomVue]

    • PAUSE_[nomVue]

 

Lors d’un chargement d’une nouvelle vue :

  • Attendre (waitUntil) le dernier élément à s’afficher. Cette commande peut également être utilisée pour détecter le succès d’une action (si celle-ci entraîne la modification de l’affichage).

    • Il est recommandé d’attendre l'élément exact : waitUntilTextExact

    • Dans tous les cas, n’utiliser waitUntilPageLoaded qu’en dernier recours. En effet, toutes les données ne sont pas forcément chargées après cette fonction. Cela dépend de la qualité du réseau. Il est préférable d’utiliser une fonction comme waitUntilText ou waitUntilId.

  • Avant de procéder à une mesure de chargement, vérifiez que l'élément prévu (waitUntil) n’est pas déjà présent : (assertNotExists)

 

Les valeurs d’étapes de pause :

  • Une étape de pause suit chaque étape de chargement. Elle a alors une durée PAUSEDURATION de 30000 ms. Ce type de pause peut également être utilisé pour mesurer l'état inactif d’un service numérique.

  • Une pause PAUSEAFTERLOAD de 1000 ms à la fin des étapes de chargement et d’action/scroll

  • Une pause PAUSEAFTERACTION de 500 ms est placée après chaque commande d’action (sauf avant une pausePAUSEAFTERLOAD). Cela certifie que les étapes durent au moins une seconde.

  • Une pause PAUSEAFTERSCROLL de 500 ms est placée après chaque commande de scroll/swipe (sauf avant une pause PAUSEAFTERLOAD)

 

Priorités des balises de détection d'éléments : texte/description > id > classe > package

  • S'il n'est pas possible de trouver l'élément via ces balises, utiliser la méthode de l’arborescence (parent/enfant)

  • Seulement si les méthodes ci-dessus ne sont pas possibles, utiliser XY ou Percent (et préciser en commentaire l'élément cliqué)

 

Pendant un défilement d'écran, swipeVertical est préférable à scrollDownward ou scrollUpward, car il est plus précis. Pour encore plus de précision, vous pouvez ajouter un 4e paramètre avec le temps de balayage (par défaut 500 ms). Pour en savoir plus, voir la documentation sur le scroll.

La fonction swipeVerticale n’existe pas sur iOS. A la place, il existe les fonctions scrollDown, scrollUp et swipe.

 

En particulier sur le web, accepter les cookies dans une mesure à part :

measureStart,CHRGT_homePageAfterCookies clickByText,accept all waitUntilText,Actu pause,${PAUSEAFTERLOAD} measureStop measureStart,PAUSE_homePageAfterCookies pause,${PAUSEDURATION} measureStop

 

La fonction clickByText effectue une recherche par texte, puis par description. Elle est donc utile quand la description est accessible.

 

Lors du remplissage des formulaires :

  • La fonction pressBack permet de désactiver le clavier. Cela permet aussi de sortir du mode plein écran des vidéos.

  • Si les champs ne sont pas accessibles par leur texte, leur description ou leur identifiant, il est possible d’utiliser la fonction clickOnFirstEmptyEditText. Cela permet de sélectionner le prochain champ de texte vide.

  • Après la fonction enterText, ne pas écrire de caractères spéciaux ni accentués car ils ne sont pas pris en compte. Cette fonction peut aussi inverser des numéros lors du remplissage d’un numéro de téléphone dans un champ. Pour contourner ce problème, il est possible d’utiliser les fonctions commençant par setText.