Native Subtests

pytest 9.0 adds native subtest support via pytest.subTest(). Unlike @pytest.mark.parametrize, subtests let you group multiple checks within a single test while reporting each failure individually.

Practical Example

python
import pytest


def test_conversions():
    cases = [
        ('km', 'miles', 1.0, 0.621),
        ('kg', 'lbs', 1.0, 2.205),
        ('C', 'F', 100.0, 212.0),
    ]
    for src, dst, value, expected in cases:
        with pytest.subTest(src=src, dst=dst):
            result = convert(src, dst, value)
            assert result == pytest.approx(expected, rel=1e-2)


# Advantage vs parametrize:
# - All subtests run even if one fails
# - Report shows which subtest failed
# - No decorator needed

Sources