私はいくつかのテストケースとテスト関数を持っています。そして、テストケースのリストは異なる関数で異なります。これはpytest.mark.parametrize
で簡単に行うことができます。余分に必要なのは、リソース(私の場合はファイル)をロードすることです。このファイルをテストセッションごとに一度だけロードしてキャッシュに入れたいと思います。pytest異なるケースのパラメータ化されたフィクスチャ
以下は、私が望むものを例示したものです。動作していますが、pytest fixturesや他のキャッシュメカニズムを使用して自分自身でキャッシュを行う必要がなく、各テスト関数にpars=load_file(pars)
行を持つ方法を見つけたいと思います。
誰かがpytestでこれを行う方法を説明できますか?
import pytest
case_1 = dict(label='case_1', spam=1)
case_2 = dict(label='case_2', spam=2)
case_3 = dict(label='case_3', spam=3)
_cache = {}
def load_file(pars):
if pars['label'] in _cache:
print('load_file from cache', pars)
return _cache[pars['label']]
else:
print('load_file loading', pars)
pars['file'] = pars['label'] + ' spam!'
_cache[pars['label']] = pars
return pars
@pytest.mark.parametrize('pars', [case_1, case_2])
def test_a(pars):
pars = load_file(pars)
print('test_a', pars)
@pytest.mark.parametrize('pars', [case_2, case_3])
def test_b(pars):
pars = load_file(pars)
print('test_b', pars)
@pytest.mark.parametrize('pars', [case1, case_2, case_3])
def test_c(pars):
pars = load_file(pars)
print('test_c', pars)
### more tests here for various combinations of test cases