# Tests QA et de régression dans Mojaloop
Vue dâensemble du cadre de tests mis en place dans Mojaloop
Sommaire :
- Exigences de régression
- Tests développeur
- Tests Postman et Newman
- Exécuter les tests de régression
- Flux dâun test planifiĂ© typique
- Commandes Newman
# Sujets de régression
Pour quâun systĂšme dĂ©ployĂ© soit robuste, lâun des derniers points de contrĂŽle consiste Ă vĂ©rifier que lâenvironnement de dĂ©ploiement est sain et que toutes les fonctionnalitĂ©s exposĂ©es fonctionnent exactement conformĂ©ment aux spĂ©cifications.
Auparavant, on doit mettre en place un certain nombre de disciplines pour garantir un contrĂŽle maximal.
Pour illustrer comment le projet Mojaloop atteint cet objectif, nous présentons les différents points de contrÎle mis en place.
# Tests développeur
Pour chaque composant et module, dans la base de code, vous trouverez un dossier nommé « test » qui contient trois types de tests.
- Dâabord, le test de couverture qui signale le code inaccessible ou redondant
- Les tests unitaires, qui vérifient que la fonctionnalité prévue se comporte comme attendu
- Les tests dâintĂ©gration, qui ne testent pas le bout en bout mais les interactions avec les composants adjacents
- Des vérifications automatiques des normes de code implémentées via des paquets intégrés à la base de code
Ces tests sont exĂ©cutĂ©s via des instructions en ligne de commande par le dĂ©veloppeur pendant le dĂ©veloppement. Ils sont Ă©galement lancĂ©s automatiquement Ă chaque commit et lors de lâouverture dâune pull request GitHub pour intĂ©grer le code au projet.
La procĂ©dure dĂ©crite ci-dessus sort du pĂ©rimĂštre de lâassurance qualitĂ© (QA) et des tests de rĂ©gression, objet du prĂ©sent document.
Une fois quâun dĂ©veloppeur a Ă©crit une nouvelle fonctionnalitĂ© ou Ă©tendu une fonctionnalitĂ© existante, les tests rigoureux ci-dessus permettent de supposer que le comportement concernĂ© est correct. Comment alors sâassurer que ce nouveau code ne dĂ©grade pas le projet ou le produit dans son ensemble ?
Lorsque le code a passĂ© toutes ces Ă©tapes et est dĂ©ployĂ© dans le cadre des processus CI/CD de notre flux de travail, les nouveaux composants sont acceptĂ©s sur les diffĂ©rents hĂ©bergeurs, dĂ©ploiements cloud ou sur site. Ces hĂ©bergeurs vont des plateformes de dĂ©veloppement jusquâaux environnements de production.
# Postman et Newman
En parallĂšle du dĂ©ploiement, lâentretien et la maintenance du cadre de tests se poursuivent Postman (opens new window). Lors dâune nouvelle release, les notes de version publiĂ©es dans le flux de travail listent les fonctionnalitĂ©s nouvelles ou amĂ©liorĂ©es. LâĂ©quipe QA sâen sert pour Ă©tendre et enrichir les collections Postman existantes, oĂč des tests sont Ă©crits dans les scripts requĂȘte/rĂ©ponse pour couvrir les scĂ©narios positifs et nĂ©gatifs par rapport au comportement attendu. Ces tests sont ensuite exĂ©cutĂ©s ainsi :
- Manuellement, pour vĂ©rifier que les tests couvrent tous les aspects et angles de la fonctionnalitĂ©, les tests positifs pour valider par assertion le comportement attendu, et les tests nĂ©gatifs pour vĂ©rifier que les flux alternatifs corrects sâappliquent en cas de problĂšme imprĂ©vu
- De façon planifiĂ©e â dans le cadre de la rĂ©gression â pour reproduire la mĂȘme intention que le manuel mais entiĂšrement automatisĂ©e (avec le paquet Newman), avec rapports et journaux pour signaler tout comportement non voulu et avertir lorsque le comportement connu a changĂ© par rapport Ă une exĂ©cution prĂ©cĂ©dente.
Pour faciliter les tests automatisĂ©s et planifiĂ©s dâune collection Postman, plusieurs mĂ©thodes existent ; celle implĂ©mentĂ©e pour Mojaloop est expliquĂ©e plus bas dans ce document.
Un dĂ©pĂŽt complet contient tous les scripts, procĂ©dures dâinstallation et Ă©lĂ©ments nĂ©cessaires pour mettre en place un cadre automatisĂ© de tests QA et de rĂ©gression (opens new window). Ce cadre permet de cibler nâimporte quelle collection Postman, de prĂ©ciser lâenvironnement dâexĂ©cution et une liste dâadresses e-mail sĂ©parĂ©es par des virgules pour recevoir le rapport gĂ©nĂ©rĂ©. Ce cadre est utilisĂ© quotidiennement par Mojaloop sur une instance EC2 AWS hĂ©bergeant Node, Docker, un serveur de messagerie et Newman, ainsi que des scripts Bash et des modĂšles pour exĂ©cuter automatiquement les collections prĂ©vues chaque jour. Ce guide permet Ă tout le monde de dĂ©ployer son propre cadre.
# Collections Postman
Plusieurs collections Postman sont utilisées selon les processus :
Pour le simulateur Mojaloop :
- MojaloopHub_Setup (opens new window) : à exécuter une fois aprÚs un nouveau déploiement, en général par le responsable de release. Elle configure un hub Mojaloop vide, notamment la devise du hub et les comptes de rÚglement.
- MojaloopSims_Onboarding (opens new window) : configure les simulateurs DFSP ainsi que les URLs des points de terminaison pour que le hub Mojaloop sache oĂč envoyer les callbacks de requĂȘte.
- Golden_Path_Mojaloop (opens new window) : pack de rĂ©gression bout en bout qui exerce lâensemble des fonctionnalitĂ©s dĂ©ployĂ©es. Peut ĂȘtre lancĂ© manuellement mais est vĂ©ritablement conçu pour une exĂ©cution automatisĂ©e du dĂ©but Ă la fin, les valeurs de rĂ©ponse Ă©tant transmises de chaque requĂȘte Ă la suivante. (LâĂ©quipe cĆur sâen sert pour valider releases et dĂ©ploiements)
- Remarques : dans certains cas, un délai de
250 msĂ500 msest nĂ©cessaire si lâexĂ©cution passe par le Test Runner de lâinterface Postman, pour laisser le temps aux tests de valider les requĂȘtes contre le simulateur. Ce nâest pas toujours nĂ©cessaire.
- Remarques : dans certains cas, un délai de
- Bulk_API_Transfers_MojaSims (opens new window) : peut servir Ă tester les transferts de masse ciblant le simulateur Mojaloop.
Pour lâancien simulateur (il est recommandĂ© dâutiliser le simulateur Mojaloop ; le support sâarrĂȘte Ă partir de PI-12 (oct. 2020)) :
- ML_OSS_Setup_LegacySim (opens new window) : Ă exĂ©cuter une fois aprĂšs un nouveau dĂ©ploiement (si lâancien simulateur est utilisĂ©), en gĂ©nĂ©ral par le responsable de release. Configure le hub Mojaloop (devise, comptes de rĂšglement) avec lâancien simulateur (FSP).
- ML_OSS_Golden_Path_LegacySim (opens new window) : pack de rĂ©gression bout en bout pour lâensemble des fonctionnalitĂ©s dĂ©ployĂ©es. Peut ĂȘtre lancĂ© manuellement mais est conçu pour une exĂ©cution automatisĂ©e du dĂ©but Ă la fin avec chaĂźnage des rĂ©ponses. (LâĂ©quipe cĆur sâen sert pour valider releases et dĂ©ploiements)
- Remarques : dans certains cas, un délai de
250 msĂ500 mspeut ĂȘtre nĂ©cessaire via le Test Runner Postman. Ce nâest pas toujours nĂ©cessaire.
- Remarques : dans certains cas, un délai de
- Bulk API Transfers.postman_collection (opens new window) : peut servir Ă tester les transferts de masse ciblant lâancien simulateur.
# Configuration dâenvironnement
Vous devrez adapter le fichier de configuration dâenvironnement suivant Ă votre dĂ©ploiement :
Conseils :
- Les paramĂštres dâhĂŽte sont les plus souvent Ă modifier pour correspondre Ă votre environnement, p. ex.
HOST_CENTRAL_LEDGER: http://central-ledger.local - Reportez-vous aux hĂŽtes dâingress configurĂ©s dans votre
values.yamldans le déploiement Helm.
# Exécuter les tests de régression
Pour le cadre QA et de rĂ©gression Mojaloop spĂ©cifiquement, les tests Postman peuvent ĂȘtre exĂ©cutĂ©s en se connectant en SSH Ă lâinstance EC2 (fichier PEM requis), puis en lançant un ou plusieurs scripts.
En suivant les exigences et instructions détaillées dans le dépÎt QA and Regression Testing Framework (opens new window), chacun peut créer son propre cadre et accéder à son instance pour exécuter des tests contre toute collection Postman et tout environnement sous son contrÎle.
# Ătapes pour exĂ©cuter via lâinterface Postman
- Importer la collection souhaitée dans Postman. Vous pouvez la télécharger depuis le dépÎt ou utiliser le lien
RAWet lâimport par lien dâimport. - Importer la configuration dâenvironnement dans Postman via la configuration dâenvironnement. TĂ©lĂ©chargez le fichier sur votre machine et adaptez-le Ă votre environnement.
- PrĂ©chargez toutes les donnĂ©es de test nĂ©cessaires avant dâexĂ©cuter les transactions (parties, devis, transferts), comme dans la collection dâexemple OSS-New-Deployment-FSP-Setup (opens new window) :
- Comptes du hub
- Intégration FSP
- Données de test sur le simulateur (le cas échéant)
- Intégration des oracles
- Les cas de test
p2p_money_transferde la collection Golden_Path (opens new window) sont un bon point de départ.
# Ătapes pour exĂ©cuter le script bash qui lance Newman / Postman en CLI
Pour cette mĂ©thode, vous devez ĂȘtre en possession du fichier PEM du serveur sur lequel le cadre a Ă©tĂ© dĂ©ployĂ© sur une instance EC2 sur Amazon Cloud.
Connectez-vous en SSH Ă lâinstance EC2 ; lâexĂ©cution du script lancera les commandes dans un conteneur Docker instanciĂ©.
Les URL de la collection Postman et du fichier dâenvironnement sont des paramĂštres dâentrĂ©e (ainsi quâune liste dâe-mails pour le rapport), ce qui permet dâexĂ©cuter librement la collection de votre choix.
Avec un fichier dâenvironnement, les services Mojaloop ciblĂ©s peuvent ĂȘtre sur nâimporte quel serveur. Vous pouvez donc exĂ©cuter tout test Postman contre toute installation Mojaloop sur le serveur de votre choix.
Lâinstance EC2 utilisĂ©e pour ces tests ne fait quâhĂ©berger les outils et processus dâexĂ©cution ; elle nâhĂ©berge pas les services Mojaloop eux-mĂȘmes.
./testMojaloop.sh <URL-collection-postman> <URL-environnement> <liste-e-mails-séparés-par-des-virgules>
# Flux dâun test planifiĂ© typique
# Commandes Newman
La section suivante est une rĂ©fĂ©rence, issue du site du paquet Newman, prĂ©sentant les commandes utilisables pour accĂ©der Ă lâenvironnement Postman via la CLI.
Exemple :
+ newman run <URL-collection-postman> -e <postmanEnvironment.json> -n <nombre-d-itĂ©rations>1 --<boolĂ©en-arrĂȘt-Ă -la-premiĂšre-erreur>
Usage : run <collection> [options]
URL ou chemin vers une collection Postman.
Options :
-e, --environment <path> URL ou chemin vers un environnement Postman.
-g, --globals <path> URL ou chemin vers un fichier de globales Postman.
--folder <path> Dossier Ă exĂ©cuter dans une collection. Peut ĂȘtre rĂ©pĂ©tĂ© pour plusieurs dossiers (dĂ©faut : )
-r, --reporters [reporters] Rapporteurs à utiliser pour cette exécution. (défaut : cli)
-n, --iteration-count <n> Nombre dâitĂ©rations Ă exĂ©cuter.
-d, --iteration-data <path> Fichier de données pour les itérations (json ou csv).
--export-environment <path> Exporte lâenvironnement dans un fichier aprĂšs lâexĂ©cution.
--export-globals <path> Fichier de sortie pour les globales Ă la fin.
--export-collection <path> Fichier de sortie pour sauvegarder la collection exécutée
--postman-api-key <apiKey> ClĂ© API pour charger les ressources depuis lâAPI Postman.
--delay-request [n] DĂ©lai entre les requĂȘtes (millisecondes) (dĂ©faut : 0)
--bail [modifiers] ArrĂȘt propre ou non de lâexĂ©cution sur erreur et code de sortie selon le modificateur optionnel.
-x , --suppress-exit-code Remplacer ou non le code de sortie par défaut pour cette exécution.
--silent Nâaffiche pas la sortie Newman dans la CLI.
--disable-unicode Remplace les symboles Unicode par du texte brut
--global-var <value> Variables globales en ligne de commande, format clé=valeur (défaut : )
--color <value> Activer/désactiver la couleur. (auto|on|off) (défaut : auto)
--timeout [n] DĂ©lai dâexĂ©cution de la collection (millisecondes) (dĂ©faut : 0)
--timeout-request [n] DĂ©lai pour les requĂȘtes (millisecondes). (dĂ©faut : 0)
--timeout-script [n] Délai pour les scripts (millisecondes). (défaut : 0)
--ignore-redirects Si présent, Newman ne suit pas les redirections HTTP.
-k, --insecure Désactive la validation SSL.
--ssl-client-cert <path> Chemin vers le certificat client SSL (.cert ou .pfx).
--ssl-client-key <path> Chemin vers la clé client SSL (non nécessaire pour .pfx)
--ssl-client-passphrase <path> Passphrase client SSL (optionnel, pour clés protégées).
-h, --help Affiche lâaide
