web-dev-qa-db-ja.com

pytestで単一のテストをパラメータ化して実行する

パラメータ化で構成されたセットから単一のテストを実行するにはどうすればよいですか?次のテスト方法があるとしましょう。

@pytest.mark.parametrize(PARAMETERS_LIST, PARAMETERS_VALUES)
def test_my_feature(self, param1, param2, param3):
    """
    test doc
    """
    if param1 == 'value':
        assert True
    else:
        print 'not value'
        assert False

3つのパラメーターがあり、関数をテストするために、それらの15の異なる可能な値のリストを生成します。

そのうちの1つだけを実行するにはどうすればよいですか?明白な方法を除いて-15の代わりに単一の値を与える。

13
Avishay Cohen

文字列式に一致するテストをフィルタリングするために-kフラグを使用することにより、 実行するテストを指定 できます。パラメータ化を使用する場合、pytestは各テストケースに次の規則で名前を付けます。

test_name ['-'分離されたテスト入力]

例えば

test_name[First_test_value-Second_test_value-N_test_value]

実行する特定のテストを選択するには、たとえば上記のすべてをまとめる必要があります。

pytest -k my_test[value_1-value_2]
12
Enrique Saez

私は2つの可能な解決策を考えることができます。

  1. 実行するテストの名前を使用して実行します
  2. -kパラメーターを使用して、特定の部分文字列式に一致するテストを実行します

解決策1

次のコマンドを使用して、テストを実行せずにテストの名前を確認します。

pytest --collect-only -q

実行するテストの名前を使用します。たとえば、テストの名前がtest_file_name.py::test_name[value1-value2-value3]であるとすると、次のコマンドを使用して実行します。

pytest test_file_name.py::test_name[value1-value2-value3]

解決策2

このソリューションはEnriqueSaezによって提供されており、基本的にテスト名の一部に合格することで構成されています。

pytest -k -value3]
3
lmiguelvargasf