Paramétrage et couverture des tests
Exécutez des tests avec plusieurs entrées grâce à @pytest.mark.parametrize.
Paramétrage et couverture des tests est une leçon Python Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Python Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Python Academy comprend 4 leçons au total.
@pytest.mark.parametrize
Exécutez le même test avec plusieurs entrées à l’aide de @pytest.mark.parametrize. Chaque tuple constitue un cas de test distinct.
import pytest
@pytest.mark.parametrize("a,b,expected", [
(1, 2, 3),
(0, 0, 0),
(-1, 1, 0),
(10, -5, 5),
])
def test_add(a, b, expected):
assert a + b == expectedParamètre unique
Pour un seul argument, transmettez directement une liste de valeurs.
import pytest
@pytest.mark.parametrize("n", [1, 2, 3, 4, 5])
def test_positive(n):
assert n > 0Identifiants de test nommés
Fournissez une liste ids pour étiqueter chaque ensemble de paramètres et obtenir une sortie plus claire.
import pytest
@pytest.mark.parametrize("value,result", [
(2, True),
(3, False),
], ids=["even", "odd"])
def test_is_even(value, result):
assert (value % 2 == 0) == resultEmpiler des décorateurs parametrize
Empilez deux décorateurs parametrize pour obtenir le produit cartésien des entrées.
import pytest
@pytest.mark.parametrize("x", [1, 2])
@pytest.mark.parametrize("y", [10, 20])
def test_product(x, y):
assert x * y > 0 # 4 test cases: (1,10),(1,20),(2,10),(2,20)pytest-cov : installation
Installez pytest-cov pour mesurer quelles lignes de votre code sont exécutées par les tests.
# pip install pytest-cov
# Basic usage:
# pytest --cov=mypackage
# HTML report:
# pytest --cov=mypackage --cov-report=htmlLire la sortie de couverture
La couverture indique quelles lignes, branches ou instructions n’ont pas été atteintes pendant les tests.
# Name Stmts Miss Cover
# ------- ----- ---- -----
# mypackage/utils.py 20 3 85%
#
# Missing: lines 45, 67, 88Couverture des branches
Utilisez --cov-branch pour vérifier si les deux branches des conditions sont testées.
# pytest --cov=mypackage --cov-branch
def is_positive(n):
if n > 0: # branch 1: True
return True
return False # branch 2: FalseÉchouer si la couverture est faible
Utilisez --cov-fail-under=N pour faire échouer la compilation si la couverture descend sous N pour cent.
# pytest --cov=mypackage --cov-fail-under=80
# FAIL Required test coverage of 80% not reached. Total: 72%Configuration de .coveragerc
Configurez les exclusions de couverture dans .coveragerc pour ignorer le code standard répétitif.
# .coveragerc
[run]
omit =
*/migrations/*
*/tests/*
setup.py
[report]
exclude_lines =
pragma: no cover
if TYPE_CHECKING:Ce que signifie une bonne couverture
Une couverture élevée ne garantit pas que les tests sont corrects. Visez des assertions pertinentes, et pas seulement l’exécution de lignes. Une couverture de 80 à 90 % est un objectif pratique pour la plupart des projets.
# A covered but useless test:
def test_nothing():
is_positive(5) # no assert — 100% coverage, zero confidence
# A meaningful test:
def test_positive():
assert is_positive(5) is True
assert is_positive(-1) is FalseCombiner parametrize et la couverture
Les tests paramétrés améliorent naturellement la couverture en exécutant plusieurs chemins de code avec une seule définition de test.
import pytest
@pytest.mark.parametrize("n,expected", [
(5, True), (-1, False), (0, False)
])
def test_is_positive(n, expected):
assert is_positive(n) == expectedVérification rapide
Que fait --cov-fail-under=90 lors d’une exécution de pytest ?
Récapitulatif
Utilisez @pytest.mark.parametrize pour tester proprement plusieurs entrées. Mesurez la couverture du code avec pytest-cov, suivez les branches avec --cov-branch et imposez des seuils minimaux avec --cov-fail-under.
Questions Fréquemment Posées
La leçon « Paramétrage et couverture des tests » est-elle gratuite ?
Oui — le texte complet de « Paramétrage et couverture des tests » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Python Academy, passe à CoddyKit PRO. Le cours Python Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Paramétrage et couverture des tests » ?
Exécutez des tests avec plusieurs entrées grâce à @pytest.mark.parametrize. Tu pratiques Python Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Python Academy ?
Aucune expérience préalable n'est requise. Python Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Paramétrage et couverture des tests » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Python Academy ?
Oui. Chaque leçon Python Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Écrire vos premiers tests pytest
- Fixtures et préparation/nettoyage
- Paramétrage et couverture des tests
- Simulation avec unittest.mock