0Pricing
Python Academy · Leçon

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 == expected

Paramè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 > 0

Identifiants 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) == result

Empiler 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=html

Lire 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, 88

Couverture 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 False

Combiner 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) == expected

Vé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

  1. Écrire vos premiers tests pytest
  2. Fixtures et préparation/nettoyage
  3. Paramétrage et couverture des tests
  4. Simulation avec unittest.mock
← Retour à Python Academy