rest-assured. C’est ce que nous allons mettre en place dans l’exemple (lien gitlab) :
Après avoir configuré l’url de votre API, rest-assured permet d’utiliser la syntaxe BDD pour requêter les différents endpoints. Il est ainsi possible de configurer la requête (given : headers, paramètres, body, …), de l’exécuter (when), et finalement de vérifier la réponse (then : code retour, headers, body, ...). Il est notamment possible de vérifier le contenu d’un json avec json path.
Tout comme les tests d’intégration, il faudra mettre en place l’environnement d’exécution avant de pouvoir lancer ces tests. Les tests de bout en bout sont donc aux côtés des tests d’intégration dans un projet dédié. Ils seront exécutés en même temps par le pipeline de build, après avoir instancié votre environnement (ou déployé les services sur des serveurs existants).
La pyramide telle que décrite initialement ne faisait pas mention d’autres types de tests. Mais nous ne serions pas complets si nous ne citions pas à minima les autres types de tests qu’il est important de mettre en oeuvre et d’automatiser autant que possible.
Dans notre exemple, nous n’avons pas mis en place de sécurité applicative, mais sachez que Spring (et les autres librairies utilisées) fournissent le nécessaire (authentification et autorisations) pour les tests de composants, d’intégration ou bout en bout que nous avons développés.
Par ailleurs, TOP 10 2017). Ils fournissent notamment un guide très complet sur les tests ainsi qu’une liste d’outils permettant de les automatiser.
Ce type de test intervient généralement très tard dans le cycle de développement, ce qui est clairement à l’encontre du principe de rapidité du feedback. Il est pourtant possible d’automatiser une partie de ces tests, de les exécuter régulièrement dans le pipeline de build et d’avoir un feedback sur l’évolution des performances de l’application. Des outils tels que Gatling ou JMeter sont les outils de choix si vous souhaitez testez vos performances en continu.
Les tests d’acceptance ou tests fonctionnels sont les tests qui permettent de valider l’application d’un point de vue utilisateur (on dit d’ailleurs souvent User Acceptance Tests / UAT).
Je suis partagé sur ce type de tests : ils sont généralement du même type que les tests de bout en bout (tests d’IHM bien souvent) auxquels on ajoute une couche de BDD (cucumber) pour la compréhension par le métier / les testeurs. On souhaite donc les limiter (pour toutes les raisons exposées plus haut). Mais en parallèle le métier voudrait valider l’ensemble des règles, cas d’usage, etc.
Je conseille de se limiter à quelques smoke tests, qui permettent de traverser l’ensemble de l’application (le fameux happy path). Encore une fois, le métier doit être validé plus bas dans la pyramide. Il s’agira là de construire une relation de confiance entre les développeurs et le métier sur leur capacité à tester l’application fonctionnellement et assurer la non-régression grâce aux tests déjà développés.
Il est temps de conclure cette série d’articles. Au final, nous avons 26 tests unitaires, 15 tests de composants (+ 1 test de contrat qui pourrait avantageusement remplacer un test de composant), 2 tests d’intégration et 2 tests de bout en bout. La pyramide est donc globalement respectée et notre composant sécurisé.
Pour résumer, et si vous ne deviez retenir que quelques points :