Did you ever think that most of your test functions were actually the same test code, but with different data inputs and expected results/exceptions ? `pytest-cases` leverages `pytest` and its great `@pytest.mark.parametrize` decorator, so that you can separate your test cases from your test functions. In addition, `pytest-cases` provides several useful goodies to empower `pytest`. In particular it improves the fixture mechanism to support "fixture unions". This is a major change in the internal `pytest` engine, unlocking many possibilities such as using fixture references as parameter values in a test function.