gpt4 book ai didi

pytest - 忽略测试中 fixture 的一些参数化

转载 作者:行者123 更新时间:2023-12-04 16:46:01 26 4
gpt4 key购买 nike

我有一个组件可以在两种不同的模式下与两个不同的数据库合作,根据使用的数据库和模式在功能上略有不同。我有一组测试,一般来说,应该为每个数据库/模式组合运行,但有一些测试只适用于 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 不对不受支持的组合运行测试的最佳方法是什么?

最佳答案

看起来为禁止组合提高测试跳过可以解决您的问题。例如。

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

关于pytest - 忽略测试中 fixture 的一些参数化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39534503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com