Macros de test client

Les macros sont des scripts SAINet qui comportent des appels à des fonctions spéciales permettant le contrôle de l’interface comme si un utilisateur cliquait sur les différents composants.

L’exécution de macros permet de tester les différentes parties de la solution dans des conditions d’utilisations proches de l’exécution par un utilisateur. Les différentes procédures et macros sont mises en place par le paramétreur et sont exécutées par les administrateurs de la solution sur les environnements de test et de validation.

Cette documentation explique le fonctionnement de base des macros et leur exécution. La documentation complète concernant la rédaction et les différentes fonctions script permettant le contrôle de l’interface sont présentées dans la documentation des scripts.



Procédures

Lorsque de nombreuses macros doivent être exécutées à la suite, dans le cas de tests anti-régressions par exemple, il est possible de les regrouper au sein d’un seul fichier de procédures.


Lecteur de macros

Pour ouvrir le lecteur de macros, il est nécessaire de passer par la console SAINet. Celle-ci s’ouvre en appuyant sur F12 lorsque le focus est sur le bureau SAINet.

Dans la console SAINet, taper la commande macroplayer qui appelle la fenêtre du lecteur.

Si la commande n’est pas reconnue dans la console, cela signifie que la propriété client.macro.enabled n’a pas été définie dans SYS22. Dans ce cas se référer à la documentation sur les propriétés système et redémarrer le logiciel SAINet.

Fenêtre du lecteur de macros

Deux types de fichiers peuvent être ouverts dans le lecteur de macros :

  1. Les fichiers de macro .script qui contiennent une liste de commandes.
  2. Les fichiers de séquence de macros .procedure qui contiennent une liste de chemins d’accès vers des fichiers .script à exécuter dans l’ordre.

Une fois le lecteur de macros ouvert, il est recommandé de fermer la console SAINet.

Les différents éléments de l’interface s’activent une fois un fichier ouvert.

Lecteur de macros avec une macro ouverte

  1. Bouton parcourir permettant de sélectionner un fichier.
  2. Nom de la macro actuellement ouverte.
  3. Bouton Jouer permettant de lancer l’exécution du fichier ouvert.
  4. Boutons Ralentir / Accélérer qui permet de réduire l’attente entre deux lignes de la macro.
  5. Barre de progression montrant l’avancement dans le fichier courant.
  6. Zone de texte permettant l’affichage du code de la macro.

Si un fichier de procédures a été ouvert, la première macro précisée dans ce fichier est ouverte et un compteur est affiché à côté du nom de la macro (2). Le reste de l’interface ne change pas.

En appuyant sur le bouton Jouer, la macro s’exécute ligne par ligne, appelant les différentes instructions du fichier. Il est possible de fermer la fenêtre présentant le contenu de la macro (6) si celle-ci n’est pas nécessaire afin de libérer de la place sur l’écran et pouvoir mieux suivre le déroulement de la macro.

Macro en cours d'exécution

Si de nombreux tests doivent s’exécuter (c’est à dire si une procédure ou une longue macro est ouverte), il est possible d’utiliser la fenêtre de logs qui consigne tous les tests effectués par la macro et leur résultat. Cette fenêtre est accessible dans le menu du lecteur de macros.

Ouverture des logs


Editeur de macros

L’éditeur de macros est destiné à des paramétreurs afin d’écrire de nouvelles macros. Certaines fonctionnalités permettent également de modifier facilement certains macros existantes afin par exemple de changer les valeurs attendues dans les différents champs ou de créer un nouvelle page dans un dossier de test.

La documentation complète de l’éditeur de macros est disponible ici.

Comme le lecteur de macros, l’éditeur de macros est accessible uniquement par la console SAINet.

Dans la console SAINet, taper la commande macroediteur qui appelle la fenêtre de l’éditeur. Si cette commande n’est pas reconnue, c’est que les fonctionnalités macros n’ont pas été activées.

Fenêtre de l'éditeur de macros

  1. Bouton permettant de naviguer et choisir une macro à éditer.
  2. Bouton d’exécution permettant d’ouvrir directement le lecteur de macros
  3. Bouton de génération automatique de code.

Une fois l’éditeur de macros ouvert, il est recommandé de fermer la console SAINet.

Il est possible d’éditer également les macros en utilisant un éditeur de texte directement. Les modifications apportées à un fichier ouvert sont automatiquement détectées dans le lecteur de macros.

Modifications

Les macros attendent des valeurs précises dans les entrées, dossiers et pages de test. Lors de modifications de comportement métiers, il est possible que ces valeurs ne soient plus correctes lors de l’exécution des macros de test. Il faut dans ce cas mettre à jour les macros afin qu’elles référencent les nouvelles valeurs.

Chaque vérification de valeur dans les écrans est faite par la fonction assert. Cette fonction vérifie que l’opération donnée en premier argument, s’applique bien entre les valeurs passées dans les 2 arguments suivants. Le dernier argument spécifie si une erreur fatale doit être levée si l’opération ne s’applique pas.

Ainsi assert("STRING_EQ", ADR02.FICHEADMIN.ADR_ADRPNOM2, "Test 1", "true"); vérifie que le champ ADR_ADRPNOM2 dans la page Fiche Admission ouverte actuellement contient bien la valeur Test 1. Si ce n’est pas le cas, la macro s’arrête et remonte une erreur. Si des modifications demandent une mise à jour de cette valeur, il suffit de modifier la valeur passée en troisième argument pour la nouvelle valeur correcte et sauver le fichier de macro.

Si de nouvelles vérifications doivent être ajoutées afin de s’assurer que la valeurs de certains champs soient bien correcte, par exemple suite à une correction de bogue, il est possible d’ajouter une nouvelle ligne d’assert avec les valeurs souhaitées et sauver le fichier de macros. L’identifiant d’un champ est accessible par un clic-droit sur le champ, Field infos.

Génération de macros

L’éditeur de macros permet également de générer des parties de macros. Celles-ci ne sont pas complètes et doivent être modifiées manuellement afin de permettre un déroulement complet, mais permettent néanmoins de faciliter une grande partie de la rédaction d’une nouvelle macro.

Le bouton de génération automatique de code (3) dans l’éditeur permet d’ouvrir cet outil.

Fenêtre de la génération automatique

  1. Champ de saisie XML. Le descripteur XML d’un écran doit être collé ici afin de servir d’entrée au générateur.
  2. Paramètres de génération.
  3. Macro générée sur cet écran.

L’utilisation du générateur est le suivant :

  1. Ouvrir la tâche désirée
  2. Sélectionner l’entrée voulue ainsi que la page si nécessaire.
  3. Une fois les données chargées, faire un clic-droit sur l’écran, en dehors des champs et sélectionner Copier le contenu de l’écran (xml).
  4. Coller le xml dans le champ de saisie du générateur
  5. Sélectionner les paramètres de génération désirés. Il est possible d’ouvrir la tâche, créer automatiquement la page sélectionnée, vérifier le contenu des champs, remplir les champs, valider l’entrée, …

Une fois la macro générée, il faut manuellement l’intégrer dans une macro existante, afin par exemple que le dossier de test soit bien ouvert, que la bonne société soit sélectionnée, …

Par exemple, il serait possible d’ajouter une nouvelle vérification dans une macro existante en insérant le code avec quelques modifications manuelles.

Cet exemple se base sur le code généré à partir d’une page Fiche Admission et une génération qui contenait l’ouverture de la tâche, la création d’un record, la création d’une page et des asserts.

callTask("ADR02");
macroBreak();
executeAction("Click","ButtonsPanel.NewRecordBtn");
createNewPage("FICHEADMIN");
//Processing retreived 130 fields elements
//Fields with datafield ADRDOS.FICHEADMIN.FM_PAGE_CREATION_DATE was skipped because it has no value
//Fields with datafield ADRDOS.FICHEADMIN.DUMMY was skipped because it has no value
assert("STRING_EQ",ADR02.FICHEADMIN.ADR_ADRPNOM1,"Dossier 5", "true");
assert("STRING_EQ",ADR02.FICHEADMIN.ADR_ADRPNOM2,"Test 5", "true");
assert("STRING_EQ",ADR02.FICHEADMIN.ADR_DATNAIS,"1999-09-15 00:00:00", "true");
assert("STRING_EQ",ADR02.FICHEADMIN.ADR_SEXE,"F", "true");

Ce code sera intégré dans une macro vide qui pour le moment ne fait qu’ouvrir un dossier et le refermer :

Macro:
{
    DossierID = "DT-00001";
    DomainID = "ORT";
    if (CURRENT_DOMAIN != DomainID)
    {
        executeAction("Click", "Changementdelasocitutilise1");
        executeAction("Fill", "SocCombo", DomainID);
        executeAction("Click", "ValidateBtn");
        macroWaitOnActiveTasks();
    }

    consoleBeginCheckLine("Test 01 - Ouverture ADRX2...");
    {
        callTask("ADRX2");
        macroWaitOnActiveTasks();
    }
    consoleEndCheckLine();

    consoleBeginCheckLine("Test 01 - Ouverture du dossier de test 00001");
    KeyXML = "<Key><DataField DataFieldID=\"ADRDOS.ID_PK\">" :: DossierID :: "</DataField></Key>";
    KeyFound = selectRecord(KeyXML);

    if (KeyFound == false)
    {
        consoleError("Le dossier de test n'est pas présent. Arrêt du test.");
        return;
    }
    consoleEndCheckLine();


    // A la fin du test, ferme le dossier et la tâche ouverte.
    executeAction("Click", "ButtonsPanel.CloseRecordBtn");
    executeAction("Click", "ButtonsPanel.CloseTaskBtn");

    return;
}

Comme il est intégré dans une macro déjà existante, les éléments d’ouverture et de création d’entrée peuvent être supprimés:

createNewPage("FICHEADMIN");
//Processing retreived 130 fields elements
//Fields with datafield ADRDOS.FICHEADMIN.FM_PAGE_CREATION_DATE was skipped because it has no value
//Fields with datafield ADRDOS.FICHEADMIN.DUMMY was skipped because it has no value
assert("STRING_EQ",ADR02.FICHEADMIN.ADR_ADRPNOM1,"Dossier 5", "true");
assert("STRING_EQ",ADR02.FICHEADMIN.ADR_ADRPNOM2,"Test 5", "true");
assert("STRING_EQ",ADR02.FICHEADMIN.ADR_DATNAIS,"1999-09-15 00:00:00", "true");
assert("STRING_EQ",ADR02.FICHEADMIN.ADR_SEXE,"F", "true");

Ensuite, les lignes en commentaire peuvent également être supprimées pour ne garder que la création d’une nouvelle page et les asserts :

createNewPage("FICHEADMIN");
assert("STRING_EQ",ADR02.FICHEADMIN.ADR_ADRPNOM1,"Dossier 5", "true");
assert("STRING_EQ",ADR02.FICHEADMIN.ADR_ADRPNOM2,"Test 5", "true");
assert("STRING_EQ",ADR02.FICHEADMIN.ADR_DATNAIS,"1999-09-15 00:00:00", "true");
assert("STRING_EQ",ADR02.FICHEADMIN.ADR_SEXE,"F", "true");

Maintenant que le code généré a été nettoyé des éléments non utiles, les but est d’ajouter quelques éléments qui pourront être l’intégrés dans la macro : Un début de section, un clic sur le bouton “Valider” de la page et une fin de section :

    consoleBeginCheckLine("Test 01 - Création d'une page Fiche Admission ...");
    {
        createNewPage("FICHEADMIN");

        assert("STRING_EQ",ADR02.FICHEADMIN.ADR_ADRPNOM1,"Dossier 5", "true");
        assert("STRING_EQ",ADR02.FICHEADMIN.ADR_ADRPNOM2,"Test 5", "true");
        assert("STRING_EQ",ADR02.FICHEADMIN.ADR_DATNAIS,"1999-09-15 00:00:00", "true");
        assert("STRING_EQ",ADR02.FICHEADMIN.ADR_SEXE,"F", "true");

        executeAction("Click", "ButtonsPanel.ValidateBtn");
    }
    consoleEndCheckLine();

Le nouveau bloc de vérification de la macro peut désormais être intégré :

Macro:
{
    DossierID = "DT-00001";
    DomainID = "ORT";
    if (CURRENT_DOMAIN != DomainID)
    {
        executeAction("Click", "Changementdelasocitutilise1");
        executeAction("Fill", "SocCombo", DomainID);
        executeAction("Click", "ValidateBtn");
        macroWaitOnActiveTasks();
    }

    consoleBeginCheckLine("Test 01 - Ouverture ADRX2...");
    {
        callTask("ADRX2");
        macroWaitOnActiveTasks();
    }
    consoleEndCheckLine();

    consoleBeginCheckLine("Test 01 - Ouverture du dossier de test 00001");
    KeyXML = "<Key><DataField DataFieldID=\"ADRDOS.ID_PK\">" :: DossierID :: "</DataField></Key>";
    KeyFound = selectRecord(KeyXML);

    if (KeyFound == false)
    {
        consoleError("Le dossier de test n'est pas présent. Arrêt du test.");
        return;
    }
    consoleEndCheckLine();

    consoleBeginCheckLine("Test 01 - Création d'une page Fiche Admission ...");
    {
        createNewPage("FICHEADMIN");

        assert("STRING_EQ",ADR02.FICHEADMIN.ADR_ADRPNOM1,"Dossier 5", "true");
        assert("STRING_EQ",ADR02.FICHEADMIN.ADR_ADRPNOM2,"Test 5", "true");
        assert("STRING_EQ",ADR02.FICHEADMIN.ADR_DATNAIS,"1999-09-15 00:00:00", "true");
        assert("STRING_EQ",ADR02.FICHEADMIN.ADR_SEXE,"F", "true");

        executeAction("Click", "ButtonsPanel.ValidateBtn");
    }
    consoleEndCheckLine();

    // A la fin du test, ferme le dossier et la tâche ouverte.
    executeAction("Click", "ButtonsPanel.CloseRecordBtn");
    executeAction("Click", "ButtonsPanel.CloseTaskBtn");

    return;
}

Pour une documentation plus poussée sur les fonctionnalités des scripts et des macros, se référer à la documentation scripts et macros.