Des tests end-to-end plus rapides avec Playwright
Playwright est une incroyable solution de test end-to-end multi navigateur, plus rapide que la concurrence sur des scénarios de benchmark réalistes.
En effet, comme démontré dans l’article Cypress vs Selenium vs Playwright vs Puppeteer speed comparison, l’outil est rapide même pour de grandes suites de tests.
Nous allons voir qu’en plus, Playwright a tout ce qu’il faut pour des tests encore plus rapides. Des tests plus rapides, c’est la possibilité de les ajouter à la Continuous Integration, et tout simplement améliorer l’expérience de développement.
Optimiser votre application et votre environnement
Avant d’utiliser les capacités de Playwright pour avoir des tests plus rapides, commençons par l’application web elle-même. Améliorer le poids et les performances d’une page web est toujours une bonne idée. Pour les utilisateurs tout d’abord, mais également pour les tests. Comme Playwright est rapide, le premier goulot d’étranglement sera généralement votre propre application. Sans aller jusqu’à la sur-optimisation, il est souvent facile d’améliorer les performances facilement comme je l’explique dans un article précédent.
Évidemment, il faut aussi veiller à avoir une bonne connectivité entre le test-runner et l’application que vous testez. Par exemple, il peut être intéressant d’avoir le runner de test dans la même région géographique que l’application que vous testez. L’idéal est d’avoir Playwright et le contenu testé sur le même réseau. Playwright peut d’ailleurs lancer un (ou plusieurs serveurs) en local via un script et attendre que le serveur soit prêt avant de lancer les tests. Pratique.
Enfin, si elles ne sont pas nécessaires aux tests, il est possible de bloquer certaines ressources, comme les images ou seulement les images les plus volumineuses. Attention cependant à ne pas dénaturer l’application ou carrément créer des tests moins fiables (faux positifs). Il faut garder en tête que vos tests ne seront plus exactement à l’image de l’expérience de l’utilisateur final.
Parallélisation avec Playwright Test
Playwright Test est le runner Node.js spécifiquement pensé pour le end-to-end avec Playwright. Il est possible d’utiliser d’autres tests runners comme Jest ou Vitest. Playwright Test permet de paralléliser les tests de deux façons.
Chaque test est exécuté dans un worker, avec pour chacun un navigateur et un process différent. En multipliant le nombre de worker, le scaling, on parallélise l’exécution de tests.
Playwright Test adapte automatiquement le nombre de worker, mais cela reste configurable.
Le sharding permet de répartir les tests sur plusieurs machines. Comme le temps de démarrage de Playwright est très court, diviser une suite de test en 3 parties revient en pratique à exécuter les tests 3 fois plus rapidement. Enfin, c’est très facile à mettre en place par exemple avec GitLab CI.
tests:
stage: test
image: mcr.microsoft.com/playwright:v1.25.0-focal
parallel: 7
script:
- npx playwright test --shard=$CI_NODE_INDEX/$CI_NODE_TOTAL
These go to eleven
Pour aller encore plus loin, et quand il y a une grosse base de tests, il est possible de paralléliser à l’extrême. Playwright garantit une isolation des contextes de tests, il est donc possible de l’utiliser une solution serverless comme AWS Lambda.
C’est ce que fait play-lambda : une expérimentation qui permet de faire passer 100 tests en seulement 1 minute ! Play-lambda s’occupe d’installer les dépendances, de planifier les tests et de consolider les résultats.
Play-lambda transforme ainsi le goulot d’étranglement des tests en un problème de scaling, et non plus de temps. Fini les tests end-to-end qu’on ne peut faire passer que la nuit !
Je vous conseille fortement la vidéo de présentation par Oliver Stenbom.
Conclusion
Nous avons vu ensemble qu’il est possible de gagner un temps considérable sur l’exécution de tests Playwright via des optimisations abordables.
En ajustant notre application et l’environnement de test tout d’abord, mais aussi en tirant parti des différentes parallélisations de Playwright Test. Enfin, il reste des options encore nouvelles mais très prometteuses.
Certaines équipes ne mettent pas en place de tests end-to-end, les laissant aux équipes plus matures disposant d’automaticien-e-s. Pourtant, ces tests sont dorénavant plus faciles à maintenir, plus fiables et rapides qu’on ne le croit. Playwright participe à changer le dogme hérité de la pyramide de tests.
Avec des tests end-to-end rapides, il est maintenant envisageable de les faire passer en intégration continue. Fini les tests la nuit.