当我在fixture中使用yield时,yield值返回null

问题描述 投票:0回答:1

我被要求编写一个日志,在测试发生后显示错误,为此我使用了 conftest.py 文件中的固定装置。
我的代码:

pytest.fixture(autouse=True)
def log_during_fails(request):
    outcome = yield  
    result = outcome.get_result()

    if result.when == "call":
        if result. Failed == True:
            logging.info("test passed successfully")
        else:
            logging.info("trace:", result)

不幸的是,我收到错误:“AttributeError:'NoneType'对象没有属性'get_result'” 我尝试打印结果,然后我发现它包含值

None
,因此该函数无法在其上运行。

null pytest yield
1个回答
0
投票

您正在寻找的是conftest makereport 挂钩。这个钩子允许您捕获有关您运行的每个测试的数据。

有关 conftest 及其所有用法的更多信息,请参阅 pytest 文档:https://docs.pytest.org/en/6.2.x/fixture.html

此问题之前已在此网站上得到解答,但其外观如下:

conftest.py

import pytest
import logging


@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    report = yield
    result = report.get_result()

    if result.when == 'call':
        (filename, line, name) = item.location
        test = item.nodeid
        status_tag = result.outcome
        line = line
        duration = call.duration
        exception = call.excinfo
        if result.outcome == 'failed':
            logging.error(f"TEST: {test} {status_tag} on LINE: {line} with EXCEPTION: {exception} ---- DURATION: {duration}")
        else:
            logging.info(f"TEST: {test} PASSED")

每次测试后,此挂钩将运行并收集测试结果。然后 if/else 将决定测试是通过还是失败。

© www.soinside.com 2019 - 2024. All rights reserved.