我使用Pytest 3.0(在Python 3.4下)对遗留应用程序进行集成测试。我已经为日志文件和ZeroMQ编写了夹具,因此在测试用例中的任何失败时,夹具都会打印出所有日志文件的内容以及所有ZeroMQ通信。
我通过在pytest_runtest_makereport()
中定义conftest.py
函数来使用in the documentation描述的模式。它工作正常,并在测试用例出现故障时打印日志文件和ZeroMQ通信的内容。
然而,对于我测试的应用程序的一些失败,唯一的输出是其中一个日志文件中的错误文本。因此,在每个测试用例之后,我需要扫描生成的日志文件中的单词" error"。
我从Run code before and after each test in py.test?了解到,在拆解期间未通过测试会引起争议,但我仍然设法使用pytest.fail()
来做到这一点。 Pytest将结果报告为ERROR。
问题是当我从拆解中未通过测试时,我的附加报告(日志文件和ZeroMQ)不会显示。任何想法如何解决这个问题?有没有比在拆解期间测试失败更好的方法?我想避免调用某些函数来检查每个测试用例中的日志文件。
我的夹具看起来像:
@pytest.fixture()
def experimental_fix(request):
print("**** SETUP ****")
yield
print("**** TEARDOWN ****")
setup_report = request.node.rep_setup
if setup_report.outcome == "passed":
# Actually, read logfile contents here
call_report = request.node.rep_call
call_report.sections.append(('Logfiles', 'LOGFILE CONTENTS GOES HERE'))
if True: # Actually, do checking of logfile contents
pytest.fail("Illegal word found in logfile. See printout.")
# I have also tried these:
# raise ValueError("Illegal word found in logfile. See printout.")
# assert 0, "Illegal word found in logfile. See printout."
虚拟测试用例:
def test_fail_and_add_report(experimental_fix):
print("AAA")
#1/0