Outils pour utilisateurs

Outils du site


dev:python:flask:tests_unitaires_via_pytest

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
dev:python:flask:tests_unitaires_via_pytest [2025/07/22 16:36] yoanndev:python:flask:tests_unitaires_via_pytest [2025/07/27 14:56] (Version actuelle) yoann
Ligne 5: Ligne 5:
 ====== Flask : tests unitaires avec pytest ====== ====== Flask : tests unitaires avec pytest ======
  
 +Flask s'appuie sur le framework pytest pour créer et exécuter les tests.
  
 +===== Nomenclature =====
 +
 +Par défaut les tests sont regroupés dans le dossier ''./tests'' du projet. Les tests sont des fonctions dont le nom commence par ''test_'' regroupées dans des modules Python dont le nom commence également par ''test_''. Dans une approche POO, les tests peuvent également être regroupés dans des classes dont le nom commence par ''Test''.
 +
 +===== Les fixtures =====
 +
 +Le framework pytest propose le concept de **fixtures** pour désigner des éléments de code pouvant être réutilisés entre les tests. Ces fixtures permettent de définir un environnement constant et reproductible à l'intérieur duquel les tests peuvent s'exécuter.
 +
 +Dans sa forme la plus simple une fixture retourne une valeur, mais la fixture peut également se charger d'initialiser un contexte, produire une valeur (via yield) puis supprimer le contexte de travail une fois les tests terminés.
 +
 +On définit les fixtures dans le module ''tests/conftest.py''.
 +
 +<code python conftest.py>
 +# tests/conftest.py
 +
 +import pytest
 +from wsgi import create_app
 +from wsgi.configs import TestingConfig
 +
 +@pytest.fixture()
 +def app():
 +    app = create_app(custom_config=TestingConfig)
 +
 +    # other setup can go here
 +
 +    yield app
 +
 +    # clean up / reset resources here
 +
 +
 +@pytest.fixture()
 +def http_client(app):
 +    return app.test_client()
 +
 +
 +@pytest.fixture()
 +def cli_runner(app):
 +    return app.test_cli_runner()
 +</code>
 +
 +Dans cet exemple 3 fixtures sont crées ''app'', ''http_client'' et ''cli_runner''. Ces 3 fixtures vont pouvoir être passées en paramètre de chacun de nos tests.
 +
 +
 +Pour lancer la séquence de tests, on se place à la racine du projet :
 +<code bash>
 +python -m pytest
 +</code>
 +
 +===== Envoyer des requêtes grâce au client HTTP =====
 +
 +Grâce à la fixture ''http_client'' nous allons pouvoir envoyer une requête à notre application et observer le code de retour :
 +
 +<code python test_wsgi.py>
 +# tests/test_wsgi.py
 +
 +
 +def test_wsgi_about_page(http_client):
 +  """
 +  Vérifie que la page about est accessible
 +  """
 +  response = http_client.get("/about")
 +  assert response.status_code == 200
 +  assert b"<h1>A propos</h1>" in response.data
 +</code>
 +
 +Dans cet exemple le test permet de vérifier à la fois le code de retour de la requête HTTP ainsi que la présence d'une chaine de caractère attendue dans la page. 
  
 ===== Références ===== ===== Références =====
  
 +  * [[https://flask.palletsprojects.com/en/stable/testing/|Tester les applications Flask (documentation Flask)]]
   * https://ichi.pro/fr/comment-tester-les-applications-flask-192350830008348   * https://ichi.pro/fr/comment-tester-les-applications-flask-192350830008348
   * https://fr.wadaef.net/comment-tester-une-api-construite-avec-flask/   * https://fr.wadaef.net/comment-tester-une-api-construite-avec-flask/
dev/python/flask/tests_unitaires_via_pytest.1753202211.txt.gz · Dernière modification : 2025/07/22 16:36 de yoann