Lancer des tests unitaires avec Django
En tant que devops je dois mettre en place ce qu’il faut pour lancer
des tests unitaires et ce sur une application écrite en python
et utilisant le
framework Django
. Cela doit me permettre de faire tourner ces tests dans un
pipeline gitlab et d’avoir le rapport du taux de couverture de code en sortie.
Mais voila je ne veux pas installer postgresql dans ma VM Linux ! Donc voyons
comment utiliser docker
et docker-compose
.
Mise en place d’une application Django
Le plus simple est de suivre le tutoriel disponible en français sur le site de Django ↗
Mais non, voici le lien vers le repo ↗ contenant le résultat. Je me suis arrêté après la mise en place des tests unitaires.
Installations des outils sur mon linux
Il faut bien que dans votre vm vous ayez installé Docker ↗, python devant l’être deja. Vous pouvez créer un environnement virtuel avec pyenv.
Pour installer docker-compose
dans une fenêtre shell tapez les commandes
suivantes :
Maintenant créons le Dockerfile
qui nous permettra de lancer les tests
unitaires. Pour cela on créé un fichier Dockerfile
à la racine du projet
contenant ces lignes:
Vous remarquerez qu’il n’y a rien de bien compliqué. Le contenu du fichier requirements.txt
Maintenant passons à l’écriture du fichier docker-compose.yml
:
Quelques explications :
- La stack est composée de deux containers:
- un qui contient la bdd, postgres, initialisé avec les paramètres USER, PASSWORD et DB
- un autre, app, qui servira à lancer les tests avec l’image créé précédemment.
La commande lancée permet d’attendre que la bdd soit disponible pour
s’exécuter.Elle attend que le port 5432
soit up sur le container postgres
.
Une fois disponible, les tests sont lancés et le rapport de couverture de code est
généré.
Voyons comment lancer les tests:
Et oui rien de plus simple! Attention le container postgresql continuera de vivre sa VIE. Pour l’arrêter il suffit de taper la commande suivante :
Si vous avez fait des modifications sur le Dockerfile il faudra relancer le build de celui-ci :
Intégrer les tests dans un pipeline gitelab
Il suffit d’écrire le fichier .gitlab-ci suivant en ayant au préalable stocker
Quelques explications :
- On utilise un des services fournis par gitlab et en l’occurrence ici
une bdd postgresql. Gitlab met à disposition aussi des
services ↗
mysql
etredis
.
La suite on peut ajouter :
- un stage de lint un lançant un job
flake8
- un autre pour lancer un scan pour envoyer un rapport dans
sonarqube
- un autre pour générer un package et le stocker dans le
package registry
de gitlab.
Petite cerise sur le gâteau. Voici comment créer le badge affichant le coverage sur la page du projet.
Allez dans le menu Settings -> General -> Badges
Remplir comme indiqué ci dessous :