PyTest之用例忽略
一、直接忽略
由于某些原因,系统存在bug,但该bug修复级别比较低。或者由于需求变更,导致原有的脚本无法成功执行,所以需要跳过用例。而pytest提供了@pytest.mark.skip
方法,但是我们推荐@pytest.mark.skip(reason="XXX")
,因为它标注了跳过的具体原因,用例可读性更高,有利于脚本的长期维护。
#test_skip.py
import pytest
class TestMyCode:
@pytest.mark.skip
def test_skip_01(self):
pass
@pytest.mark.skip(reason="因需求变更,忽略用例")
def test_skip_02(self):
pass
二、条件忽略
除了一般情况外,还存在不同环境运行的结果可能不同,此时需要跳过一些环境的用例,而pytest
提供了@pytest.mark.skipif
方法。比如,根据环境的不同,选择跳过用例。如下所示:
#test_skipif.py
import platform
import pytest
class TestMyCode:
@pytest.mark.skipif(platform.system() != "Windows", reason="非windows系统时,用例均跳过")
def test_skipif(self):
assert platform.system() == "Windows", platform.system()
另外,当条件表达式分支比较多时,直接在@pytest.mark.skipif
方法中写表达式,明显比较冗余,而且不美观,可读性差。此时,pytest
支持更优雅的封装方式,如下所示:
#test_skipif.py
import platform
import pytest
def is_windows():
if platform.system() != "Windows":
return True
else:
return False
only_windows = pytest.mark.skipif(is_windows(),reason="非windows系统时,用例均跳过")
class TestMyCode:
"""装饰器的方式封装"""
@only_windows
def test_skipif_002(self):
assert platform.system() == "Windows", platform.system()