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.