其他分享
首页 > 其他分享> > Pytest-断言重写

Pytest-断言重写

作者:互联网

1 pytest.register_assert_rewrite-断言重写

pytest是使用普通的断言语句以及断言失败时表达式的详细内省,仅重写测试模块本身以及作为插件一部分的任何模块,任何其他导入的模块都不会被重写,并且会发生正常的断言行为。

换言之:如果你在其他模块中有断言,你需要启用断言重写,你需要pytest在导入之前明确要求重写这个模块。

注册一个或多个要在导入时重写的模块名称,此函数将确保此模块或程序包内的所有模块将重写其assert语句。

举个例子:

example.py里面含有assert断言

1 def func():
2     b = 1
3     assert b == 0

pytest项目 test_func.py 中要导入 example.py 模块中的函数

1 from example import func
2 
3 def test_func():
4     func()

此时运行 python -m pytest -v test_func.py 会产生如下结果,它将不会打印有关断言失败原因的调试信息(即b的值为1)

 注意:如果我将 func() 函数定义放在 test_func.py 文件中,则会得到预期的结果

 

 

看出两者的区别了吗?在于是否会打印有关断言失败原因的调试信息(即b的值为1)

 

解决方案:

可以使用 pytest.register_assert_rewrite 函数来为您的模块启用此功能,从模块导入函数之前,必须先调用register_assert_rewrite;可以将其放入conftest.py

1 #----conftest.py
2 import pytest
3 # 导入同级目录example.py
4 pytest.register_assert_rewrite("example")
5 # 导入其他包的模块
6 pytest.register_assert_rewrite("foo.example")

 

前面有个命令你会发现与平时的 pytest 执行命令不太一样, python -m pytest -v test_func.py ,如果你单纯使用命令 pytest -v test_func.py 执行时将会引发导入模块(找不到模块)的错误。

具体详情请看参考文章【3】

 

本文参考一下文章:

【1】用pytest描述导入函数中的失败断言语句

【2】Pytest权威教程-19插件编写

【3】pytest执行用例时返回异常ModuleNotFoundError: No module named ‘***‘

标签:func,断言,py,pytest,assert,Pytest,模块,重写
来源: https://www.cnblogs.com/sheehan-dali/p/16286964.html