# Tests QA et de régression dans Mojaloop

Vue d’ensemble du cadre de tests mis en place dans Mojaloop

Sommaire :

  1. Exigences de régression
  2. Tests développeur
  3. Tests Postman et Newman
  4. Exécuter les tests de régression
  5. Flux d’un test planifiĂ© typique
  6. 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 ms est 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.
  • 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 ms peut ĂȘtre nĂ©cessaire via le Test Runner Postman. Ce n’est pas toujours nĂ©cessaire.
  • 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.yaml dans 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 RAW et 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_transfer de 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