Savoir que notre application fonctionne juste après la mise en production, c’est bien. S’assurer que cette dernière ne nous lâchera pas au milieu de la nuit, c’est encore mieux.
Pour cela, une solution : le monitoring.
Dans notre cas, le monitoring consiste à envoyer une requête (ou une suite de requêtes) toutes les X minutes/heures et à s’assurer que l’application retourne bien le résultat attendu.
Pour cela, nous avions déjà un outil en place : New Relic.
Afin de vérifier qu’une application web est toujours « en vie », New Relic propose quatre options :
- Un ping : on envoie une requête à une URL spécifique et on vérifie que la réponse contient le mot-clé que l’on souhaite.
- Un chargement de page web : on entre une URL, on vérifie que la page charge bien et on s’assure que ladite page contient le mot clé que l’on souhaite.
- Un script web : on envoie une suite de requêtes à un site web et on vérifie toutes les conditions que l’on souhaite.
- Un script API web : on envoie une suite de requêtes à une API web et on vérifie toutes les conditions que l’on souhaite.
Jusqu’à présent, seules les deux premières options étaient utilisées. On ne vérifiait jamais en profondeur que toute l’application fonctionnait comme il faut.
Il a été décidé de remédier à cela est c’est ainsi que j’ai créé des script web pour New Relic en utilisant l’outil Katalon.
Katalon est un outil permettant d’enregistrer les actions effectuées dans son navigateur web afin de pouvoir les rejouer ultérieurement. Cet outil est donc (théoriquement) très pratique lorsque l’on doit automatiser des tests web.
Je n’irai pas par quatre chemins, Katalon est excessivement difficile d’utilisation. Si vous avez le choix, je vous déconseille l’usage de cet outil. Vous perdrez moins de temps à écrire directement les scripts à la main (plutôt que d’utiliser l’interface de Katalon qui permet de convertir vos tests en script New Relic). C’est d’ailleurs ce que j’ai fini par faire en me passant complètement de l’utilisation de Katalon.
Utiliser New Relic pour monitorer nos applications de façon plus pointue était une solution que nous avons pu mettre en place rapidement. Toutefois, cela nécessitait de réécrire de nouveaux tests en plus de ceux utilisant le langage Cucumber lié à l’outil Selenium que nous avions déjà. Ce n’était donc pas une solution optimale.
En parallèle de cela, nous avions décidé de changer la façon dont nous livrions nos projets et de remplacer l’outil de versionnage Github et Jenkins (outil permettant de déployer nos projets en production) par Gitlab CI (et docker).
Gitlab CI combine les fonctionnalités de Github et Jenkins. Il permet de faire beaucoup de choses et il est notamment possible de lui demander d’effectuer une suite de tâche à la demande ou toutes les X heures.
Comme Gitlab peut utiliser docker, il n’y a pas de réelle contrainte sur le langage que nous souhaitons utiliser. Ainsi, Gitlab CI était tout à fait à même d’exécuter les tests Cucumber + Selenium déjà existants.
A l’aide d’un « schedules » (planning) on va indiquer tous les "combien" nous souhaitons que les tests se lancent (une fois par jour, une fois par semaine, une fois par mois, etc…). Cette suite de tests étant plus longue à s’exécuter que ce qu’il y a sur New Relic, on se contentera de jouer ces tests une fois par jours, tous les jours.
En outre, cette suite de tests sera également lancée automatiquement après chaque mise en production (au lieu d’avoir à les lancer à la main). Cela permet :
- D’éviter d’oublier de les lancer (très peu probable, mais on ne sait jamais).
- D’éviter d’avoir des soucis tels que « il n’y a que Bidule qui sait lancer les tests, mais Bidule n’est pas là ».