在工作中,我们在选定的测试函数上使用装饰器@rollback
,它将回滚在该测试期间进行的任何数据库更改。
我最近开始使用pytest的依赖注入来处理一些用例,包括@pytest.mark.parametrize(...)
和pytest_funcarg__XXX
钩子。不幸的是,这与我们装饰的测试功能发生冲突。
我该如何做到这一点?
我的第一个想法是使用自定义标记,例如@pytest.mark.rollback
,并执行以下操作:
def rollback(meth):
"""Original rollback function"""
...
def pytest_runtest_setup(item):
if not isinstance(item, pytest.Function):
return
if hasattr(item.obj, 'rollback'):
item = rollback(item)
这样的方法能真正起作用吗?
答案 0 :(得分:0)
这样的事应该可以正常工作,是的。好像你正在使用全局状态来管理你的数据库,对吧?您可能想要查看即将发布的2.3版本的文档,该文档在本页后面还有一个“交易”示例:
http://pytest.org/dev/fixture.html
此版本现在随时可用,您可以使用“pip install -i http://pypi.testrun.org -U pytest”安装候选版本。