4

Django プロジェクトの pytest を使用してセレンを実行し、フィクスチャのセットアップ/ティアダウンを実行しようとしています。

を使用してベストプラクティスに従おうとしましたyieldが、エラーが発生します。

--- ERROR at setup of test_browsing_check --- 
pytest.fixture functions cannot use ``yield``. Instead write and return an inner function/generator and let the consumer call and iterate over it.:

@pytest.fixture(scope="module")
def browser(request):
    selenium = webdriver.Firefox()
    selenium .implicitly_wait(3)
    yield selenium
    selenium.quit()

なぜそれが機能していないのか知っていますか?

その後、うまく機能する別のコードを使用しました

@pytest.fixture(scope="module")
def browser(request):
    selenium = webdriver.Firefox()
    selenium.implicitly_wait(3)
    def teardown():
        selenium.quit()
    request.addfinalizer(teardown)
    return selenium

ただし、この方法はお勧めしません。

このメソッドはまだ完全にサポートされていますが、2.10 以降では yield が推奨されています。これは、より単純で自然なコード フローをより適切に説明できると考えられているためです。

バージョンに関する注意:

$ python -V
$ Python 3.5.2 :: Anaconda 4.2.0 (64-bit)

$ django-admin version
$ 1.10.3

$ pip show pytest
$ Name: pytest
$ Version: 2.9.2
4

1 に答える 1