5

pytest では、パラメーターをテストに渡すことができます (フィクスチャまたはデコレータを使用@pytest.fixture(params=list-of-params))。

テストが完了すると、テストが失敗した場合、渡されたパラメーターが結果に表示されTestCheckoutPage.test_address_edit[True]ますFalse

これらのパラメーターにアクセスしてファイナライザーに追加するにはどうすればよいですか? request.paramフィクスチャを作成するときにパラメータを取得する方法ですが、機能していないようです:

@pytest.fixture(params=[True, False])
def user(request):
    return request.param

それはうまくいきます。しかし、それをテストに渡そうとすると:

class TestClass:
    def test_something(self, user):
        pass

次に、 autouse フィクスチャを使用して情報を収集します。

@pytest.fixture(autouse=True)
def set_driver(self, request):
    print request.param

にないというエラーがスローparamされFixtureRequestます。

そのパラメータを元に戻す方法はありますか? テストが失敗したときにSeleniumにスクリーンショットを撮らせようとしていますが、パラメーターを使用したテストは名前とクラス名とすべてが同じであるため、最初の実行用にファイルを書き込み、2回目、3回目、... 、時間の周り。したがって、これを回避するために、ファイル名にパラメーターを追加したいと思います。

ありがとう!

4

1 に答える 1

8

実際、request.paramパラメータ化が定義されているフィクスチャ関数でのみ使用できます。フィクスチャで必要な場合userは、これを試すことができます:set_driver

import pytest

@pytest.fixture(params=[True, False])
def user(request):
    return request.param

class TestHello:
    @pytest.fixture(autouse=True)
    def set_driver(self, user):
        print "set_driver sees", user

    def test_method(self):
        assert 0

実際にテストに関与している場合にのみset_driver何かをしたい場合は、次のようなことを行うことができます。user

import pytest

@pytest.fixture(params=[True, False], scope="module")
def user(request):
    return request.param

@pytest.fixture(autouse=True)
def set_driver(request):
    if "user" in request.fixturenames:
        user = request.getfuncargvalue("user")
        print "set_driver sees", user


def test_function(user):
    assert 0

def test_function_nouser():
    assert 0
于 2012-11-22T09:23:24.400 に答える