我有一个组件可以与两个不同的数据库配合,并且在两种不同的模式下,功能上的细微差别取决于使用哪种数据库和哪种模式。我有一系列的测试,一般来说,应该为数据库/模式的每个组合运行,但有一些测试仅适用于4种组合中的3种。
我的集成测试建模如下:我有参数化的灯具,提供数据库连接和在给定模式下初始化的组件。然后,对于每种组合,每次测试都会自然运行:
import pytest
class TestMyComponent(object):
@pytest.fixture(autouse=True, params=['sqlite', 'postgresql'])
def database(self, request):
if request.param == 'sqlite':
return 'Opened in-memory sqlite connection'
else:
return 'Opened postgresql connection'
@pytest.fixture(autouse=True, params=['live', 'batch'])
def component(self, request):
if request.param == 'live':
return 'Component initialized in a live mode'
else:
return 'Component initialized in a batch mode'
def test_empty_db_has_no_items(self):
assert True # all four tests pass
def test_stream_new_items(self, database, mode):
# we don't want to test streaming with sqlite and live mode
assert 'postgresql' in database or 'batch' in mode
让py.test不为不支持的组合运行测试的最佳方法是什么?
答案 0 :(得分:1)
看起来为禁用组合提高测试跳过可以解决您的问题。 E.g。
def test_stream_new_items(self, database, mode):
# we don't want to test streaming with sqlite and live mode
if 'sqlite' in database and 'live' in mode:
pytest.skip("streaming with sqlite and live mode is not supported"
assert 'postgresql' in database or 'batch' in mode