Python 如何在测试失败后仍能添加报告内容?
我使用Pytest 3.0(在Python 3.4下)对遗留应用程序进行集成测试。我已经为日志文件和ZeroMQ编写了fixture,因此在测试用例中出现任何故障时,fixture都会打印出所有日志文件的内容以及所有ZeroMQ通信 我使用的模式是通过在Python 如何在测试失败后仍能添加报告内容?,python,pytest,Python,Pytest,我使用Pytest 3.0(在Python 3.4下)对遗留应用程序进行集成测试。我已经为日志文件和ZeroMQ编写了fixture,因此在测试用例中出现任何故障时,fixture都会打印出所有日志文件的内容以及所有ZeroMQ通信 我使用的模式是通过在conftest.py中定义pytest\u runtest\u makereport()函数来描述的。它工作正常,并且在测试用例中出现故障时打印日志文件和ZeroMQ通信的内容 然而,对于我正在测试的应用程序的一些失败,唯一的输出是其中一个日志
conftest.py
中定义pytest\u runtest\u makereport()
函数来描述的。它工作正常,并且在测试用例中出现故障时打印日志文件和ZeroMQ通信的内容
然而,对于我正在测试的应用程序的一些失败,唯一的输出是其中一个日志文件中的错误文本。因此,在每个测试用例之后,我需要扫描生成的日志文件以查找“error”一词
据我所知,在拆卸过程中测试失败是有争议的,但我还是使用pytest.fail()
成功地做到了这一点。Pytest将结果报告为错误
问题是,当我从拆卸测试失败时,我的附加报告(日志文件和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
如果你知道你不应该这么做,那你为什么还要黑进去呢?如果您需要在测试中验证某些内容,请在测试中进行验证。“我希望避免调用某些函数来检查每个测试用例中的日志文件”-为什么?如果这是测试的一部分,调用函数。现在你知道为什么它“有争议”。这不是对你的问题的回答,但分解重复断言的正确方法是使用decorator。如果你懒得布置每一个测试,你可以通过编程来完成。在你链接的同一个问题的答案中解释了这一点: