Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pytest描述导入函数中失败的断言语句_Python_Pytest - Fatal编程技术网

Python 使用pytest描述导入函数中失败的断言语句

Python 使用pytest描述导入函数中失败的断言语句,python,pytest,Python,Pytest,Pytest很好地打印失败的assert语句中的变量值(例如,示例) 但是,这不适用于导入函数中的断言失败 示例.py def func(): b = 1 assert b == 0 from example import func def test_func(): func() 测试函数py def func(): b = 1 assert b == 0 from example import func def test_func():

Pytest很好地打印失败的assert语句中的变量值(例如,示例)

但是,这不适用于导入函数中的断言失败

示例.py

def func():
    b = 1
    assert b == 0
from example import func

def test_func():
    func()
测试函数py

def func():
    b = 1
    assert b == 0
from example import func

def test_func():
    func()
运行
pytest\u 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 repo中打开Github问题吗

注意:如果我将函数定义放在相同的
test\u example.py中,我确实得到了预期的结果

    def func():
        b = 1
>       assert b == 0
E       assert 1 == 0

test_example.py:3: AssertionError

但在许多用例中,一个人无法做到这一点(例如,在某些包中断言失败),因此我的问题是

基本上,您需要请求详细的输出:

py.test-vvv

此外,您还可以指定详细程度:

logging.WARN,    # -v
logging.INFO,    # -vv
logging.DEBUG,   # -vvv
logging.TRACE,   # -vvvv
logging.GARBAGE  # -vvvvv
要获得更多自定义日志记录,您可以选中此功能,以便为您的模块启用此功能

在从模块导入函数之前,必须调用register\u assert\u rewrite,以便将其放置在conftest.py中

conftest.py

def func():
    b = 1
    assert b == 0
from example import func

def test_func():
    func()
导入pytest
pytest.register\u assert\u rewrite(“示例”)

链接到原始解决方案:

感谢您的回复。只是尝试了一下(使用Python3.6.4、pytest-3.3.2、Linux),它并没有改变这样一个事实:我只得到了一个
AssertionError
,没有其他细节。它应该可以工作,只是在本地测试它,并报告它失败的原因并显示
b
值。如果您还检查了文档是否正常工作:&谢谢您的检查。您将注意到,在这两个示例中,函数都是在同一个测试文件中定义的,并且不是从其他地方导入的。那很好。我更新了上面的问题。但在许多用例中,您无法做到这一点(例如,在某些包中断言失败),因此我的问题是……啊哈,我明白了,您是对的。example.py是否在PTYHONPATH目录中?您添加的内容断言b==0,“b不等于0”等等。它在当前文件夹中,所以是的。是的,这会起作用,但pytest的全部要点是应该为您生成异常消息。。。