【pytest官方文档】解读Skipping test functions,跳过测试用例详解 (2)

运行下test_module2.py:

test_module2.py [100%] ======================== 1 passed, 1 skipped in 0.08s =========================s Skipped: 版本4.0以下就跳过执行 . Process finished with exit code 0 四、跳过类或模块下的所有测试函数 1. 跳过类下的所有测试函数

如果把skipif放在类上,这个类下面的所有测试函数都会跳过。

import pytest import sys version_judge = pytest.mark.skipif( sys.version_info < (4, 0), reason="版本4.0以下就跳过执行" ) @version_judge class TestDemo(): def test_the_unknown2(self): ... def test_the_unknown3(self): ... def test_the_unknown1(): ... if __name__ == "__main__": pytest.main(["-s", '-r' "test_module1.py"])

运行结果,类TestDemo下的2个测试方法都会被跳过。

test_module1.py [100%] ======================== 1 passed, 2 skipped in 0.09s =========================s Skipped: 版本4.0以下就跳过执行 s Skipped: 版本4.0以下就跳过执行 . Process finished with exit code 0 2.跳过模块下的所有测试函数

如果想跳过模块的所有测试函数,可以使用全局变量pytestmark:

import pytest import sys pytestmark = pytest.mark.skipif(sys.version_info < (4, 0), reason="版本4.0以下就跳过执行") class TestDemo(): def test_the_unknown2(self): ... def test_the_unknown3(self): ... def test_the_unknown1(): ... if __name__ == "__main__": pytest.main(["-s", '-r' "test_module1.py"])

运行,模块下的3个测试都会被跳过

test_module1.py [100%] ============================= 3 skipped in 0.02s ==============================s Skipped: 版本4.0以下就跳过执行 s Skipped: 版本4.0以下就跳过执行 s Skipped: 版本4.0以下就跳过执行 Process finished with exit code 0

另外,如果多个skipif装饰器应用于同一个测试函数,只要任何一个条件为真,该函数将被跳过。

五、跳过文件或目录

有时可能需要跳过一整个文件或目录。例如,有文件里的代码你不想去执行。在这种情况下,必须从pytest搜集到的集合中排除文件和目录。
有关更多信息,请参阅,后续看情况单独分享。

六、导入依赖失败跳过

当有些依赖的包导入失败的时候,可以通过pytest.importorskip这个函数来跳过。同样,可以用在模块级别,fixture函数或者测试函数里。

import pytest # docutils = pytest.importorskip("docutils") class TestDemo(): def test_the_unknown2(self): ... def test_the_unknown3(self): pytest.importorskip("docutils") def test_the_unknown1(): ... if __name__ == "__main__": pytest.main(["-s", '-r' "test_module1.py"])

运行结果,应该是跳过一个,执行2个:

test_module1.py [100%] ======================== 2 passed, 1 skipped in 0.09s =========================.s Skipped: could not import 'docutils': No module named 'docutils' . Process finished with exit code 0

代码里的docutils是一个第三方库,你也可以根据库的版本号跳过:

docutils = pytest.importorskip("docutils", minversion="0.3")

版本将从指定模块的__version__属性中读取,如果不符合条件,也会跳过。

七、总结

无条件跳过模块中的所有测试

pytestmark = pytest.mark.skip("all tests still WIP")

基于某些条件跳过模块中的所有测试

pytestmark = pytest.mark.skipif(sys.platform == "win32", reason="tests for linux only")

如果缺少某些导入,则跳过模块中的所有测试

pexpect = pytest.importorskip("pexpect")

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppxwz.html