AFUP Forum PHP 2019 Baromètre Planète PHP

La parole est aux speakers : Kévin Dunglas (AFUP Day 2019 Lille)

Jusqu’à l’AFUP Day 2019 Lyon, retrouvez nos interviews de speakers pour mieux comprendre leur parcours et le sujet qu’ils ou elles aborderont lors de leur conférence !

La conférence

Symfony Panther : tester vos applis web avec de vrais navigateurs n’a jamais été aussi simple

Que ce soit quelques lignes de jQuery ou des Progressive Web Apps React/Vue.js/Angular complètes, toutes les applications web modernes contiennent du JavaScript. L’écosystème PHP et les frameworks tels que Symfony ou Zend proposent des outils pour réaliser des tests fonctionnels et de bout en bout (E2E), malheureusement ils se contentent d’effectuer des requêtes HTTP (Guzzle, Symfony WebTestCase, Zend Test PHPUnit) et des assertions sur le HTML généré côté serveur (BrowserKit). Ils ne sont pas capables d’exécuter le code JavaScript, de générer du HTML côté client, de tester si un élément est visible ou non, si une boîte de dialogue (alert, prompt) est bien affichée au clic… De plus, ces outils de test ne permettent pas de détecter les éventuels bugs touchant des navigateurs spécifiques.

Panther est une toute nouvelle bibliothèque qui permet - grâce au standard WebDriver du W3C - de piloter tous les navigateurs modernes (Chrome, Firefox, Safari, Edge…) directement en PHP pour réaliser des tests fonctionnels et E2E, ou du web scraping. Panther implémente la très pratique API publique du composant BrowserKit de Symfony, ce qui lui permet d’exécuter les tests écrits avec le composant de test fonctionnel de Symfony et les scripts utilisant la bibliothèque de web scraping Goutte sans avoir à les modifier ! De plus, il implémente l’API de PHP WebDriver, et donne accès à toutes les fonctionnalités avancées du protocole du même nom, parmi lesquelles la possibilité d’effectuer des captures d’écran ou exécuter des scripts JavaScript personnalisés dans le contexte d’exécution de la page.

Panther s’installe à l’aide d’un simple « composer require » et tout ce dont il a besoin pour fonctionner c’est un navigateur (pas de Selenium ou autre). Il détecte la structure de l’application, lance un serveur web pour la servir, trouve l’installation locale de Chrome ou de Firefox et les démarre en mode « headless » sans qu’aucune configuration ne soit nécessaire ! Il s’intègre également avec les solutions d’intégration continues populaires tel que Travis et fonctionne avec Docker. Encore mieux, il est compatible avec les services SauceLabs et BrowserStack pour tester votre application sur toutes les plateformes mobiles et bureaux possibles et imaginables.

Lors de cette présentation, vous découvrirez l’ensemble des capacités du félin et son fonctionnement interne !

Auberge Stéphane Hessel
17/05/2019
15:30-16:10

Tu as créé Symfony Panther pour tester les applications web et tu nous en parleras lors de l’AFUP Day 2019 Lille : quelle est la spécificité de ce composant vis-à-vis d’autres outils de testing ?

Panther est un outil de test de bout en bout (end-2-end) dont les deux objectifs principaux le différencient fortement des autres outils dédiés à l’écriture de ce type de tests :

– il s’intègre parfaitement avec les outils de tests unitaires et fonctionnels déjà fournis avec Symfony
– il est très facile à mettre en oeuvre : pas besoin d’installer Selenium, de configurer un serveur web, de préparer une base de données de test… tout est automatique.

Concrètement, Panther implémente l’API publique de BrowserKit. C’est aussi celle que respectent l’outil de test fonctionnel de Symfony (WebTestCase) et Goutte, la bibliothèque de web scraping. Il est donc très facile de porter des tests existants utilisant l’un de ces outils : il n’y a qu’une seule API à apprendre pour les maîtriser tous, là où d’autres outils de tests E2E vous demandent d’apprendre une nouvelle API (CodeCeption, Dusk) voire un autre langage de programmation (Nightwatch, Cypress, …).

La différence avec WebTestCase et Goutte, c’est que Panther va lancer un vrai navigateur web pour exécuter les scénarios de navigation. Panther va exécuter le code JavaScript et effectuer le rendu CSS. Il devient donc possible de tester le code front, et donc de s’assurer que la page sera totalement fonctionnelle lorsque l’utilisateur s’y rendra (pas d’erreur JS bloquante, pas d’éléments HTML importants masqués en CSS…).

Si vous utilisez React, Vue.js ou même jQuery pour réaliser la couche de présentation de votre projet, Panther vous permet désormais de la tester aussi naturellement que si vous aviez utilisé Twig. Si vous utilisez les fonctionnalités temps réel apportées par Mercure (qui dépendent de JavaScript côté client), Panther vous permet également de les tester.

De plus, Panther fournit des fonctionnalités supplémentaires telles que la possibilité de simuler des clics de souris sur des éléments précis (pratique pour tester des applications utilisant canvas ou WebGL), de prendre des captures d’écran, ou d’exécuter du code JS dans le contexte d’exécution du navigateur.

Panther s’appuie sur le protocole WebDriver, standardisé par le W3C, et sur la bibliothèque PHP WebDriver de Facebook (à laquelle j’ai beaucoup contribué au cours du développement de ce nouvel outil). Il peut donc manipuler n’importe quel navigateur moderne (Chrome par défaut, mais aussi Firefox, Edge…), est compatible avec Selenium et avec les services de “browser testing” en SaaS (SauceLabs, BrowserStack…).

Durant ma présentation, je vous présenterai en détail comment ça marche ! Notez d’ailleurs que – bien qu’il fasse partie de ce projet – Panther n’a aucune dépendance à Symfony, il peut fonctionner avec n’importe quel projet PHP (et même non-PHP).

Cela fait 7 ans que tu es le gérant de Les-Tilleuls.coop. Quels enseignements retiens-tu de cette (presque) décennie au sein d’une société auto-gérée ?

Nous avons lancé Les-Tilleuls.coop à 3 (et à temps partiel). Nous sommes désormais 35 avec des bureaux à Lille bien sûr, mais désormais aussi à Paris, Nantes et Amiens.

Notre développement prouve que le mode d’organisation coopératif n’est pas une utopie. Réfléchir et décider collectivement, se structurer de manière horizontale et démocratique, faire en sorte que les richesses produites aillent à ceux qui les créent plutôt qu’à ceux qui ont eu la chance d’être bien nés ; c’est à la fois pragmatique et redoutablement efficace. Ce modèle permet de placer ceux qui travaillent, ceux qui créent, en position de gérer ensemble leur moyen de production. Il permet de leur redonner de l’emprise sur les décisions qui forgent leur quotidien. Mais en plus de ces considérations sociales, même selon les critères d’évaluation économique traditionnels, nous sommes la preuve que le modèle coopératif peut fonctionner aussi bien, voire mieux, que celui du capitalisme et de la hiérarchie.

La question qui se pose maintenant, c’est comment généraliser à l’ensemble de la société des expériences relativement isolées comme les nôtres.

En tant qu’habitué des événements de l’AFUP, as-tu des conseils à donner aux personnes souhaitant se lancer en tant que conférencier ou conférencière ?

Mon seul conseil est de ne surtout pas hésiter à se lancer !

Le public comme les organisateurs sont généralement bienveillants et de très nombreux sujets restent à explorer, qu’ils soient théoriques, pratiques ou beaucoup plus larges (thèmes sociétaux, organisationnels…). L’AFUP, et de nombreuses autres associations et groupes d’utilisateurs locaux, organisent des événements allant du meetup local qui permet de se faire la main à la conférence internationale pour rendre visible une approche ou un projet. C’est un travail remarquable, et indispensable pour partager et faire avancer la connaissance dans notre domaine.

Accueillir de nouvelles conférencières et de nouveaux conférenciers apporte de la fraîcheur et permet de s’ouvrir à de nouveaux horizons, d’appréhender différemment les problèmes auxquels nous sommes confrontés au quotidien. C’est aussi, pour la conférencière ou le conférencier, une excellente manière d’approfondir un sujet et de gagner en notoriété. C’est gagnant-gagnant.

Le speaker

Kévin DUNGLAS
Kévin DUNGLAS
Kévin est le fondateur de la société autogérée Les-Tilleuls.coop. Développeur polyglotte, il est membre de la core-team Symfony et a créé le framework API Platform. Il est également contributeur à plus d’une centaine de projets Open Source, conférencier et rédacteur d’articles et livres techniques.

Autres interviews

En poursuivant votre navigation sur ce site, vous acceptez l’utilisation des cookies pour améliorer votre navigation. plus d'infos

1. Qu’est-ce qu’un cookie?

Un Cookie est un petit fichier texte enregistré sur votre terminal (ordinateur, tablette, smartphone, etc.), à l’occasion de la consultation d’un service en ligne grâce à votre logiciel de navigation. Il permet à son émetteur d’identifier le terminal dans lequel il est enregistré, pendant la durée de validité ou d’enregistrement du Cookie. Lors de la consultation de notre site Internet, des informations relatives à la navigation de votre terminal sont susceptibles d'être enregistrées dans ces fichiers dits "Cookies". Ces derniers sont installés sur votre terminal, sous réserve des choix que vous auriez exprimés concernant les Cookies et que vous pouvez modifier à tout moment.

2. A quoi servent les cookies émis sur notre site ?

Seul l’émetteur d’un cookie est susceptible de lire ou de modifier les informations qui y sont contenues.
Les cookies utilisés sur notre site permettent :

3. Vos choix concernant les cookies

Vous disposez de différents moyens pour gérer les cookies. Tout paramétrage que vous pouvez entreprendre sera susceptible de modifier votre navigation sur notre site et sur Internet en général et vos conditions d'accès à certains services de notre site nécessitant l'utilisation de cookies. Vous pouvez à tout moment exprimer et modifier vos souhaits en matière de cookies, par les moyens décrits ci-dessous. L'accord sur les cookies L'enregistrement d'un cookie dans un terminal est essentiellement subordonné à la volonté de l'utilisateur du terminal, que celui-ci peut exprimer et modifier à tout moment et gratuitement à travers les choix qui lui sont offerts par son logiciel de navigation. Si vous avez accepté dans votre logiciel de navigation l'enregistrement de cookies dans votre terminal, les cookies intégrés dans les pages et contenus que vous avez consultés pourront être stockés temporairement dans un espace dédié de votre terminal. Ils y seront lisibles uniquement par leur émetteur.

Le refus des cookies Si vous refusez l'enregistrement de cookies dans votre terminal, ou si vous supprimez ceux qui y sont enregistrés, vous ne pourrez plus bénéficier d'un certain nombre de fonctionnalités qui sont néanmoins nécessaires pour naviguer dans certains espaces de notre site. Tel serait le cas si vous tentiez d'accéder à votre compte ou à votre abonnement qui nécessite de vous identifier. Tel serait également le cas lorsque nous, ou nos prestataires, ne pourrions pas reconnaître, à des fins de compatibilité technique, le type de navigateur utilisé par votre terminal, ses paramètres de langue et d'affichage ou le pays depuis lequel votre terminal semble connecté à Internet. Le cas échéant, nous déclinons toute responsabilité pour les conséquences liées au fonctionnement dégradé de nos services résultant de l'impossibilité pour nous d'enregistrer ou de consulter les cookies nécessaires à leur fonctionnement et que vous auriez refusés ou supprimés. Les choix offerts par votre logiciel de navigation Vous pouvez configurer votre logiciel de navigation de manière à ce que des cookies soient enregistrés dans votre terminal ou, au contraire, qu'ils soient rejetés, soit systématiquement, soit selon leur émetteur. Vous pouvez également configurer votre logiciel de navigation de manière à ce que l'acceptation ou le refus des cookies vous soient proposés ponctuellement, avant qu'un cookie soit susceptible d'être enregistré dans votre terminal. Pour la gestion des cookies et de vos choix, la configuration de chaque navigateur est différente. Elle est décrite dans le menu d'aide de votre navigateur, qui vous permettra de savoir de quelle manière modifier vos souhaits en matière de cookies. Selon votre navigateur, consultez le lien ci-dessous pour configurer votre navigateur et refuser les cookies :