上一节我们详细的讲解了pytest自定义标记测试用例的方法,本小节我们学习一下pytest跳过测试用例的方法。
在我们自动化过程中,经常会遇到功能阻塞、功能未实现、环境等一系列外部因素问题导致的一些用例执行不了,这时我们就可以用到跳过skip用例,如果我们注释掉或删除掉这段代码,当然也能达到效果,但是后面还要进行恢复操作,很麻烦不智能。
pytest跳过测试用例:
无条件跳过,@pytest.mark.skip(reason="跳过的原因,会在执行结果中打印")
有条件跳过,@pytest.mark.skipif(条件表达式,reason="跳过的原因,会在执行结果中打印")
无条件跳过测试用例
import pytest
@pytest.mark.skip(reason = "不执行")
def test_case1():
print("第一个测试用例")
def test_case2():
print("第二个测试用例")
注:在函数上方加入@pytest.mark.skip(reason = "不执行")后,该函数不会执行,并且会打印出不执行的原因
import pytest
class TestCase(object):
@pytest.mark.skip(reason="没有完成,不执行")
def test_case1(self):
print("第一个测试用例")
def test_case2(self):
print("第二个测试用例")
import pytest
@pytest.mark.skip(reason="这个类的所有不执行")
class TestCase1(object):
def test_case1(self):
print("第一个测试用例")
def test_case2(self):
print("第二个测试用例")
import pytest
pytest.skip(allow_module_level=True)
class TestCase1(object):
def test_case1(self):
print("第一个测试用例")
def test_case2(self):
print("第二个测试用例")
import pytest
def test_dome():
for i in range(20):
print(f"第{i}个用例")
if i == 5:
pytest.skip("跑不动了,不在执行")
注:当i为5时,就不会在执行了,直接跳出循环了,与break相似
有条件的跳过测试用例
注:作用在函数、方法、类、模块中都和无条件跳过测试用例用法一致
语法:@pytest.mark.skipif(条件表达式,reason=“跳过的原因”)
示例1:当操作系统为win32时,不执行
import pytest
import sys
@pytest.mark.skipif(sys.platform == "win32", reason="操作系统为win32不执行")
def test_case1():
print("执行第一个测试用例")
def test_case2():
print("执行第一个测试用例")
注:当操作系统为win32时,test_case1不会执行,只有当操作系统不为win32时才会执行test_case1
示例2:可以将 pytest.mark.skip 和 pytest.mark.skipif 赋值给一个标记变量
import pytest
import sys
# 不满足条件不执行
markskipif = pytest.mark.skipif(sys.platform == "win32", reason="操作系统为win32不执行")
# 直接强制不执行
markskip = pytest.mark.skip("本次不进行测试")
@markskip
def test_case1():
print("执行第一个测试用例")
@markskipif
def test_case2():
print("执行第二个测试用例")
def test_case3():
print("执行第三个测试用例")
注:直接用装饰器的方式调用即可
示例3:若有多个模块的测试用例需要用到相同的 skip 或 skipif ,可以用一个单独的文件去管理这些通用标记,然后适用于整个测试用例集
标记文件
import pytest
import sys
# 不满足条件不执行
markskipif = pytest.mark.skipif(sys.platform == "win32", reason="操作系统为win32不执行")
# 直接强制不执行
markskip = pytest.mark.skip("本次不进行测试")
测试用例
from scripts.metting import markskip,markskipif
@markskip
def test_case1():
print("执行第一个测试用例")
@markskipif
def test_case2():
print("执行第二个测试用例")
def test_case3():
print("执行第三个测试用例")
注:把标记单独放在一个文件中,测试用例中如果需要用到直接用装饰器的方式直接调用即可
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!