python 在pytest中显示已通过测试的详尽信息

hgncfbus  于 2023-03-11  发布在  Python
关注(0)|答案(4)|浏览(163)

当测试失败时,会有一个输出指示测试的上下文,例如:

=================================== FAILURES ===================================
______________________________ Test.test_sum_even ______________________________

numbers = [2, 4, 6]

    @staticmethod
    def test_sum_even(numbers):
        assert sum(numbers) % 2 == 0
>       assert False
E       assert False

test_preprocessing.py:52: AssertionError

如果我也想对通过的测试做同样的事情呢?这样我就可以快速检查传递给测试的参数是否正确?
我尝试了命令行选项行--full-trace-l--tb long-rpP,但都不起作用。
你知道吗?

drnojrws

drnojrws1#

执行带有--verbose标志的pytest将导致它在执行时列出每个测试的完全限定名称,例如:

tests/dsl/test_ancestor.py::TestAncestor::test_finds_ancestor_nodes
tests/dsl/test_and.py::TestAnd::test_aliased_as_ampersand
tests/dsl/test_and.py::TestAnd::test_finds_all_nodes_in_both_expressions
tests/dsl/test_anywhere.py::TestAnywhere::test_finds_all_nodes_when_no_arguments_given_regardless_of_the_context
tests/dsl/test_anywhere.py::TestAnywhere::test_finds_multiple_kinds_of_nodes_regardless_of_the_context
tests/dsl/test_anywhere.py::TestAnywhere::test_finds_nodes_regardless_of_the_context
tests/dsl/test_axis.py::TestAxis::test_finds_nodes_given_the_xpath_axis
tests/dsl/test_axis.py::TestAxis::test_finds_nodes_given_the_xpath_axis_without_a_specific_tag
tyu7yeag

tyu7yeag2#

如果您只是要求通过的测试用例的标准输出,则需要将-s选项传递给pytest以防止捕获标准输出。有关标准输出抑制的详细信息,请参阅pytest docs

368yc8dk

368yc8dk3#

pytest没有这个功能,它所做的是在Assert失败时向您显示来自异常的错误。
一个解决方法是使用python的logging模块显式地包含您希望从通过的测试中看到的信息,然后使用pytest中的caplog fixture。
例如,func.py的一个版本可以是:

import logging

logging.basicConfig(level=logging.DEBUG)
log = logging.getLogger('my-even-logger')

def is_even(numbers):
    res = sum(numbers) % 2 == 0
    if res is True:
        log.warning('Sum is Even')
    else:
        log.warning('Sum is Odd')

#... do stuff ...

然后是test_func.py

import logging
import pytest
from func import is_even

@pytest.fixture
def my_list():
    numbers = [2, 4, 6]
    return numbers
 
def test_is_even(caplog, my_list):
    with caplog.at_level(logging.DEBUG, logger='my-even-logger'):
        is_even(my_list)
    assert 'Even' in caplog.text

如果您运行pytest -s test_even.py并且测试通过,则记录器将显示以下消息:
test_even.py WARNING:my-sum-logger:Sum is Even

brgchamk

brgchamk4#

简单溶液
我刚在测试结束时引发了一个异常

def test_server_run():
    print("ok")
    assert True
    raise Exception()

相关问题