pytest:无需重命名文件或函数即可在报告中添加测试描述(长测试名称)的最佳方法

Lav*_*ham 4 python pytest

默认情况下,pytest 在 pytest 报告中使用测试函数名称或测试文件名称

有没有最好的方法在报告中添加测试描述(长测试名称)而不使用 pytest 重命名文件或函数?

我们可以通过在运行时更新测试用例名称来做到这一点吗?

  1. 请求节点名
request.node.name = "Very Very Very Very Very long long long long name name name name"
Run Code Online (Sandbox Code Playgroud)
  1. 测试名称后的描述
def test_ok():
"""Very Very Very Very Very long long long long name name name name"""
    print("ok")
Run Code Online (Sandbox Code Playgroud)

the*_*man 6

使用pytest_runtest_makereporthook,可以为每个测试调整报告的名称。(注意钩子必须放在插件中,或者一个conftest.py

# conftest.py

import pytest

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

    test_fn = item.obj
    docstring = getattr(test_fn, '__doc__')
    if docstring:
        report.nodeid = docstring


# test_it.py

def test_ok():
    """Very Very Very Very Very long long long long name name name name"""
    print("ok")
Run Code Online (Sandbox Code Playgroud)

这将产生类似于以下内容的输出:

tests/test_stuff.py::test_ok 
Very Very Very Very Very long long long long name name name name <- tests/test_stuff.py PASSED [100%]
Run Code Online (Sandbox Code Playgroud)

有关和业务的更多信息,请参阅“hookwrapper:在其他钩子周围执行”outcome = yieldoutcome.get_result()