3

CSV ファイルを読み取る必要があり、各行の組み合わせごとにいくつかのメソッドを実行する必要があります。各行をテスト ケースとして表示したいと思います。行をパラメーターとして送信することは可能ですか? pytest はテスト ケースをパラメーター化しますか? その方法を教えてください。

擬似コードは次のとおりです。

class test_mytest:
  def test_rows:
    for row in csvreader:
       run_method(row)
       for onecol in row:
          run_method2(onecol)

ドキュメントを読んでみましpytestたが、明確ではありませんでした。

これは、行のgenerate_testsフックをパラメーターとして使用するために私が行っていることです。内側のforループ関数に対して同じことを行う方法を知りたいです-この内側のループもテストケースとして収集する必要があります

def pytest_generate_tests(metafunc):
    read_csvrows()
    for funcargs in metafunc.cls.params[metafunc.function.__name__]:
        # schedule a new test function run with applied **funcargs
        metafunc.addcall(funcargs=funcargs)

class TestClass:

    params = {
       'test_rows': rows,   
    }
    def test_rows:
        run_method(row)
        for onecol in row:
             test_method2(onecol)

ここで、test_method2 を呼び出す -for ループのレポートを生成する必要があります (これは、csv ファイルの各行の列にある要素のリストのパラメーター化されたメソッドです)。Pytest はそれらもテストケースとして収集する必要があります。

ご協力ありがとうございます。

4

1 に答える 1

7

ここで説明されているように、おそらくpytest_generate_tests()フックを使用することをお勧めします: https://docs.pytest.org/en/stable/parametrize.html#pytest-generate-tests これにより、csv ファイルを読み取り、ベースにしたいテストをパラメーター化できます。その内容について。

更新

更新された質問は完全には明確ではないようですが、列だけでなく行でも何かをテストする必要があると思います。これは単純に 2 つのテストを要求します。

def test_row(row):
    assert row  # or whatever

def test_column(col):
    assert col  # or whatever

あとは、フック用のパラメータ化されたフィクスチャを作成し、フックrowcol使用するだけです。pytest_generate_tests()したがって、conftest.pyファイルで:

def test_generate_tests(metafunc):
    rows = read_csvrows()
    if 'row' in metafunc.fixturenames:
        metafunc.parametrize('row', rows)
    if 'col' in metafunc.fixturenames:
        metafunc.parametrize('col', list(itertools.chain(*rows)))

metafunc.parametrize()非推奨の関数ではなく、推奨される関数の使用に注意してくださいmetafunc.addcall()

于 2014-02-21T13:09:54.427 に答える