Aucun logiciel n’est exempt de bogues. C’est un axiome qui s’applique à chaque langage de programmation et à chaque application.

Lorsque ces bugs sont déployés au sein de votre site web en production, vous pouvez subir des conséquences négatives de gravité variable. En voici quelques exemples, allant de l’ennui au dommage économique :

  • Léger : Un utilisateur ne peut pas cliquer sur un lien rompu.
  • Grave : Le bouton « Envoyer » d’un formulaire de contact ne fonctionne pas, ce que l’utilisateur ne découvre qu’après avoir rédigé son message.
  • Grave : Une passerelle de paiement mal configurée, rendant les utilisateurs incapables d’acheter des produits dans votre boutique eCommerce, et donc de quitter le site.


Aucun outil ne suffit à gérer tous les aspects du test d’une application sous tous les angles possibles. En effet, en plus de trouver les bogues, il est vital d’exécuter des tests supplémentaires pour valider d’autres fonctions de l’application, telles que :

Dans cet article, nous allons passer en revue 10 outils créés par la communauté open source qui peuvent aider à constituer une pile pour tester le code PHP dans les extensions WordPress. Certains de ces outils ont été spécifiquement conçus pour tester le code PHP ; d’autres sont destinés à tester le code WordPress ; et quelques autres outils ont été créés pour gérer certaines fonctionnalités génériques utiles pour les tests.

1. DevKinsta

Détails pour un site WordPress local dans DevKinsta.
Détails pour un site WordPress local dans DevKinsta.

DevKinsta est une suite de développement local pour les sites WordPress. En fournissant simplement quelques détails de base, une instance locale d’un site WordPress est installée immédiatement, et elle est livrée avec plusieurs outils de développement utiles comme une boîte de réception, un gestionnaire de base de données et une journalisation pour faciliter le dépannage.

DevKinsta est normalement utilisé par les développeurs et les concepteurs lors de la création de leurs thèmes et extensions WordPress. Mais il peut également être utilisé comme un serveur web local pour exécuter des tests d’intégration et de fonctionnalité. Ceci est accompli en tandem avec un outil HTTP qui vous aide à vérifier que le contenu et les en-têtes de vos réponses sont corrects.

Les principales fonctionnalités de DevKinsta sont :

2. PHPUnit

Logo PHPUnit.
Logo PHPUnit.

PHPUnit est un framework de test orienté programmeur pour PHP. C’est le framework le plus populaire pour exécuter des tests unitaires dans le code PHP, avec pour objectif de valider des unités individuelles du code source.

Les tests PHPUnit permettent aux développeurs de trouver les problèmes le plus tôt possible dans le cycle de développement, ce qui permet de s’assurer qu’aucune régression du code n’a été introduite (c’est-à-dire que les modifications apportées à un morceau de code n’ont pas causé de problèmes ailleurs).

Les principales fonctionnalités de PHPUnit sont :

  • Test des nouvelles fonctionnalités
  • Validation du code nouvellement refactorisé
  • Peut être entièrement automatisé et exécuté au sein du processus d’intégration continue de votre choix
  • Débogage
  • Documentation automatique sur l’utilisation attendue grâce à l’invocation de fonctionnalités et aux contraintes
  • Permet l’approche Test-Driven Development (TDD) dans laquelle les développeurs créent d’abord les tests, puis la fonctionnalité

3. Brain Monkey

Logo de Brain Monkey.
Logo de Brain Monkey.

Brain Monkey est un utilitaire de test pour PHP et WordPress. Il fournit des outils agnostiques au framework qui vous permettent de redéfinir les méthodes PHP et de tester le comportement de toute application PHP. Il fournit également des outils spécifiques pour tester le code WordPress.

Les principales fonctionnalités de Brain Monkey sont les suivantes :

  • Permet aux tests unitaires d’interagir avec des bibliothèques externes non chargées
  • Permet l’invocation de fonctions WordPress sans qu’il soit nécessaire de charger l’environnement WordPress
  • Peut affirmer que les fonctions WordPress (telles que add_filter ou do_action) invoquent la fonctionnalité comme prévu

4. Brain Faker

Brain Faker sur GitHub.
Brain Faker sur GitHub.

Brain Faker utilise Faker (une bibliothèque PHP populaire pour générer de fausses données) et Brain Monkey pour fournir une génération facile de faux objets WordPress et de fonctions similaires que vous pouvez tester, notamment :

  • WP_Post instances, et fonctions de simulation similaires comme get_post et get_post_field
  • WP_User les instances, et les fonctions simulées comme get_userdata, get_user_by, user_can, etc
  • WP_Term instances, et fonctions de simulation associées comme get_term et get_term_by
  • WP_Comment instances
  • WP_Site instances, et fonctions de simulation comme get_site
  • WP_Post_Type instances, et fonctions simulées comme get_post_type_object et post_type_exists
  • WP_Taxonomy instances, et les fonctions simulées comme get_taxonomy et taxonomy_exists
  • WP_Error instances

Les principales fonctionnalités de Brain Faker sont :

  • Injecte des données WordPress fausses mais réalistes dans le test unitaire – l’accès à la date de modification d’un faux article se comportera comme une date (ex. 2022-04-17T13:06:58+00:00), le nom d’un utilisateur sera adapté (ex. "John Smith"), une instance de faux article est rédigée par une instance de faux utilisateur, etc
  • Les fausses données peuvent être fournies à l’avance ou générées de façon aléatoire
  • Extensible – les développeurs peuvent simuler les classes et les fonctions de leurs propres extensions WordPress

5. Mockery

Mockery sur GitHub.
Mockery sur GitHub.

Mockery est un framework d’objets fantaisie PHP simple mais flexible, destiné à être utilisé avec PHPUnit, PHPSpec, ou tout autre framework de test unitaire. Il offre un cadre de test double capable de définir toutes les opérations et interactions possibles des objets en utilisant un langage spécifique au domaine (DSL) lisible par l’homme.

Les principales caractéristiques de Mockery sont les suivantes :

  • Permet la génération flexible d’objets fantaisie et de stubs (qui fournissent des réponses prédéfinies aux appels spécifiques effectués pendant les tests)
  • Améliore les capacités d’isolation des tests de PHPUnit
  • API flexible pour exprimer les attentes simulées, en imitant autant que possible une description en langage naturel (par exemple, $mock->shouldReceive('myMethod')->once()->andReturn('Hello world!');)
  • Tests unitaires utilisant des objets fantaisie en mémoire pour éviter d’avoir à accéder à des systèmes plus lents (tels que des bases de données, des systèmes de fichiers ou des services externes)
  • Possibilité de simuler des comportements déterministes et non déterministes

6. Outil d’exportation natif de WordPress

L'outil d'exportation de WordPress.
L’outil d’exportation de WordPress.

L’outil d’exportation natif de WordPress télécharge les données WordPress du site sur votre appareil sous forme de fichier XML, y compris les articles, les pages, les types d’articles personnalisés, les commentaires, les champs personnalisés, les catégories, les étiquettes, les taxonomies personnalisées, les utilisateurs et les médias. Le fichier XML présente un format personnalisé (appelé fichier WordPress eXtended RSS ou WXR) qui peut être importé dans n’importe quel site WordPress.

Cet outil n’est pas spécifiquement conçu pour les tests. Toutefois, son utilité vient du fait qu’il permet de créer des instantanés de la base de données WordPress contenant un ensemble de données approprié, qui peut ensuite être utilisé pour les tests. Cela signifie que le site WordPress en production, qui contient des données réelles, peut être exporté et importé dans une instance de développement ou de staging pour tester une nouvelle fonctionnalité.

Les principales caractéristiques de l’outil d’exportation de WordPress sont les suivantes :

  • Création de données de test à l’aide d’un site WordPress réel
  • Fichier d’exportation partageable de la base de données entière
  • Utile à la fois pour les tests d’intégration et les tests unitaires

7. Guzzle

Logo Guzzle.
Logo Guzzle.

Guzzle est un client PHP HTTP qui permet d’envoyer facilement des requêtes HTTP et de s’intégrer à des services web.

Guzzle est un outil générique, les tests ne sont donc qu’un de ses cas d’utilisation possibles. Associé à un serveur web local tel que DevKinsta, Guzzle permet d’exécuter des tests d’intégration : Vous pouvez utiliser Guzzle pour envoyer une requête HTTP contre le serveur web de développement, puis passer la réponse à un test unitaire en PHPUnit qui vérifie que le contenu et les en-têtes sont définis comme prévu.

Les principales fonctionnalités de Guzzle sont les suivantes :

  • Satisfait à la recommandation standard PHP « PSR-7 » (pour les interfaces de messages HTTP), évitant ainsi le verrouillage des fournisseurs
  • Simple et rapide
  • Les tests sont exécutés sur un site WordPress réel, ce qui augmente la fiabilité
  • Peut être exécuté à partir de PHPUnit pour plus de facilité et de rapidité
  • Les tests d’intégration peuvent être automatisés et ajoutés au processus d’intégration continue

8. WP-CLI

Logo WP-CLI.
Logo WP-CLI.

WP-CLI est l’interface de ligne de commande pour WordPress. Avec elle, vous pouvez mettre à jour des extensions, configurer des installations multisite et bien plus encore, sans utiliser de navigateur web.

WP-CLI n’est pas spécifiquement un outil de test, mais les tests font partie de ses nombreux cas d’utilisation. Par exemple, après avoir mis en route un nouveau serveur web de développement, vous pouvez exécuter un script bash contenant des commandes WP-CLI pour importer des données de test dans le site WordPress, créer les utilisateurs avec les rôles et les capacités appropriés, installer les extensions tierces nécessaires, et d’autres tâches de ce type.

Comme le script contenant les commandes WP-CLI peut être stocké dans votre dépôt Git, le processus d’exécution des tests d’intégration peut ensuite être automatisé et intégré à votre processus d’intégration continue :

  1. Utilisez l’outil d’exportation de WordPress pour générer des données de test réelles et les stocker dans le référentiel Git.
  2. Utilisez DevKinsta pour lancer un serveur web avec une nouvelle instance de WordPress.
  3. Utilisez WP-CLI pour importer les données de test dans le site WordPress (DevKinsta peut être utilisé via WP-CLI).
  4. Créez un test unitaire dans PHPUnit en demandant à Guzzle d’exécuter une requête HTTP contre le serveur web pour vérifier le contenu et les en-têtes de votre réponse.

Les principales fonctionnalités de WP-CLI sont :

  • Permet l’exécution à distance de commandes contre l’instance de WordPress via une interface de ligne de commande
  • Extensible avec d’autres outils
  • Améliore les capacités de la pile de tests
  • Permet l’automatisation complète du processus

9. XDebug

Logo XDebug.
Logo XDebug.

XDebug est une extension pour PHP qui fournit une gamme de fonctionnalités pour améliorer l’expérience de développement PHP, y compris le débogage, l’amélioration des rapports d’erreurs de PHP, le traçage, le profilage et l’analyse de la couverture de code.

XDebug ne vous aidera pas à tester votre code, mais à trouver où se trouve le bogue. La combinaison de XDebug avec PHPUnit est particulièrement efficace : Si un test échoue et que vous ne parvenez pas à trouver la source du problème, vous pouvez utiliser XDebug pour ajouter des points de terminaison dans le code du test unitaire. Lors d’une nouvelle exécution du test unitaire, le script PHP sera mis en pause à chacun de ces points de terminaison, ce qui vous permettra d’inspecter l’état actuel de l’exécution (pile d’appels, valeurs des propriétés et des objets, etc.) et d’essayer de découvrir ce qui ne va pas.

Les principales fonctionnalités de XDebug sont :

  • Comprend des intégrations pour les éditeurs PHP les plus populaires, notamment VS Code, PHPStorm et Sublime
  • Profile le temps passé dans chaque appel de fonction et la quantité de mémoire qu’il consomme
  • Beaucoup plus puissant que la simple utilisation de var_dump pour déboguer le code
  • Permet de modifier les valeurs des variables à la volée lors des pauses sur les points d’arrêt

10. PHPStan

Logo PHPStan.
Logo PHPStan.

PHPStan est un outil d’analyse statique pour PHP, conçu pour trouver des bogues dans le code avant même d’écrire des tests.

L’objectif de PHPStan est de réduire le nombre de tests que les développeurs doivent écrire. Cet outil est le premier exécuté dans la pile de tests, attrapant de manière pré-emptive autant de bogues que possible. Seuls les bogues qui ne peuvent être déduits de l’analyse statique (par exemple, ceux dont la logique est défectueuse) doivent être validés par des tests unitaires.

PHPStan fonctionne en balayant l’ensemble du code de base et en recherchant les inadéquations. Par exemple, la valeur de réponse d’une fonction qui renvoie un float ne peut pas être assignée à un paramètre de fonction de type integer. Chaque fois que le code contient une telle occurrence, il s’agit d’un bogue potentiel, et PHPStan vous en avertira pendant la phase de développement, juste au moment où vous écrivez le code de l’application.

Les principales fonctionnalités de PHPStan sont :

  • Automatisation et intégration dans votre processus d’intégration continue existant
  • Repère de nombreux bogues délicats, tels que les incompatibilités de type
  • Balaie l’ensemble de la base de code, trouvant les bogues dans les portions de code rarement exécutées
  • Organisé en niveaux de complexité croissante pour permettre une intégration graduelle
  • Propose des extensions pour les frameworks PHP et les CMS les plus populaires, notamment Symfony, Laravel, Doctrine, Nette et WordPress

Résumé

Le coût des bugs qui se glissent inaperçus dans votre application en production peut être dommageable pour votre réputation et vos revenus, vous devez donc tenter de les éradiquer avant qu’ils n’affectent vos utilisateurs.

Dans les applications complexes, il est presque impossible d’avoir une confiance à 100 % qu’elle ne contiendra aucun bogue. Pour cette raison, vous devez mettre en place un processus pour trouver et supprimer autant de bogues que possible pendant le cycle de développement initial.

Avec une boîte à outils de test bien conçue, vous pouvez minimiser considérablement les chances que votre application se comporte de manière inattendue. La communauté open source a créé et mis à disposition de nombreux outils pour tester les différents aspects d’une application, que vous pouvez – et devez ! – les utiliser pour produire une pile de tests complète.

Dans cet article, nous avons passé en revue 10 outils qui vous aideront à atteindre vos objectifs pour tester le code PHP d’une extension WordPress.

Lequel de ces outils avez-vous utilisé pour votre dernier projet ? Faites-nous savoir ce que vous avez construit avec lui dans la section des commentaires ci-dessous !

Leonardo Losoviz

Leo writes about innovative web development trends, mostly concerning PHP, WordPress and GraphQL. You can find him at leoloso.com and twitter.com/losoviz.