Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Testing
Code

Programmation avec Yii2: Test automatisé avec codeception

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called How to Program With Yii2.
Programming With Yii2: Security
How to Program With Yii2: ActiveRecord

French (Français) translation by Soleil (you can also view the original English article)

Final product image
What You'll Be Creating

Si vous demandez, "Qu'est-ce que Yii?" Consultez mon tutoriel précédent, Introduction au framework Yii, qui passe en revue les avantages de Yii et comprend un aperçu des nouveautés de Yii 2.0, publiées en octobre 2014.

Dans cette série de programmation avec Yii2, je guide les lecteurs dans l'utilisation du framework Yii2 pour PHP. Dans ce tutoriel, je vais explorer les tests automatisés à l'aide de Codeception, intégré au framework de développement Yii2.

Certes, mon expérience en rédaction de tests avec mon code est rare. J'ai souvent fait partie de projets individuels ou de petits projets avec des ressources limitées. Pendant mon temps chez Microsoft, nous avions plusieurs équipes de test qui ont fait cela. Mais franchement, cela est probablement typique de vous aussi, non? Les programmeurs aiment coder, ils n'écrivent pas de tests - du moins les programmeurs de la vieille école ne l'ont pas fait.

Codeception est une bibliothèque innovante qui vise littéralement à rendre les tests d’écriture faciles et amusants. Et, je dirais qu'ils ont réussi dans une mesure raisonnable. Quand j'ai plongé mon pied dans l'eau de "Lake Codeception", c'était surtout facile et amusant. Cependant, alors que je commençais à aller plus loin, j'ai rencontré des problèmes de configuration avec Yii et les modules spécifiques utilisés dans cette série. Il y avait certainement des défis. Dans l’ensemble, cependant, je suis impressionné et vois les avantages d’apprendre davantage.

En résumé, Codeception et son intégration à Yii me donnent envie d'écrire plus de tests, une première pour moi. Je soupçonne que vous aurez une expérience similaire.

Un petit rappel avant de commencer, je participe aux commentaires ci-dessous. Je suis particulièrement intéressé si vous avez des idées supplémentaires ou si vous souhaitez suggérer des sujets pour de futurs tutoriels. Si vous avez une question ou une suggestion de sujet, veuillez poster ci-dessous. Vous pouvez également me joindre directement sur Twitter @reifman.

Commencer

Installer Codeception

Pour me guider, j'ai utilisé la documentation de Yii Testing Environment Setup. J'ai commencé avec une installation globale de la réception de code afin de pouvoir l'utiliser depuis n'importe quel projet.

Vous devez également exiger une codeception/spécifier:

Et codeception/vérifier:

Ensuite, il est utile de configurer un alias pour codecept en utilisant votre répertoire global composer

Cela définit l'alias:

Yii nécessite également l’installation de Faker, qui génère de fausses données de test pour votre application:

Configuration de la réception de code avec votre application

Codecept bootstrap initialise la réception de code pour votre application Yii, en créant divers fichiers de configuration permettant de créer et d'exécuter des tests sur votre application. Nous utilisons l'application Hello de cette série pour ce tutoriel. Voir le lien GitHub sur cette page pour obtenir le code.

Pour une raison quelconque, je me suis également retrouvé avec des répertoires de test en double dans hello/tests; il suffit de supprimer hello/tests/fonctionnel, hello/tests/acceptation et hello/tests/unit pour régler le problème. Tous les tests vivent dans hello/tests/codeception/*.

Les différents types d'essais

Codeception se concentre sur trois types de tests:

  1. Le test d'unité vérifie que des unités spécifiques fonctionnent, comme un test exhaustif de toutes les méthodes de votre modèle.
  2. Les tests fonctionnels vérifient les scénarios d'application courants comme si un utilisateur les agissait, mais en utilisant l'émulation de navigateur Web.
  3. Les tests d'acceptation sont identiques aux tests fonctionnels, mais ils sont exécutés via un navigateur Web.

Et il prend en charge trois types de formats de test pour votre code de test:

  1. Cept: c'est le fichier de test de scénario unique le plus simple
  2. Cest: un format orienté objet pour l'exécution de plusieurs tests dans un seul fichier
  3. Test: tests écrits sur PHPUnit, un framework de test PHP

Commençons par un exemple de tests d'acceptation utilisant le format cept:

Test d'acceptation

Nous allons d'abord utiliser l'exemple de test Welcome de Codeception.

Cela génère des tests/acceptation/WelcomeCept.php, que nous éditerons ci-dessous.

Comme les tests d'acceptation nécessitent le navigateur, nous devons modifier /tests/acceptance.suite.yml dans notre projet pour fournir notre URL de développement, http://localhost:8888/hello:

Nous sommes maintenant prêts à modifier le test initial dans le fichier tests/acceptance/WelcomeCept.php. J'écris un test qui charge la première page pour s'assurer qu'il fonctionne comme prévu.

Les tests de réception de code utilisent le concept d'acteur, dans ce cas, $I=new AcceptanceTester().

Voici comment cela décrit les acteurs dans la documentation de Codeception:

Nous avons un UnitTester, qui exécute des fonctions et teste le code. Nous avons également un FunctionalTester, un testeur qualifié, qui teste l'application dans son ensemble, avec une connaissance de ses composants internes. Et un AcceptanceTester, un utilisateur qui travaille avec notre application via une interface que nous fournissons.

Vous pouvez commenter vos tests avec du code, tel que $I->wantTo('perform a certain test') ou'ensure that the frontpage works'.

Dans mon test, je veux voir $I->see le texte 'Congratulations!' et 'Yii-powered':

Voici la page d'accueil actuelle de Hello:

Programming with Yii - The Hello Home Page

Ensuite, exécutons le test, simplement codecept run:

Comme vous pouvez le constater, notre test a réussi et le code permettant de vérifier cette fonctionnalité était assez lisible et simple.

Notes sur les tests par défaut de Yii

Pour aller plus loin, j'ai commencé à utiliser les tests par défaut de Yii. À ce stade, j'ai rencontré un certain nombre de problèmes de configuration, dus pour la plupart à mon utilisation du module yii2-user personnalisé de cette série. D'autres étaient dus à de petits bugs avec Yii, que son équipe a rapidement réagi et corrigé lorsqu'il a été rapporté sur GitHub; dans certains cas, les problèmes avaient été résolus dans les versions ultérieures de l'arborescence yii2-basic.

De plus, comme j'avais mis à jour l'arborescence yii2-basic pour cette série, je devais apporter de petites modifications à certains des tests par défaut.

Voici un exemple de résultat pour l'exécution des tests d'acceptation par défaut une fois que j'avais apporté quelques modifications mineures:

Test fonctionel

Pour que les tests fonctionnels fonctionnent, je devais exécuter une instance du serveur intégré de Yii. Je n'avais pas entendu parler de ce composant jusqu'à ce qu'Alex Markov de Yii en parle dans notre échange GitHub.

J'ai apporté de petites modifications aux tests fonctionnels dans /tests/codeception/functional, principalement pour rechercher mes chaînes de texte mises à jour spécifiques, c'est-à-dire "Identifiant ou mot de passe invalide" à la place de la valeur par défaut de Yii. Voici un aperçu de LoginCept.php:

Fondamentalement, le code accède au modèle LoginForm et teste ses différentes méthodes en utilisant Yii serve.

Voici le code de test /tests/codeception_pages/LoginPage.php dont il tire parti (je devais également le modifier pour les modifications apportées à la série):

Vous pouvez voir que nous codons l'acteur sur fillFields et click sur les boutons pour les champs de formulaire mis à jour.

Lors du dépannage de l'intégration de Codeception avec Yii, j'ai trouvé utile d'exécuter ces tests en mode prolixe:

Voici le résultat détaillé des tests fonctionnels de connexion: dans MacOS Terminal, PASSED et FAILED sont codés par une couleur rouge ou rose et inversés pour une meilleure visibilité:

Globalement, il y a un peu à apprendre à utiliser Codeception et à coder correctement vos tests. Mais les résultats sont impressionnants et utiles.

Tests unitaires

Fondamentalement, les tests unitaires sont des tests programmatiques de notre infrastructure et de nos modèles. Idéalement, nous rédigerions des tests pour chaque méthode et chaque variante d'utilisation de nos modèles.

Malheureusement, je n’ai pas pu faire fonctionner les tests unitaires dans notre arborescence à cause de petits bugs Yii qui n’ont pas encore été publiés ou de problèmes de configuration entre Codeception et yii2-user que nous avons intégrés à Comment programmer avec Yii2: Intégration de l’enregistrement utilisateur.

J'aborderai à nouveau les tests unitaires dans notre série Startup qui n'utilise pas yii2-user mais utilise plutôt l'intégration utilisateur intégrée de l'arborescence Yii Advanced.

Regardons quelques exemples de l'arbre Yii2-app-basic.

Test des emails du formulaire de contact

Hello/tests/codeception/unit/models/ContactFormTest.php teste l'envoi d'un courrier électronique par le biais d'une utilisation programmatique de modèles:

Je n'ai pas réussi à faire passer ce test à cause d'un petit bogue dans Yii qui n'a pas encore été mis à jour (ou au moins je n'ai pas trouvé le code mis à jour). Ma chute de la base de code Yii nommait le courrier électronique sortant avec les horodatages et le code ci-dessus cherchait un nom de fichier fixe. Ainsi, cela a toujours échoué. Néanmoins, il est utile de voir comment les tests programmatiques peuvent utiliser des modèles pour générer un fichier, puis rechercher ce fichier et valider son contenu pour vérifier que le code fonctionne.

Test de connexion

Regardons hello/tests/codeception/unit/models/LoginFormTest.php. Encore une fois, mon utilisation de yii2-user a rendu l’intégration trop difficile au moment de la rédaction de ce tutoriel; Cependant, nous pouvons examiner l’approche conceptuelle des fonctions de modèle d’utilisateur des tests unitaires.

Voici testLoginCorrect(), qui vérifie si la connexion réussit avec un mot de passe correct:

Il utilise le modèle LoginForm pour connecter l'utilisateur par programme, puis recherche par programme si l'utilisateur actuel de Yii n'est plus un invité.

Et après?

J'espère que vous avez apprécié l'apprentissage de Codeception et de son intégration à Yii, en dépit des obstacles que j'ai rencontrés. L'installation par défaut de yii2-basic aujourd'hui devrait mieux fonctionner.

Si vous souhaitez en savoir plus sur le choix du moment et des raisons du test, je vous recommande de lire la vue d'ensemble des tests de Yii. Il y a certainement plus à apprendre sur Codeception et à écrire des tests plus complets.

Surveillez les prochains tutoriels de notre série Programmation avec Yii2 pendant que nous continuons à explorer différents aspects du cadre. Si vous souhaitez savoir quand le prochain tutoriel Yii2 arrive, suivez-moi @reifman sur Twitter ou consultez ma page d'instructeur.

Vous voudrez peut-être aussi consulter notre série Construire votre démarrage avec PHP, qui utilise le modèle avancé de Yii2 pour créer une application réelle. En fait, vous pouvez essayer l'application de démarrage, Meeting Planner, aujourd'hui.

Liens connexes

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.