Tests Zéphir

Chaque service peut avoir, en plus de son fichier standard (compose/dev/<service>.yml), un fichier de test(compose/test/<service>.yml). Si ce dernier fichier de test existe, il sera lancé par le pipeline d’intégration continue dans 2 modes distincts :

  • Mode isolé
  • Mode intégré

La différenciation de ces deux mode se fait par le passage d’une variable d’environnement (TEST_ENV) au conteneur.

Mode intégré

TEST_ENV prendra la valeur « integrated » (eg. TEST_ENV=integrated) Dans ce mode, le conteneur de test est lancé avec l’ensemble des autres services, afin des réaliser des tests d’intégration.

Mode isolé

TEST_ENV prendra la valeur « isolated » (eg. TEST_ENV=isolated)

Dans ce mode, seul le conteneur de test est lancé, afin de réaliser des tests unitaires.

Voir aussi

  • Le fichier Jenkinsfile, stage « run isolated tests » et « run integrated tests », lignes 109 et 126 respectivement
  • Le script bin/ci, fonctions « run_service_tests » et « run_integrated_tests », lignes 48 et 30 respectivement

Mise en place de tests unitaires (scénario 25049)

  • 1 conteneur dédié aux tests unitaires par services :
    • 1 Dockerfile.Test (installant postgreSQL localement)
    • 1 compose/test/*-test.yml avec des variables d’environnement :
      • ZEPHIR_TEST_TYPE: unit => obligatoire
      • ZEPHIR_TEST_COVERAGE_PATTERN: /usr/lib/python3/dist-packages/identity/* => optionnelle
  • 1 script de lancement des tests : services/*/scripts/test (peut éventuellement être centralisé)
  • 1 dossier de tests unitaires pytest : services/*/test contenant un fichier util.py (permettant la création de la base, éventuellement centralisable aussi)

Le conteneur de tests exécute les tests unitaires et renvoie un code retour (0 = OK, autre chose = KO) si le coverage est demandé, une sortie l’affiche et un rapport HTML est placé dans le dossier services/*/report

Rédaction et tests de tests unitaires

Lancement manuel des tests unitaires d’un conteneur : zephir-compose -b dev --tests -- up --build api-bridge-test

Rédaction des tests unitaires : - Prévoir le partage de volume dans le fichier compose du conteneur (par exemple compose/test/api-brige-test.yml) ` volumes:

  • ../../services/api-bridge/test/:/srv/test
  • ../../services/api-bridge/report/:/srv/report

` - Lancer le conteneur de test et entrer dedans en bash : zephir-compose -b dev --tests -- run api-bridge-test bash - Rédiger les tests sur le poste du développeur et les tester dans le conteneur : /etc/init.d/postgresql start su - postgres -c "psql -c "ALTER USER postgres PASSWORD 'mynewpassword';"" cd /srv/test/unit/ export PYTHONPATH='.' /usr/bin/py.test-3 10_apidescription/test_apidescription.py --showlocals --exitfirst --capture=no --ignore="virtualenv" -vv --failed-first