如何解决根据使用的灯具添加pytest标记进行测试
我正在寻找一种使用标记来标记pytest测试的方法,具体取决于该测试使用的夹具。
我想用它根据他们使用的功能过滤测试。例如:使用“数据库连接”夹具的测试应自动标记为“数据库”。这样,我可以根据是否有数据库凭据来包括或排除所有这些测试。
这是我目前拥有的:
def pytest_configure(config):
"""Register hook to extend the list of available markers."""
config.addinivalue_line("markers","database: mark test that need a database connection.")
def pytest_collection_modifyitems(config,items): # pylint: disable=unused-argument
"""Register hook to map used fixtures to markers."""
for item in items:
if "database_connection" in item.fixturenames:
database_marker = pytest.mark.database()
item.add_marker(database_marker)
@pytest.fixture
def database_connection():
"""Fixture providing a database connection."""
这只是我想要的方式,但是我不喜欢必须保持从夹具到从夹具本身分离的标记的映射。我想做的是用应该在使用它们的所有测试上设置的标记来装饰灯具。它应该看起来像这样:
def pytest_configure(config):
"""Register hook to extend the list of available markers."""
config.addinivalue_line("markers",items): # pylint: disable=unused-argument
"""Register hook to map used fixtures to markers."""
for item in items:
for fixture in item.fixtures:
item.add_markers(fixture.markers)
@pytest.fixture(markers=["database"])
def database_connection():
"""Fixture providing a database connection."""
我当然可以构建一个将映射存储在全局变量中的装饰器:
_fixture_marker_map = {}
def set_markers(*markers):
def decorator_set_markers(func):
_fixture_marker_map[func.__name__] = markers
@functools.wraps(func)
def wrapper_set_markers(*args,**kwargs):
return func(*args,**kwargs)
return wrapper_set_markers
return decorator_set_markers
@set_markers("database")
@pytest.fixture
def database_connection():
"""Fixture providing a database connection."""
但是,这感觉有些古怪。我很确定这不是一个奇怪的用例,并且可能已经有一些pytest功能可以满足我的需求。
有人知道如何以简单的方式实现这一点吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。