Fonctionnement du GDSL

Fonctionnement du GDSL

MAJ 31 OCT 2024

Afin de décrire un scénario de parcours utilisateur, un script doit être écrit à l'aide du langage GDSL. Celui-ci permet d'automatiser la navigation de votre application sur les smartphones du banc de mesure, et de prendre des mesures tout au long du scénario.

Structure fondamentale

Dans le fichier script, chaque étape est construite selon le même modèle de commande GDSL :

startMeasure,Nom d'étape Instructions GDSL (saisie, clic, défilement, vérification de l'affichage de l'application, pause, etc.) StopMeasure

Chaque instruction entre measureStart et measureStop sera mesurée et tout ce qui sera en dehors sera ignoré.

Les smartphones présents sur le banc d'essai sont configurés en anglais uniquement. Il faut en tenir compte lors de la création du script (textes détectés en anglais, boutons en anglais, etc.).

Etapes techniques standards

  • Référence

    • au début du script

    • permet de mesurer le smartphone sans l'application ou le navigateur sans le site

  • Arrière plan (background):

    • à la fin du script

    • mesure de l'application en arrière-plan puis tuée.

Types d'étapes

Il existe 4 types d'étapes utilisés et indiqués en préfixe du nom de l'étape :

  • Chargement : LOAD_ (ou CHRGT_)

  • Action : ACTION_

  • Scroll : SCROLL_

  • Pause : PAUSE_

A noter historiquement CHRGT_ était utilisé pour les étapes de chargement, LOAD_ est désormais préconisé mais les 2 usages sont possibles.

Chargement :

  • Préfixe du nom d'étape : LOAD_

  • Terminée par l'attente de l’affichage d'un élément dans la nouvelle vue

measureStart,LOAD_exemple pressEnter waitUntilText,Accepter les cookies pause,1000 measureStop

Action :

  • Préfixe du nom d'étape : ACTION_

  • L'utilisation typique est une action qui n'entraîne pas l'affichage d'une nouvelle vue.

  • Plusieurs actions peuvent être regroupées si cela a un sens fonctionnel

measureStart,ACTION_exemple clickByText,Accepter les cookies pause,500 clickById,onetrust-accept-btn-handler pause,1000 measureStop

Scroll :

measureStart,SCROLL_exemple swipeDownward pause,500 swipeDownard pause,1000 measureStop

Pause :

  • Préfixe du nom d'étape : PAUSE_

  • L'utilisation typique est l'observation du comportement de la page sans action de l'utilisateur afin de détecter une consommation inhabituelle de données ou d'énergie.

  • Unité : ms

measureStart,PAUSE_exemple pause,30000 measureStop

Format du langage

  • 1 instruction par ligne

  • commentaire avec # sur une ligne distincte

  • Les paramètres éventuels suivent des instructions séparées par des ,

Instructions

Plusieurs instructions sont disponibles pour vous aider à automatiser votre parcours utilisateur. Voici les préfixes des principales commandes :

  • application : liées au démarrage, à l'arrêt, à l'effacement, à l'installation ou à la désinstallation d'applications

  • assert : permettent de vérifier la présence d'un élément

  • browser : instructions spéciales permettant de gérer le navigateur pour les tests web

  • click : offrent plusieurs façons de cliquer sur des boutons par le texte, l'identifiant, la position, etc.

  • find : permettent d'entrer dans la hiérarchie des éléments de l'interface utilisateur pour naviguer facilement jusqu'à un élément spécifique

  • pause : pour interrompre le test pendant un certain temps

  • press : utiles pour activer des boutons spéciaux, comme les boutons du clavier ou les boutons physiques

  • scroll

  • swipe

  • wait utiles après un changement de page pour attendre que la page soit complètement chargée

Variables

Des variables peuvent être utilisées avec ${NOM_PARAMETRE}. Les variables sont utiles si une information est récurrente ou s'il s'agit d'un contenu sensible comme un identifiant, un mot de passe, etc.

Ils doivent être définis :

  • commande de lancement pour un test sur le Testbench

  • job.yml pour un test en local dans la section extras

  • Aucun caractère spécial n'est pris en charge dans le nom du paramètre

  • Pas d'espace dans le nom du paramètre

It is useful for pause duration for example. Here are 4 pause variable types we recommend to use:

Variable

Type d'étape associé

Fonction

Valeur usuelle (ms)

Variable

Type d'étape associé

Fonction

Valeur usuelle (ms)

${PAUSEDURATION}

Pause

  • Simuler le comportement de l'utilisateur

  • Observer ce qui se passe sans aucune action

30000 (30 sec)

${PAUSEAFTERLOAD}

Chargement, Action, Scroll

  • A la fin d'une étape active

1000 (1 sec)

${PAUSEAFTERACTION}

Action

  • S'il y a plus d'une action, pour ne pas perturber les autres actions

500 (0,5 sec)

${PAUSEAFTERSCROLL}

Scroll

  • S’il y a plus d’un scroll, pour ne pas perturber les autres scroll

500 (0,5 sec)

These indications are just propositions, it is possible to adapt them for tests (PAUSEDURATION at 1000 ms during tests and at 30000 ms during measures) or for you specified needs.


Modèles

Pour lancer l’application

  • Mesure de l'inactivité de référence sur l'écran d'accueil

  • Lancement de l'application

  • Attente de l'affichage du dernier élément (waitUntil)

measureStart,PAUSE_reference pause,${PAUSEDURATION} measureStop measureStart,CHRGT_accueil applicationStart,com.google.android.youtube waitUntilText,Home pause,${PAUSEAFTERLOAD} measureStop

Pour lancer un site web :

  • Lancement du navigateur (setBrowser)

  • Préparation du navigateur en vidant le cache et l'historique (browserPrepareAndOpenForReference)

  • Mesure de l'inactivité de référence d'un onglet vide

  • Ecriture de l'URL (browserGoToUrl)

  • Mesure du chargement du site web en validant l'URL (pressEnter)

  • Attente de l'affichage du dernier élément (waitUntil)

setBrowser,chrome applicationKill,com.android.chrome browserPrepareAndOpenForReference measureStart,PAUSE_referenceBrowser pause,${PAUSEDURATION} measureStop browserGoToUrl,https://metropole.nantes.fr measureStart,CHRGT_accueil pressEnter waitUntilText,Tout accepter pause,${PAUSEAFTERLOAD} measureStop

 

Si, lors de l'installation, l'application affiche des fenêtres qui n'apparaissent pas dans la liste suivante

  • Solution 1 : Il est obligatoire d'automatiser ce processus si vous voulez utiliser le testbench.

  • Solution 2 : passer en mode testrunner avec dispositif local pour éviter de réinstaller l'application à chaque itération.

 

Pour chaque nouvelle vue/page :

  • Réalise l'action permettant de changer de vue (clickBy)

  • Attente de l'affichage du dernier élément (waitUntil)

  • Vérifie que l'élément attendu n'existe pas déjà avant de changer de vue (assertNotExists)

  • Mise en place d'une étape de pause pour mesurer l'état d'inactivité

assertNotExistsText,Profitez de vos vidéos préférées measureStart,CHRGT_ongletBibliotheque clickByTextExact,Bibliothèque waitUntilTextExact,Profitez de vos vidéos préférées pause,${PAUSEAFTERLOAD} measureStop measureStart,PAUSE_ongletBibliotheque pause,${PAUSEDURATION} measureStop

Pour obtenir les caractéristiques d'un élément dans une vue, voir Obtenir les éléments d'une vue - Android/Web

Pour une action (cliquer, écrire un texte, ...) ou un défilement :

  • Effectue 3 actions au maximum dans une mesure

  • Elles doivent être séparées par une pause appropriée (PAUSEAFTERACTION et PAUSEAFTERSCROLL)

Action :

measureStart,ACTION_accueil_saisieRecherche clickByPercent,80,5 pause,${PAUSEAFTERACTION} enterText,greenspector pause,${PAUSEAFTERLOAD} measureStop

Scroll :

measureStart,SCROLL_videos swipeVertical,90,10,50 pause,${PAUSEAFTERSCROLL} swipeVertical,10,90,50 pause,${PAUSEAFTERLOAD} measureStop

Pour les étapes techniques finales (pertinent pour les app)

  • Retour sur la page d'accueil de l'appareil pour mesurer l'activité de l'application en arrière-plan lors d'une pause (pressHome)

  • Mesure de l'activité de l'application après la fermeture d'une pause par l'utilisateur (applicationCloseAll)

  • Mesure de l'activité de l'application après une fermeture forcée (fermeture du processus) lors d'une pause (applicationKill)

pressHome measureStart,PAUSE_appBackground pause,${PAUSEDURATION} measureStop applicationCloseAll measureStart,PAUSE_afterUserClose pause,${PAUSEDURATION} measureStop applicationKill,com.android.chrome measureStart,PAUSE_afterForcedClose pause,${PAUSEDURATION} measureStop