Pytest很好地在失败的断言语句中打印变量的值(例如示例here)。
但是,这不适用于导入函数中的断言失败,
example.py
def func():
b = 1
assert b == 0
test_func.py
from example import func
def test_func():
func()
运行pytest test_example.py
将产生,
def test_func():
> func()
test_example.py:4:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
def func():
b = 1
> assert b == 0
E AssertionError
example.py:4: AssertionError
换句话说,它不会打印有关该断言失败原因的调试信息(即b的值为1)。
有解决方法吗?我应该在Pytest回购中打开Github问题吗?
注意:如果我将函数定义放在同一个test_example.py
中,我会得到预期的结果,
def func():
b = 1
> assert b == 0
E assert 1 == 0
test_example.py:3: AssertionError
但在许多用例中,一个人不能这样做(例如断言在某些包中失败),因此我的问题......
答案 0 :(得分:1)
您可以使用pytest.register_assert_rewrite功能为您的模块启用此功能。
从模块导入函数之前,必须先调用register_assert_rewrite,以便可以将其放入conftest.py。
conftest.py
import pytest
pytest.register_assert_rewrite("example")
答案 1 :(得分:0)
以基本方式,您需要询问详细输出:
py.test -vvvv
此外,您可以指定详细程度:
logging.WARN, # -v
logging.INFO, # -vv
logging.DEBUG, # -vvv
logging.TRACE, # -vvvv
logging.GARBAGE # -vvvvv
如需更多自定义日志记录,您可以查看pytest docs