Pytest で parametrize を複数のテストで使う2023年04月06日 11時28分08秒

pytest でparametrize を用いて、複数のテスト入力を提供できる。これ自体はとても便利。だが、少し慣れてくると、同じ parametrize の値を使いたくなる。例えば、単体テストとシステムテストで同じ入力と結果を使いたい等、結構ある。

これは、テストクラスを実装し、クラスに parametrize を渡す事により実装できる。各テスト関数は、各々で parametrize を受け取らなければ行けないが、それを若干省略出来る書式もある。How to share parametrized arguments across multiple test functions?を参照のこと。

import pytest


@pytest.mark.parametrize('arg1', [0, 1])
@pytest.mark.parametrize('arg2', [2, 3])
class TestParametrized:

    @pytest.mark.parametrize('arg3', ['a', 'b'])
    def test_A(self, arg1, arg2, arg3):
        pass

    @pytest.mark.parametrize('arg4', 'c', 'd'])
    def test_B(self, arg1, arg2, arg4):
        pass