忽略测试中夹具的一些参数化

时间:2016-09-16 14:55:46

标签: pytest

我有一个组件可以与两个不同的数据库配合,并且在两种不同的模式下,功能上的细微差别取决于使用哪种数据库和哪种模式。我有一系列的测试,一般来说,应该为数据库/模式的每个组合运行,但有一些测试仅适用于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不为不支持的组合运行测试的最佳方法是什么?

1 个答案:

答案 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