• 10 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 25/04/2022

Ajoutez des tests avec Pytest

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Afin de pouvoir utiliser Pytest, vous devez au préalable l'installer. Pour cela, utilisez PyPI en exécutant la commande suivante dans le terminal :

pip install -U pytest

Vérifiez que Pytest est installé en tapant la commandepytest. Pytest va alors lancer tous les tests de notre projet.

Entrez la commande pytest sur le terminal pour vérifier l’installation de celui-ci.
Lancez vos tests !

Comme vous pouvez le voir, aucun test n'est lancé. C'est normal, nous n'en avons pas écrit pour le moment !

Avant de le faire, commençons par créer un fichier de teststest.py.

Écrivez un test avec Pytest

Afin de comprendre comment fonctionne Pytest, écrivons le code source ci-dessous dans un fichiersource.py:

def reverse_str(initial_string):
final_string = ''
index = len(initial_string)
while index > 0:
final_string += initial_string[index - 2]
index = index - 1
return final_string

Ici, nous avons défini une fonction qui, lorsqu'elle sera exécutée, renverra l’inverse de la chaîne de caractères passée en paramètre.

J'ai écrit ensuite une nouvelle fonction, dans le fichiertest.py, pour tester la fonctionreverse_str(initial_string).

Je commence en la nommanttest_should_reverse_stringcar il s'agit d'un test qui permettra de vérifier si la fonction renvoie bien l’inverse de la chaîne de caractères. À l'intérieur, j'utilise le mot-cléassert, puis un espace, et écris ce que je souhaite tester. Ainsi, si l’assertion n’est pas soulevée, le test passe 

Dans mon cas, je souhaite tester que le résultat de l'exécution de la fonctionreverse_str('abc') renvoie bien une valeur égale à la chaîne de caractères"cba".

from source import reverse_str
def test_should_reverse_string():
assert reverse_str('abc') == 'cba'

Testons ! Lancez la commande :pytest test.py.

Le test ne passe pas et Pytest nous indique l’erreur sur le terminal.
Un test qui ne passe pas

Mince, cela ne fonctionne pas ! Mais Pytest a la bonne idée de nous indiquer la ligne défaillante, ainsi que la différence entre ce qui a été renvoyé par la fonction et ce que nous attendions.

La fonction a renvoyébac,  alors que nous souhaitions obtenircba. Hum... 🤔

Allons vérifier de nouveau le code et voir si nous n’avons pas oublié une erreur.

En effet, j'ai fait une erreur à la ligne 5 ! Je m'empresse de la corriger.

def reverse_str(initial_string):
final_string = ''
index = len(initial_string)
while index > 0:
final_string += initial_string[index - 1] #Remplacer index - 2 par index - 1
index = index - 1
return final_string

Relançons les tests en entrant la commandepytest test.py

Suite à la correction, le test passe et Pytest l’indique sur le terminal.
Le test passe enfin !

Tout est vert, nos tests sont bien validés !

Voici un screencast qui résume l’ensemble des étapes que nous avons vues ci-dessus afin de mettre en place votre premier test à l’aide de Pytest :

Organisez les fichiers de tests dans un projet

Avant même de commencer à écrire l’ensemble des tests de votre projet, il est important d’organiser l’architecture de notre projet afin de séparer le code source et les tests. Néanmoins, il existe quelques méthodes qui permettent tout de même facilement de retrouver le code source associé aux tests.   

Vous pouvez tout d’abord créer une arborescence dédiée aux tests, cette méthode permettra de regrouper l’ensemble des tests de l’application au même endroit. 

Quelques bonnes pratiques :

  • Créer une arborescence de tests calquée sur le répertoire des fichiers sources.

  • Nommer les fichiers de tests avec le même nom que le fichier source précédé detest_.

Cette arborescence contient les fichiers de tests calqués sur l’arborescence du code source.
Arborescence de tests

Pytest va en effet lancer les tests de tous les fichiers qui commencent partest_ou qui finissent par_test. Avec cette méthode, vous pouvez simplement lancer la commandepytestpour lancer tous les tests de votre projet.  

Écrivez les premiers tests du projet

Nous allons maintenant écrire nos propres tests sur le projet Calculatrice !

Le premier test va vérifier que le comportement de la méthodeadditiondans la classeOperatorsest correct.

Voyons les différentes étapes !

Avant tout, nous devons créer un fichier de test dans l’arborescence de test que nous nommeronstest_operators.py. Ensuite, nous devons  importer le module  contenant le fichier source dans le fichier de test pour pouvoir en utiliser les différents éléments.

Pour cela, ajoutons la ligne d’importation suivante :

from calculate.operators import Operators

Écrivons maintenant le test associé. 

def test_should_make_multiple_addition():
sut = Operators()
operation = "5.5 + 10 + 30 + 13.7"
expected_value = 59.2
assert sut.addition(operation) == expected_value

 Vous pouvez maintenant lancer la commandepytestà la racine de votre projet pour vérifier si le test passe :

Le test est exécuté à l’aide de la commande pytest et le test passe.
Premier test du projet Calculatrice

Le test passe !

Je vous résume l’ensemble de ces étapes dans le screencast ci-dessous, vous pourrez suivre chacune de ces étapes pour mettre vous-même en place le premier test du projet.

À vous de jouer !

Vous allez devoir mettre en place l’ensemble des tests unitaires du projet super-calculatrice, qui permettent de vérifier la logique du code. Et nous souhaitons que vous implémentiez les tests en utilisant Pytest pour vous entraîner.

Votre mission :

  • Ajoutez un package de tests qui contiendra l’arborescence de tests.

  • Créez la suite de tests concernant le module view avec Pytest.

  • Créez la suite de tests concernant le module operators avec Pytest.

Retrouvez une proposition de correction sur GitHub !

En résumé

  • Il sera très utile d’organiser ses tests dans un répertoire dédié aux tests et en calquant l’arborescence du code source.

  • Pour implémenter un test, il faut définir une fonction commençant par le préfixetest_  ou terminant par le suffixe_test  .

  • Le mot-cléassertpermet de vérifier les éléments que nous souhaitons valider.

  • Lancez les tests d’un module de tests à l’aide de la commandepytest nom_du_module.py  .

Vous savez maintenant écrire des tests unitaires à l’aide du framework Pytest. Il est tout de même intéressant de connaître les particularités du framework Unittest. Ainsi, nous verrons dans le prochain chapitre comment mettre en place des tests unitaires à l’aide du framework Unittest.

Exemple de certificat de réussite
Exemple de certificat de réussite