# TESTS OPENACCESS ## Notes sur l'utilisation des tests #### Si le projet de test project0.accdb est modifié Il faut penser: * à mettre à jour les sources dans .\reference\source * à supprimer de ces sources \macros\test_import.bas, \macros\test_export.bas, \modules\test_methods.bas #### Utiliser avec Jenkins * Lancer Jenkins * Créer un projet 'freestyle' * Configurer le projet (nom, description, repo git...) * Ajouter une étape au build: lancer une commande batch * Y copier le contenu du fichier `run_tests.bat` POUR LE PREMIER LANCEMENT ou EN CAS DE PROBLEME lors de l'éxecution des macros access (timeout, stuck): * accéder à la liste des services Windows de la machine depuis laquelle Jenkins est lancé * Accéder aux propriétés du service Jenkins, onglet Logon * Cocher: "interagir avec le bureau" Au premier lancement, il faudra modifier les paramètres de sécurité de Office sur la session System de cette machine (Access, Options, Confidentialité, toujours autoriser les macros, activex, écxecution des données) ATTENTION: vérifier que les paramètres windows "région et langue" sont les même coté Jenkins, sinon il y aura des problèmes dans les comparaisons des fichiers: '1,0' != '1.0' ## Fonctionnement des tests ### Répertoires Le fichier Access `.\initial\projet0.zip` contient l'application de test. Les tests ont lieu dans le répertoire `.\work` Les résultats sont contrôlés au moyen du contenu du répertoire `.\reference` ### Le projet de départ L'application `project0.accdb` sert de support de test. Le fichier `db.accdb` contient les éventuelles tables liées. **ATTENTION: la chaine de connexion des tables liées à db.accdb doit pointer vers .\work\db.accdb et non pas .\initial\db.accdb** ### Déroulement #### Préparation des fichiers * Le dossier `.\work` est vidé > `del /f /s /q .\work` * Le dossier `.\results` est vidé > `del /f /s /q .\results` * `.\initial\projet0.zip` est extrait vers `.\work\projet0.accdb` > `unzip .\initial\project0.zip -d .\work` * `.\initial\db.zip` est extrait vers `.\work\db.accdb` > `unzip .\initial\db.zip -d .\work` * `.\initial\empty_project.zip` est extrait vers `.\work\empty_project.accdb` > `unzip .\initial\empty_project.zip -d .\work` #### Création des sources * La fonction `silent_export` de OpenAccess est executée depuis le fichier `.\work\project0.accdb` (via la macro `test_export` de `project0.accdb`) > `"C:\Program Files\Microsoft Office\Office14\MSACCESS.EXE" "C:\APPLIS_PARC\OpenAccess\tests\work\project0.accdb" /X test_export` Le répertoire `.\work\source` est créé * L'existence du fichier `.\work\project0.zip` créé par l'export est contrôlée > `python assert_exists.py .\work\project0.zip` * Les fichiers `.\work\source\modules\test_methods.bas`, `.\work\source\macros\test_export.bas` et `.\work\source\macros\test_import.bas` sont supprimés (ils ne font pas partie du périmètre des tests et leur présence provoquera des erreurs à l'import) > `del .\work\source\modules\test_methods.bas` > `del .\work\source\macros\test_export.bas` > `del .\work\source\macros\test_import.bas` **ATTENTION à s'assurer que ces fichiers ont aussi été supprimés de .\reference\source!** * Le dossier `.\work\source` est copié vers `.\results\source_1` > `robocopy /e .\works\source .\results\source1` #### Contrôle des résultats * La fonction compare.py est utilisée pour comparer le contenu des sous-répertoires et des fichiers sources ainsi créés à ceux contenus dans le répertoire `.\reference\source` > `python compare.py .\work\source .\reference\source` #### Import des sources dans une base vide * La fonction `silent_import` de OpenAccess est executée depuis le fichier `.\work\empty_project.accdb` (via la macro `test_import` de `empty_project.accdb`) > `"C:\Program Files\Microsoft Office\Office14\MSACCESS.EXE" "C:\APPLIS_PARC\OpenAccess\tests\work\empty_project.accdb" /X test_import` * `.\work\empty_project.accdb` est copié vers `.\results\result1.accdb` > `copy .\work\empty_project.accdb .\results\result1.accdb` * L'existence du fichier `.\work\empty_project.accdb.old` créé par l'export est contrôlée > `python assert_exists.py .\work\empty_project.accdb.old` #### Import des sources dans un projet existant * La fonction `silent_import` de OpenAccess est executée depuis le fichier `.\work\project0.accdb` (via la macro `test_import` de `project0.accdb`) > `.\work\project0.accdb /X test_import` * `.\work\project0.accdb` est copié vers `.\results\result2.accdb` > `copy .\work\project0.accdb .\results\result2.accdb` * L'existence du fichier `.\work\project0.accdb.old` créé par l'export est contrôlée > `python assert_exists.py .\work\project0.accdb.old` #### Contrôle des résultats * Exporter les sources de .\results\result1.accdb > `.\results\result1.accdb /X test_export` * Renommer .\results\source en .\results\source2 > `move .\results\source .\results\source2` * Controle des résultats > `python compare.py .\results\source2 .\reference\source` * Exporter les sources de .\results\result2.accdb > `.\results\result2.accdb /X test_export` * Renommer .\results\source en .\results\source3 > `move .\results\source .\results\source3` * Controle des résultats > `python compare.py .\results\source3 .\reference\source` ## Interpréter les résultats La build sera réussie si: * Elle se déroule jusqu'au bout sans erreur * La fonction `compare.py` retourne un code exit 0 à chaque fois qu'elle est appellée De plus, on peut vérifier les résultats dans le répertoire .\results: * initial.accdb contient le projet de départ * source1 contient le résultat de l'export des sources de project0.accdb * result1.accdb contient le résultat d'u import de ces sources dans une base vide * result2.accdb contient le résultat de l'improt des sources dans project0.accdb ## Commande batch Voir [http://codebox/dev/OpenAccess/blob/master/tests/run_tests.bat](run_tests.bat)