- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
- Formations
- conversion_path Parcours & Formations
- science Projets
- data_object Exercices de code
- psychology Exercices IA
- quiz Quiz
- Articles
- rss_feed Blog
- sort_by_alpha Glossaire
- menu_book Guides
- help_center FAQ
- media_link Ressources
- Communauté
- groups La communauté
- forum Questions
- live_tv Mentorats
- science Projets mensuels
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte person00:00:00 :Dans cette partie, on va voir comment éviter de répéter certaines lignes de code à l'intérieurde nos tests avec PyTest et ce qu'on appelle les fixtures. Avec Unitest, vous avez le même
00:00:10 :concept avec ce qu'on appelle le setup et le teardown. Je vous mets les noms ici comme çavous pouvez aller regarder de votre côté. Dans ce cas-ci, on va utiliser PyTest et donc ce qu'on
00:00:20 :appelle les fixtures. C'est un mot assez difficile à dire en français mais ces fixtures vont nouspermettre d'éviter de répéter certaines lignes de code dans les tests. Pour vous montrer tout ça,
00:00:30 :j'ai créé un exemple un peu plus complexe que ce qu'on a vu jusqu'à présent avec notre fonctionadd. Dans ce cas-ci, dans un fichier bank.py, j'ai créé une classe qui permet de représenter un
00:00:41 :compte en banque avec différents éléments. On a déjà un identifieur qui est tout simplementcréé avec une suite de lettres et de chiffres aléatoires grâce au module String qui me permetde récupérer toutes les lettres de l'alphabet et les nombres de 0 à 9 et ensuite avec le module
00:00:56 :Random, je crée un identifiant unique de 25 caractères. J'ai également donc une balancequi est définie ici avec un montant initial par défaut à 0 mais qu'on peut changer et deuxméthodes. Une méthode pour déposer de l'argent et une méthode pour retirer de l'argent qui nous
00:01:12 :empêche de retirer de l'argent si on n'a pas assez d'argent dans notre compte en banque en levantune erreur ValueError si c'est le cas. Donc un exemple assez basique mais vous allez voir qu'avec
00:01:21 :cet exemple on va créer des tests. Déjà c'est bien, on va avoir un exemple un peu plus complexede tests qui peuvent être faits pour vérifier cette classe et en même temps on va en profiterpour regarder ce concept de fixtures. Donc la première chose que je vais faire c'est utiliser
00:01:35 :dans ce cas-ci PyCharm pour générer automatiquement un fichier de test. Pour ça je vais aller dansles préférences de PyCharm et dans Tools je vais descendre dans Python Integrated Tools qui est unepréférence pour le projet actuel. Donc vous voyez ici For Current Project, c'est une préférence que
00:01:51 :vous pouvez changer pour chacun de vos projets. Par défaut vous voyez que le test runner qui estutilisé c'est Unitest et on a le choix en cliquant ici entre différentes bibliothèques. On a vu
00:02:02 :PyTest, Unitest, il y a aussi Nostest qui est très connu et Twisted Trial. Donc c'est les quatre quevous avez de disponibles. Par défaut il va être sur Unitest, nous dans ce cas-ci on va utiliser
00:02:12 :PyTest. Donc je vais cliquer là dessus et ça va permettre de signifier à PyCharm que quand on veutcréer des tests on va les créer avec PyTest et non pas avec Unitest. Donc je vais cliquer sur ma
00:02:22 :classe Account ici et faire un clic droit pour générer automatiquement les tests. Donc encliquant sur Generate ici et en sélectionnant Test dans la liste. Donc là il me propose quelques
00:02:32 :options. Le dossier dans lequel je veux mettre mes tests, donc là je vais le mettre à la racine.Test-bank c'est parfait. Je vais comme ça le différencier de mon fichier test.py que j'avais
00:02:42 :utilisé pour l'autre fichier. Dans ce cas-ci avec PyTest on n'a pas besoin de créer de classe. Doncici on peut laisser ça vide puisqu'on n'a pas besoin de classe pour nos tests et on va créerautomatiquement des tests pour ces trois fonctions qui sont définies dans la classe Account. Donc je
00:02:56 :valide en cliquant sur OK et là j'ai mes trois tests qui sont créés automatiquement dans lefichier test-bank.py. Donc pour l'instant les tests ne fonctionnent pas, on a un assert false sur
00:03:05 :chacun des tests. Donc je clique sur le terminal ici pour ouvrir un terminal et je vais lancer mestests avec PyTest, test-bank.py et on va afficher le verbose avec le tiré. Donc je lance l'exécution
00:03:18 :des tests. Là comme prévu on a les trois tests qui ne fonctionnent pas puisqu'on a tout simplementun assert false à chaque fois. Donc ce qu'on va faire c'est déjà importer notre classe. Donc on
00:03:27 :va faire from bank import account et on va créer un compte en banque pour chacun de nos tests. Doncon va créer une variable account qui va être égale à une instance de account et on va mettreun dépôt initial de 1000 euros dans le compte et dans cette fonction de test ici on va vérifier si
00:03:44 :la méthode deposit fonctionne correctement. Donc je vais faire un dépôt avec un montant de 1000et on va vérifier ici que la balance du compte est bien égale à 2000. Donc on a 1000 euros au départ,
00:03:56 :on dépose 1000 euros supplémentaires donc normalement la balance du compte est égaleà 2000. On va faire à peu près la même chose pour le withdraw. Donc ici on repart avec 1000,
00:04:05 :cette fois-ci on va utiliser donc withdraw et on va enlever 500 et on s'attend donc à ce que labalance soit égale à 500 euros. On part de 1000, on enlève 500 et ça nous retourne donc 500. Et
00:04:17 :on va avoir ici create identifier donc je vais reprendre cette ligne là et là vous commencezà voir qu'on recrée à chaque fois un compte en banque qui est similaire avec la même valeur àchaque fois et c'est pour éviter de répéter cette ligne de code ici qu'on va voir par la suite
00:04:30 :comment utiliser les fixtures. Donc dans ce cas-ci je vais juste vérifier l'identifiant. Donc je vaisfaire un premier test en vérifiant que la longueur de l'identifiant est bien égale à 25 et on peutfaire un deuxième test ici qui va vérifier que account.identifier est bien de type allNum. Donc
00:04:48 :allNum ça signifie qu'on n'a que des caractères alpha numériques. On va vérifier que donc çac'est bien true donc que allNum sur notre identifiaire retourne bien le boulet un true.
00:04:59 :Et là vous voyez qu'on a fait deux tests à l'intérieur de la même fonction de test doncon pourrait là encore séparer ça en deux fonctions pour que ce soit un peu plus clair. Donc là je
00:05:08 :vais vérifier par exemple lengthOfIdentifier on va laisser uniquement cette ligne ici et on vafaire un autre test qu'on va appeler ici isAllNum. Et donc je remets mon test et j'ai besoin là
00:05:20 :encore de récupérer l'instance de mon compte pour vérifier que l'identifiant est bien de typeallNum ici avec cette méthode. Donc là vous voyez qu'on a quatre tests qui normalement devraient
00:05:30 :tous passer mais qui répètent à chaque fois l'instantiation de notre classe Account. Donc jevais lancer les tests pour vérifier déjà que tout marche. Donc je relance les tests sur testbank.py
00:05:40 :et là on a bien les quatre tests qui passent correctement. Donc comment faire maintenant pourautomatiser la création de cette instance ? Pour ça on va donc utiliser ce qu'on appelle les
00:05:50 :fixtures. Donc on va déjà importer pytest et on va créer tout simplement une fonction qu'on vaappeler account et qui va nous retourner donc un account avec une balance initiale de 1000. Donc
00:06:03 :c'est exactement ce qu'on fait ici quand on crée une instance account. On le fait tout simplementici à l'intérieur d'une fonction et on va mettre un décorateur qui est pytest.fixtures donc comme
00:06:12 :ceci. On n'a pas besoin de mettre les parenthèses ici c'est juste un décorateur et on le met audessus de notre fonction account. Donc là c'est très important le nom qu'on a ici puisque c'est
00:06:22 :ce nom qu'on va utiliser à l'intérieur des parenthèses de chacun des tests en paramètrespour pouvoir utiliser ce qui est retourné par cette fixtures ici à l'intérieur de nos différentstests. Donc là je vais prendre le nom ici et je le colle à l'intérieur des parenthèses de chacun
00:06:37 :de mes tests et ça ça va me permettre du coup d'utiliser cette instance account donc qui vaêtre créée grâce à cette fonction à l'intérieur de chacun de mes tests. Donc là je peux supprimer
00:06:46 :à chaque fois l'instantiation de ma classe et vous voyez qu'aucune erreur n'est détectée puisqu'onpasse bien account ici et pytest va se charger automatiquement de passer l'instance qui estcréée dans ce fixtures à nos fonctions de test. Donc vraiment ici le point à retenir c'est déjà
00:07:03 :le décorateur ne pas oublier de le mettre et ensuite le nom de la fonction il faut vraimentque ce soit le même ici. L'importance des fixtures également c'est qu'on peut spécifier
00:07:12 :quelle fonction de test on a besoin et quelle fonction on n'en a pas besoin. Donc là je vaisdéjà vous montrer avec ça ce que ça donne on va lancer dans notre terminal les tests et làvous voyez que nos quatre tests fonctionnent de la même façon que tout à l'heure. Maintenant on
00:07:26 :pourrait avoir envie que certaines des fonctions de test n'utilisent pas ce compte par exemple surwithdraw ici je teste actuellement qu'on a 1000 de départ qu'on enlève 500 et que ça ne retourne500 mais à la place je pourrais vouloir tester le cas où on a une erreur donc par exemple si on
00:07:40 :avait un compte avec 200 et qu'on essaie d'enlever 500 là dans ce cas ci on aurait une erreurpuisque on ne peut pas enlever plus que ce qu'il y a dans notre compte en banque donc on aurait uneerreur de type value error. Donc là le problème c'est que si je change la valeur ici pour 200 dans
00:07:55 :mon fixtures et que je relance donc tous mes tests là nos tests ne fonctionnent plus puisquepar exemple pour le déposit on s'attendait à avoir 2000 mais maintenant ce n'est plus le caspuisque on part avec une balance initiale de 200 donc on devrait avoir 1200 donc là on pourrait
00:08:09 :se dire qu'il faut changer tous les tests etc non ce n'est pas la bonne façon de faire ce qu'ilfaut faire dans ce cas ci ce serait de laisser notre compte initial pour ce fixtures à 1000comme ça nos trois tests ici donc celui ci celui ci et celui ci continuent à fonctionner et à la
00:08:23 :place ce qu'on va faire c'est qu'on ne va pas utiliser deux fixtures donc le account pour letest sur le withdraw et on va le laisser pour le deposit donc on pourrait faire l'inverse onpourrait laisser le account dans le withdraw et modifier le deposit dans ce cas ci ce qu'on veut
00:08:36 :c'est tester l'erreur dans le cas où on essaie d'enlever plus d'argent que ce qu'on a donc onva laisser tout ça ici on va juste enlever le count là et on va dans ce cas ci créer une instancespécifique pour ce test donc on va faire un account qui est égal à un compte en banque avec une
00:08:51 :valeur de 200 et dans ce cas ci on va s'attendre donc à avoir une erreur donc on va faire withby test point raises value error et on va tester cette ligne de code donc ça c'est ce qui nouspermet de tester une erreur qui nous est retournée par une fonction donc dans ce cas ci withdraw et
00:09:08 :donc là dans ce cas ci notre test ici va fonctionner puisque on a un cas spécifique pour withdraw eton garde le même cas avec ce fixtures pour tous les autres tests donc je relance dans leterminal tous mes tests et là on a tous les tests qui passent correctement donc voilà comment créer
00:09:22 :ce qu'on appelle donc des fixtures qui nous permettent d'éviter la répétition de lignesde code c'est vraiment très utile très versatile également vous voyez que on peut spécifier quellefonction de test vont utiliser ce fixtures en utilisant le nom de la fonction en paramètre etdans le cas où on a une fonction qui n'a pas besoin d'utiliser ce fixtures précis il suffit
00:09:42 :de ne pas mettre le paramètre ici et de recréer un cas spécifique pour ce test donc on pourraitrefaire un test donc là on va mettre withdraw error ou on va mettre plutôt not enough money eton pourrait remettre donc un test withdraw normal qui lui va utiliser le fixtures account qui lui
00:10:01 :va utiliser notre fixtures ici et donc dans ce cas ci on aurait le même test que tout à l'heurec'est à dire qu'on va faire un account.withdraw avec un amount de 500 et on s'attendrait donc dans
00:10:12 :ce cas ci à avoir la balance qui est égale à 500 et là on va mettre on va laisser comme ça en faitdans ce cas ci on va laisser test withdraw quand même je vais bien l'écrire donc withdraw commececi voilà test withdraw pour ce test ici test withdraw not enough money et là normalement tous
00:10:31 :nos tests devraient passer correctement donc c'est le cas on a bien les cinq tests qui passentcelui avec l'erreur et avec notre compte personnalisé et celui sans l'erreur qui utilisele fixtures. Donc voilà pour cet exemple avec pytest avec un exemple un peu plus complexe on n'a
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.