我試圖在聲明發生時以及在調用任何清理代碼之前捕獲儘可能多的信息。 下面是大多數現有的測試看起來像一個簡化代碼:如何在聲明中調用方法
在我conftest.py:
import pytest
from datetime import datetime
def pytest_runtest_makereport(item, call):
print('%s: pytest_runtest_makereport(%s)' % (datetime.now(), call))
def pytest_exception_interact(node, call, report):
print('\n%s: pytest_exception_interact' % datetime.now())
在我的測試文件:
import pytest
from datetime import datetime
@pytest.fixture(scope='function')
def marshall_me():
print('\n%s: starting test' % datetime.now())
yield marshall_me
print('\n%s: ending test' % datetime.now())
class Device(object):
def __enter__(self):
print('\n%s: create object' % datetime.now())
return self
def __exit__(self, type, value, traceback):
print('\n%s: clean-up object' % datetime.now())
def test_fails(marshall_me):
with Device():
assert False
當我運行此我得到:
test_fails.py::test_fails 2017-04-26 17:07:37.447359: starting test
2017-04-26 17:07:37.447453: pytest_runtest_makereport(<CallInfowhen='setup' result: []>)
2017-04-26 17:07:37.447583: create object
2017-04-26 17:07:37.448397: clean-up object
2017-04-26 17:07:37.448614: pytest_runtest_makereport(<CallInfowhen='call' exception: assert False>)
FAILED
2017-04-26 17:07:37.462267: pytest_exception_interact
2017-04-26 17:07:37.462353: ending test
2017-04-26 17:07:37.462428: pytest_runtest_makereport(<CallInfo when='teardown' result: []>)
我不能使用pytest_runtest_makereport和pytest_exception_interac因爲他們在清理完成後會被打電話給我,這對我來說很難收集到重要的信息。是否還有其他類似的函數在斷言實際生成時被調用?
您的第二個替代方案適用於我作爲我們現有測試的批發解決方案。我明白,這不是應該如何做的事情,如果我從頭開始,肯定會有更優雅的解決方案來使用。謝謝。 –