私はクラスのセットでSeleniumテストを書いています。各クラスにはいくつかのテストが含まれています。現在、各クラスはFirefoxを開いてから閉じます。これには2つの影響があります。
エラー54はおそらくスリープを追加することで解決できますが、それでも非常に遅いでしょう。
だから、私がやりたいのはallテストクラス全体で同じFirefoxインスタンスを再利用することです。つまり、すべてのテストクラスの前にメソッドを実行し、すべてのテストクラスの後に別のメソッドを実行する必要があります。したがって、「setup_class」と「teardown_class」では不十分です。
セッションスコープの「自動使用」フィクスチャを使用することもできます。
# content of conftest.py or a tests file (e.g. in your tests or root directory)
@pytest.fixture(scope="session", autouse=True)
def do_something(request):
# prepare something ahead of all tests
request.addfinalizer(finalizer_function)
これはすべてのテストよりも先に実行されます。ファイナライザは、最後のテストが終了した後に呼び出されます。
hpk42 で提案されているようにセッションフィクスチャを使用することは、多くの場合優れたソリューションですが、フィクスチャはすべてのテストが収集された後にのみ実行されます。
さらに2つのソリューションがあります。
pytest_configure
または pytest_sessionstart
フックをconftest.py
ファイルに書き込みます。
# content of conftest.py
def pytest_configure(config):
"""
Allows plugins and conftest files to perform initial configuration.
This hook is called for every plugin and initial conftest
file after command line options have been parsed.
"""
def pytest_sessionstart(session):
"""
Called after the Session object has been created and
before performing collection and entering the run test loop.
"""
def pytest_sessionfinish(session, exitstatus):
"""
Called after whole test run finished, right before
returning the exit status to the system.
"""
def pytest_unconfigure(config):
"""
called before test process is exited.
"""
pytest_configure
およびpytest_unconfigure
フックを使用して pytestプラグイン を作成します。conftest.py
でプラグインを有効にします:
# content of conftest.py
pytest_plugins = [
'plugins.example_plugin',
]
# content of plugins/example_plugin.py
def pytest_configure(config):
pass
def pytest_unconfigure(config):
pass
バージョン2.10以降、フィクスチャを破棄し、そのスコープを定義するためのより明確な方法があります。したがって、次の構文を使用できます。
@pytest.fixture(scope="module", autouse=True)
def my_fixture():
print ('INITIALIZATION')
yield param
print ('TEAR DOWN')
autouseパラメーター:From documentation :
Autouseフィクスチャが他のスコープでどのように機能するかを次に示します。
autouseフィクスチャは、scope =キーワード引数に従います。autouseフィクスチャにscope = 'session'がある場合、それがどこで定義されているかに関係なく、1回だけ実行されます。 scope = 'class'は、クラスごとに1回実行されることを意味します。
自動使用フィクスチャがテストモジュールで定義されている場合、そのすべてのテスト機能が自動的に使用します。
autouseフィクスチャがconftest.pyファイルで定義されている場合、そのディレクトリの下にあるすべてのテストモジュールのすべてのテストがフィクスチャを呼び出します。
...
「リクエスト」パラメータ:「リクエスト」パラメータは、他の目的に使用することもできますが、目的には必要ありません。 ドキュメント から:
「フィクスチャ関数は、リクエストオブジェクトを受け入れて、「リクエストしている」テスト関数、クラス、またはモジュールコンテキストをイントロスペクトできます。」