Python 如何在测试失败后仍能添加报告内容?

Python 如何在测试失败后仍能添加报告内容?,python,pytest,Python,Pytest,我使用Pytest 3.0(在Python 3.4下)对遗留应用程序进行集成测试。我已经为日志文件和ZeroMQ编写了fixture,因此在测试用例中出现任何故障时,fixture都会打印出所有日志文件的内容以及所有ZeroMQ通信 我使用的模式是通过在conftest.py中定义pytest\u runtest\u makereport()函数来描述的。它工作正常,并且在测试用例中出现故障时打印日志文件和ZeroMQ通信的内容 然而,对于我正在测试的应用程序的一些失败,唯一的输出是其中一个日志

我使用Pytest 3.0(在Python 3.4下)对遗留应用程序进行集成测试。我已经为日志文件和ZeroMQ编写了fixture,因此在测试用例中出现任何故障时,fixture都会打印出所有日志文件的内容以及所有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。如果你懒得布置每一个测试,你可以通过编程来完成。在你链接的同一个问题的答案中解释了这一点: