1

私はpy.testを初めて使用し、funargsを使用して、テストが実行される前にいくつかのテストデータを生成しています。pytest_generateフックにfuncargs値を使用させ、それをテスト関数に渡したいです。たとえば、データベースに特定の引数のセットを照会し、それに応じてユーザーの環境を設定する関数「do_something」があります。マルチサイト設定があることを考慮して、テストを実行する前に、データベースにテストの実行対象のエントリがあることを確認したいと思います。

def pytest_funcarg__data(request):
    # Ensure test data exist in the data base
    # Perform all the checks
    # Final values
    values = [['option1', 'option2', 'option3'],
              ['option1', 'option2'],
              ['option2', 'option3']]
    # Expected result 
    results = [['output1'],
               ['output2'],
               ['output3']]

    return (values, results)

def test_do_something(value, result):       
    assert do_something(value) == result

理想的には。値を繰り返し処理して、テスト関数に渡します。どうやってやるの?

現在私はこれを行っています:

def pytest_funcarg__data(request):
    #same as above

def pytest_funcarg__pass_data(request):
    data = request.getfuncargvalue("data")
    return (data[0][request.param],
                data[1][request.param])

def pytest_generate_tests(metafunc):
    if 'pass_data' in metafunc.funcargnames:
        # If number of test cases change the change needs to made here too
        metafunc.parametrize("pass_data", [0, 1, 2], indirect=True)

def test_do_something(pass_data):
    assert do_something(pass_data[0] == pass_data[1]

今、これは動作します。ただし、テストケースを追加するたびに、generate_testフックを更新する必要があります。私はこれを行うためのより簡単な方法があるかもしれないと思っていますか?

4

1 に答える 1