joblib.Memory
を使用してテストを実行するときに、py.test
を使用して負荷の高い計算をキャッシュしています。私が使用しているコードは次のようになります、
from joblib import Memory
memory = Memory(cachedir='/tmp/')
@memory.cache
def expensive_function(x):
return x**2 # some computationally expensive operation here
def test_other_function():
input_ds = expensive_function(x=10)
## run some tests with input_ds
これは正常に動作します。これは tmpdir_factory
フィクスチャを使用してよりエレガントに実行できる可能性があることは承知していますが、それは重要ではありません。
私が抱えている問題は、すべてのテストが実行されたときにキャッシュされたファイルをクリーンアップする方法です。
すべてのテスト間でグローバル変数を共有することは可能ですか(キャッシュされたオブジェクトへのパスのリストなどが含まれます)?
私はその道を下りません。グローバルな変更可能な状態は、特にテストでは、回避するのが最善です。
すべてのテストが実行されたら(成功したかどうかにかかわらず)コマンドを呼び出すメカニズムがpy.testにありますか?
はい、自動使用のセッションスコープのフィクスチャをプロジェクトレベルに追加しますconftest.py
ファイル:
# conftest.py
import pytest
@pytest.yield_fixture(autouse=True, scope='session')
def test_suite_cleanup_thing():
# setup
yield
# teardown - put your command here
収量後のコードは、合格または不合格に関係なく、テストスイートの最後に1回実行されます。
すべてのテスト間でグローバル変数を共有することは可能ですか(キャッシュされたオブジェクトへのパスのリストなどが含まれます)?
実際には、いくつかの方法があり、それぞれ長所と短所があります。私はこれをSO回答でまとめるとかなりいいと思います- https://stackoverflow.com/a/22793013/3023841 -しかし、例えば:
def pytest_namespace():
return {'my_global_variable': 0}
def test_namespace(self):
assert pytest.my_global_variable == 0
すべてのテストが実行されたら(成功したかどうかにかかわらず)コマンドを呼び出すメカニズムがpy.testにありますか?
はい、py.testには teardown 関数が用意されています。
def setup_module(module):
""" setup any state specific to the execution of the given module."""
def teardown_module(module):
""" teardown any state that was previously setup with a setup_module
method.
"""