Note : 6 ; Très pertinent sur la stratégie et la mise en œuvre des tests, souvent moins sur la clarté des explications.
Voici un livre qui s’est fait attendre plusieurs années. Au début, il s’agissait de produire un texte consacré à Arquilian. Finalement, le contexte s’est élargi aux tests de microservices de manière plus générale, Arquilian continuant à se tailler la part du lion, mais d’autres outils de test complétant le paysage, comme nous le verrons.
L’ouvrage totalise 260 pages réparties en 10 chapitres. Cela donne une moyenne de taille par chapitre relativement raisonnable mais quand même un peu plus élevée que ce que j’apprécie généralement. On démarre fort logiquement par un premier chapitre très court pour introduire les microservices. Il s’agit de présenter l’architecture microservices au niveau conceptuel. Une présentation pas vraiment fameuse, avec une représentation qui ne me parle guère et une architecture s’éloignant un peu de celle de Newman et où j’aurais aimé une pincée d’architecture hexagonale.
Le second chapitre présente l’application de test, ou plutôt l’architecture de test, sur une petite trentaine de pages. En fait, les auteurs ont fait le choix de rassembler des architectures techniques différentes : Spring Boot, TomEE et WildFly Swarm. A l’exception du vidéo service sur Spring Boot, le reste s’adosse à Java EE 7 ! Un choix dépassé depuis longtemps, peut-être justifié par le fait que les auteurs sont employés de JBoss ou parce qu’initialement Arquilian était dédié à JEE ? Quoi qu’il en soit, ce choix aurait dû être abandonné, il y avait déjà fort à faire en se contentant de Spring Boot et cette multiplicité introduit une regrettable complexité et de la confusion.
Le chapitre 3 est consacré aux tests unitaires, avec JUnit. Il y a toujours une question délicate concernant la granularité de ces tests. Les auteurs abordent celle-ci en les divisant en tests « solitaires », à la Kent Beck et en « tests sociaux » couvrant des interactions entre plusieurs classes. Les auteurs vont assez loin dans la technicité de leurs tests, ce qui est à la fois assez intéressant mais aussi parfois peu lisible.
Le chapitre 4 est mon chapitre préféré, car il introduit Arquilian. Il couvre 35 pages, ce qui est finalement modeste quand on voit tout ce que les auteurs tentent d’y mettre. On arrive à couvrir les basiques d’Arquillian et même plus, mais le tout au pas de course : application EJB et Spring Boot, build avec Maven et Gradle, extensions REST et j’en passe ! Certes il en reste pour après mais j’aurais apprécié que les auteurs fassent des choix. Ainsi ShrinkWrap qui aurait mérité son propre chapitre est-il traité de manière plutôt frugale eut égard à l’importance du sujet.
Toujours avec Arquillian, le chapitre 5 aborde les tests d’intégration. Ici les auteurs font un choix sur la définition du terme : ce ne sont pas des tests de bout en bout mais embarquant la partie nécessaire (mais pas plus de l’application) pour interagir avec un autre sous-système, par exemple une base de données. C’est aussi l’occasion d’aborder le multi-déploiement avec Arquillian. Un sujet intéressant rendu complexe par la variété des conteneurs de l’architecture d’exemple…
Place aux tests de contrat avec Pact JVM au chapitre 6. Le chapitre occupe près de 35 pages. Malgré cela les auteurs échouent à le rendre clair. C’est une des grosses frustrations du livre. Il me faudra potasser le sujet. De toute évidence, il manque des informations que j’ai du mal à extrapoler.
Au chapitre 7, on passe un gros cap de complexité avec les tests de bout en bout. Retour à Arquilian, mais dopé avec Cube, pour lancer des conteneurs Docker et Drone pour lancer les tests via l’IHM et des drivers Selenium. Plus d’autres petites plaisanteries. On comprend l’idée générale, mais pas très facile d’assembler les morceaux pour avoir l’image d’ensemble. C’est encore de Docker dont il est question au chapitre 8. On rentre vraiment dans le très dur avec Docker Compose et même Kubernetes. On aurait pu s’épargner certaines cerises sur le gâteau comme Graphene. Si la partie avec Rest Assured m’a réellement intéressé, ce long chapitre reste le plus ardu du livre.
C’est encore un cran plus proche de la réalité de la prod que nous emmène le chapitre 9. Il parle de virtualisation, on pense VMware, mais il s’agit en fait d’Hoverfly. Un outil à propos duquel le texte est assez convainquant pour nous intéresser. On termine relativement en douceur avec un chapitre 10 consacré au déploiement continu en général et à la configuration Jenkins en particulier, pour mettre ensemble les différents types de tests évoqués dans un pipeline de déploiement.
Il est rare d’avoir des ouvrages traitant réellement de stratégie de test. Certes celui-ci parle beaucoup outils, mais mis dans le contexte d’une stratégie de test. L’approche est réellement intéressante. Hélas, on arrive vite à un niveau de complexité où le propos manque de clarté et me fait décrocher. Une complexité aggravée par des exemples balayant trop larges et des types de test qui veulent embrasser trop de choses. Le prix à payer est d’expérimenter soi-même pour appréhender ce que le texte échoue à nous faire comprendre clairement.
Référence complète : Testing Java Microservices – Alex Soto Bueno, Andy Gumbrecht & Jason Porter – Manning 2018 – ISBN: 978 1 61729 289 7