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

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 la base de données

Dans un premier temps, on va initialiser l’environnement de test. Pour cela, il faut que l’environnement de test soit activé((om-tests) present devant la ligne dans le terminal) et lancer la commande suivante depuis le repertoire tests :

om-tests -c initenv

Après initialisation, on peut constater que les tables service, emetteur et courrier n’existe plus dans la base de données. En effet, jusqu’à present ces tables ont été ajoutées à l’aide de postgres depuis le terminal, elles ne sont donc pas initilaiser dans le code. Pour remedier à cela, il faut ajouter, dans data/pgsql/install.sql, avant le commit, le code suivant :

-- Création des séquences

CREATE SEQUENCE emetteur_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

CREATE SEQUENCE service_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

CREATE SEQUENCE courrier_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

-- Création des tables

CREATE TABLE emetteur (
    emetteur          int PRIMARY KEY,  -- clé primaire
    nom               varchar(20),
    prenom            varchar(20)
);

CREATE TABLE service (
    service           int PRIMARY KEY,  -- clé primaire
    libelle           varchar(20)
);

CREATE TABLE courrier (
    courrier          int PRIMARY KEY,           -- clé primaire
    dateenvoi         date,
    objetcourrier     text,
    registre          varchar(20),
    emetteur          int REFERENCES emetteur,   -- clé étrangère
    service           int REFERENCES service     -- clé étrangère
);

On va ensuite, remplir de manière automatique ces tables lors de l’initialisation. Dans le fichier tests/data/pgsql/install_tests.sql inserer, 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.

Simuler l’ajout d’un nouvel objet par l’utilisateur

On cherche maintenant à 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. En premier lieu, inserer à la suite du Test Cases le code suivant :

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

On peut ensuite lancer ce test avec la commande :

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

Les résultats de ces tests sont visibles dans tests/results/log.html et tests/results/report.html

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

Remarque : 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

Ajouter, ensuite 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

Puis 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  parametrage  courrier
    #On véerifie le titre de la page
    Page Title Should Be  Application > Courrier
    #On vérifie que le menu est ouvert sur l'element correct
    Submenu In Menu Should Be Selected  parametrage  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.

Ajouter dans la partie Settings :

#à la suite de Resource
Resource  resources/app/gen/service.robot

Ajouter ensuite le test suivant :

Suppression d'un service lié à la table courrier

    [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
    #On verifie le message d'erreur
    Error Message Should Contain  SUPPRESSION NON EFFECTUÉE

Remarque : 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.