Python pytest 之 skip

@pytest.mark.skip(reason="")

1
2
3
4
5
@pytest.mark.skip(reason="")
跳过执行测试用例,加在函数上,类上,类方法上。如果加在类上面,类里面的所有测试用例都不会执行

参数
reason:跳过的原因,会在执行结果中打印

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import pytest


@pytest.fixture(autouse=True)
def login():
print("====登录====")


def test_case01():
print("我是测试用例11111")


@pytest.mark.skip(reason="不执行该用例!!因为没写好!!")
def test_case02():
print("我是测试用例22222")


class Test1:

def test_1(self):
print("%% 我是类测试用例1111 %%")

@pytest.mark.skip(reason="不想执行")
def test_2(self):
print("%% 我是类测试用例2222 %%")


@pytest.mark.skip(reason="类也可以跳过不执行")
class TestSkip:
def test_1(self):
print("%% 不会执行 %%")

pytest.skip(msg=“”,allow_module_level=False)

1
2
3
4
5
pytest.skip(msg=“”,allow_module_level=False)
作用:在测试用例执行期间强制跳过不再执行剩余内容。类似在Python的循环里面,满足某些条件则break 跳出循环

参数:
`allow_module_level=True` 时,可以设置在模块级别跳过整个模块

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys
import pytest

if sys.platform.startswith("win"):
pytest.skip("skipping windows-only tests", allow_module_level=True)


@pytest.fixture(autouse=True)
def login():
print("====登录====")


def test_case01():
print("我是测试用例11111")
1
2
3
4
5
6
7
def test_function():
n = 1
while True:
print(f"这是我第{n}条用例")
n += 1
if n == 5:
pytest.skip("我跑五次了不跑了")

执行结果:
在这里插入图片描述

@pytest.mark.skipif(condition, reason=“”)

1
2
3
4
5
@pytest.mark.skipif(condition, reason=“”)

参数:
condition:跳过的条件,必传参数
reason:标注原因,必传参数

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
import pytest
class Test_ABC:
def setup_class(self):
print("------->setup_class")
def teardown_class(self):
print("------->teardown_class")
def test_a(self):
print("------->test_a")
assert 1
@pytest.mark.skipif(condition=2>1,reason = "跳过该函数") # 跳过测试函数test_b
def test_b(self):
print("------->test_b")
assert 0
1
2
3
4
5
6
7
执行结果:
test_abc.py
------->setup_class
------->test_a #只执行了函数test_a
.
------->teardown_class
s # 跳过函数

跳过标记

  • 可以将 pytest.mark.skip 和 pytest.mark.skipif 赋值给一个标记变量
  • 在不同模块之间共享这个标记变量
  • 若有多个模块的测试用例需要用到相同的 skip 或 skipif ,可以用一个单独的文件去管理这些通用标记,然后适用于整个测试用例集
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import pytest
# 标记
skipmark = pytest.mark.skip(reason="不能在window上运行=====")
skipifmark = pytest.mark.skipif(sys.platform == 'win32', reason="不能在window上运行啦啦啦=====")


@skipmark
class TestSkip_Mark(object):

@skipifmark
def test_function(self):
print("测试标记")

def test_def(self):
print("测试标记")


@skipmark
def test_skip():
print("测试标记")

pytest.importorskip(modname: str, minversion: Optional[str]=None, reason: Optional[str]=Nonse)

1
2
3
4
5
6
7
pytest.importorskip(modname: str, minversion: Optional[str]=None, reason: Optional[str]=Nonse)
作用:如果缺少某些导入,则跳过模块中的所有测试

参数列表
* modname:模块名
* minversion:版本号
* reason:跳过原因,默认不给也行

示例

1
2
3
4
pexpect = pytest.importorskip("pexpect", minversion="0.3")
@pexpect
def test_import():
print("test")

Python pytest 之 skip
https://flepeng.github.io/021-Python-34-框架-pytest-Python-pytest-之-skip/
作者
Lepeng
发布于
2021年4月27日
许可协议