Les sous-tests natifs

pytest 9.0 intègre un support natif des sous-tests via pytest.subTest(). Contrairement à @pytest.mark.parametrize, les sous-tests permettent de regrouper des vérifications multiples dans un même test tout en rapportant chaque échec individuellement.

Exemple pratique

python
import pytest


def test_conversions():
    cas = [
        ('km', 'miles', 1.0, 0.621),
        ('kg', 'lbs', 1.0, 2.205),
        ('C', 'F', 100.0, 212.0),
    ]
    for src, dst, valeur, attendu in cas:
        with pytest.subTest(src=src, dst=dst):
            resultat = convertir(src, dst, valeur)
            assert resultat == pytest.approx(attendu, rel=1e-2)


# Avantage vs parametrize :
# - Tous les sous-tests s'exécutent même si l'un échoue
# - Le rapport indique quel sous-test a échoué
# - Pas besoin de décorer la fonction

Sources