Créer ses tests

Dans cette partie, nous allons voir comment mettre en place un système de tests automatisés permettant de vérifier le bon fonctionnement de notre application. Le lancement de ces tests servira à :

  • Initialiser la base de données
  • Ajouter des emetteurs, services et courriers lors de l’initialisation
  • Saisir automatiquement dans le navigateur, à l’aide de sélénium, un emetteur, un service et un courrier
  • Vérifier qu’il n’est pas possible de supprimer un service et un emetteur liés à un courrier

Installation et paramètrage

Prérequis

Commencer par vérifier que le répertoire tests existe. L’arborescence de ce répertoire est décrite ci-après: Arborescence du répertoire tests.

Pour l’installation, dans Tests et Integration Continue, suivre la partie Installation.

Aller ensuite dans tests/binary_files/dyn/database.inc.php et vérifier que le paramétrage d’accés à la base de données est correct, si ce n’est pas le cas le corriger.

Initialisation de l’environnement de test

Commencer par initialiser l’environnement de test et s’assurer qu’il est actif. (om-tests) doit être present devant la ligne de commande dans le terminal.

Lancer la commande suivante depuis le repertoire tests :

om-tests -c initenv

Ajout de données pour les tests

On va maintenant insérer des données dans les tables. Dans le fichier tests/data/pgsql/install_tests.sql insérer, avant le commit, les lignes suivantes :

-- insertion de deux émetteurs avec récupération et incrémentation de la table de séquences

INSERT INTO emetteur (emetteur, nom, prenom) VALUES
(nextval('emetteur_seq'), 'dupont', 'pierre'),
(nextval('emetteur_seq'), 'durant', 'jacques');

-- insertion de deux services avec récupération et incrémentation de la table de séquences

INSERT INTO service (service, libelle) VALUES
(nextval('service_seq'), 'informatique'),
(nextval('service_seq'), 'telephonie');

-- insertion de deux courriers avec récupération et incrémentation de la table de séquences

INSERT INTO courrier (courrier, dateenvoi, objetcourrier, emetteur, service) VALUES
(nextval('courrier_seq'), '2010-12-01', 'Proposition de fourniture de service', 1, 1),
(nextval('courrier_seq'), '2010-12-02', 'Envoi de devis pour formation openMairie', 2, 1);

Relancer la commande initenv et verifier que les tables sont créées et remplies.

Ecriture d’un test

On va ecrire un test permettant de simuler la creation d’un service, d’un emetteur et d’un courrier par l’utilisateur.

Dans le repertoire tests créer un nouveau fichier qu’on appelera 012_mytest.robot et ajouter les lignes suivantes :

*** Settings ***
Resource  resources/resources.robot
Suite Setup  For Suite Setup
Suite Teardown  For Suite Teardown
Documentation  TestSuite "Mytest"...

*** Test Cases ***

On s’occupe ensuite de faire un test simulant l’ajout d’un service par l’utilisateur. Le code du test est le suivant (à ajouter après le Test Cases) :

Ajouter un service

    [Documentation]  On teste l'ajout d'un service
    ...  Le service ajouté :
    ...  'comptabilité'

    #connection à l'application
    Depuis la page d'accueil  admin  admin
    #On accéde à l'écran des services
    Go To Submenu In Menu  parametrage  service
    #On véerifie le titre de la page
    Page Title Should Be  Application > Service
    #On vérifie que le menu est ouvert sur l'element correct
    Submenu In Menu Should Be Selected  parametrage  service
    #On clique sur le bouton ajouter
    Click On Add Button
    #On ajoute l'element comptabilite
    Input Text  css=#libelle    comptabilité
    #On valide le formulaire
    Click On Submit Button
    #On vérifie que la page ne contiens pas d'erreur
    La page ne doit pas contenir d'erreur

Lancer ce test avec la commande :

om-tests -c runone -t 012_mytest.robot

Vous devriez voir une fenetre firefox s’ouvrir sur l’application et réaliser une à une les étapes du test.

Note

Le test simule, à l’aide de selenium, les actions réalisées par un utilisateur sur le navigateur. Par conséquent, si vous touchez au navigateur pendant que les tests s’effectuent cela aura un impact sur leur déroulement. Il ne faut donc pas toucher à la fenêtre pendant qu’un test est lancé.

Pour éviter d’être dérangé par le navigateur pendant que les tests sont lancés, on peut également lancer les commandes suivantes :

pour un seul tests

xvfb-run -a --server-args=-screen\ O\ 1680*1030*24 om-test -c runone -t 012_mytest.robot

pour lancer tous les tests

xvfb-run -a --server-args=-screen\ O\ 1680*1030*24 om-test -c runall

Une fois que le test est terminé, le résultats est accessible dans tests/results/log.html et tests/results/report.html

Ajouter ensuite un test permettant de simuler l’ajout d’un emetteur :

Ajouter un emetteur

    [Documentation]  On teste l'ajout d'un emetteur
    ...  Emetteur ajouté :
    ...  nom : test, prenom : jean

    #connection à l'application
    Depuis la page d'accueil  admin  admin
    #On accéde à l'écran des services
    Go To Submenu In Menu  parametrage  emetteur
    #On véerifie le titre de la page
    Page Title Should Be  Application > Emetteur
    #On vérifie que le menu est ouvert sur l'element correct
    Submenu In Menu Should Be Selected  parametrage  emetteur
    #On clique sur le bouton ajouter
    Click On Add Button
    #On entre le nom et le prenom de l'emetteur
    Input Text  css=#nom        test
    Input Text  css=#prenom     jean
    #On valide le formulaire
    Click On Submit Button
    #On vérifie que la page ne contiens pas d'erreur
    La page ne doit pas contenir d'erreur

Idem pour un courrier :

Ajouter un courrier

        [Documentation]  On teste l'ajout d'un courrier
        ...  courrier ajouté :
        ...  date : 09/06/2020, objet : mangez des kiwis
        ...  emetteur : test, service : comptabilité

        #connection à l'application
        Depuis la page d'accueil  admin  admin
        #On accéde à l'écran des services
        Go To Submenu In Menu  application  courrier
        #On véerifie le titre de la page
        Page Title Should Be  Application > Courrier
        #On clique sur le bouton ajouter
        Click On Add Button
        #On remplit les champs du courrier
        Input Datepicker  dateenvoi  09/06/2020
        Input Text      css=#objetcourrier      mangez des kiwis
        Select From List By Label       css=#emetteur   TEST
        Select From List By Label       css=#service    comptabilité
        #On valide le formulaire
        Click On Submit Button
        #On vérifie que la page ne contiens pas d'erreur
        La page ne doit pas contenir d'erreur

Tester la suppression d’un élément

On cherche maintenant à vérifier que l’utilisateur ne peut pas supprimer un emetteur et/ou un service lié à un élément de la table courrier. Pour cela, on va se servir des mots clés générés automatiquement à partir du système de données.

tests/resources/resources.robot, ajouter dans la partie Settings :

Resource  app${/}gen${/}service.robot

Ajouter ensuite le test suivant :

Suppression d'un service

        [Documentation]  On teste la suppression d'un service
        ...  service supprimé :
        ...  comptabilité

        #connection à l'application
        Depuis la page d'accueil  admin  admin
        #On accéde à l'écran des services
        Go To Submenu In Menu  parametrage  service
        #On véerifie le titre de la page
        Page Title Should Be  Application > Service
        #On vérifie que le menu est ouvert sur l'element correct
        Submenu In Menu Should Be Selected  parametrage  service
        #On supprime le service comptabilite
        Supprimer service       3

Note

Le mot clé « Supprimer service » est généré automatiquement à partir du modèle de données, dans le fichier resources/app/gen/service.robot

De la même manière, vous pouvez écrire le test de suppression d’un emetteur et d’un courrier.