Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| dev:python:flask:tests_unitaires_via_pytest [2025/07/22 16:36] – yoann | dev: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' | ||
| + | ===== Nomenclature ===== | ||
| + | |||
| + | Par défaut les tests sont regroupés dans le dossier '' | ||
| + | |||
| + | ===== 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' | ||
| + | |||
| + | Dans sa forme la plus simple une fixture retourne une valeur, mais la fixture peut également se charger d' | ||
| + | |||
| + | On définit les fixtures dans le module '' | ||
| + | |||
| + | <code python conftest.py> | ||
| + | # tests/ | ||
| + | |||
| + | 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() | ||
| + | </ | ||
| + | |||
| + | Dans cet exemple 3 fixtures sont crées '' | ||
| + | |||
| + | |||
| + | Pour lancer la séquence de tests, on se place à la racine du projet : | ||
| + | <code bash> | ||
| + | python -m pytest | ||
| + | </ | ||
| + | |||
| + | ===== Envoyer des requêtes grâce au client HTTP ===== | ||
| + | |||
| + | Grâce à la fixture '' | ||
| + | |||
| + | <code python test_wsgi.py> | ||
| + | # tests/ | ||
| + | |||
| + | |||
| + | def test_wsgi_about_page(http_client): | ||
| + | """ | ||
| + | Vérifie que la page about est accessible | ||
| + | """ | ||
| + | response = http_client.get("/ | ||
| + | assert response.status_code == 200 | ||
| + | assert b"< | ||
| + | </ | ||
| + | |||
| + | 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:// | ||
| * https:// | * https:// | ||
| * https:// | * https:// | ||