前言
作为一个java党,我还是觉得pytest和testng很像,有时候真的会感觉到代码语言在某种程度上是相通的,那么今天来说说这两个知识点。
skip和skipif,见名知意,就是跳过测试呗,直白的说就是用于不想执行的代码,标记后,标记的代码不执行。
skip的用法
使用示例:@pytest.mark.skip(reason="不想执行的原因,执行时会输出reason内容")
1、标记在函数方法上
示例代码如下:
# 标记在函数上
@pytest.mark.skip(reason="标记在函数上,被标记函数不会被执行!!")
def test_case2():
print("我是测试用例2,但我不会执行")
运行结果如下:
2、标记在类中的函数方法上
示例代码如下:
class TestClass1(object):
def test_case3(self):
print("我是用例3")
# 标记在类中的函数上
@pytest.mark.skip(reason="标记在类中的函数上,同样也不会执行哦!")
def test_case4(self):
print("我是测试用例4,但我不会执行")
运行结果如下:
3、标记在类上
示例代码如下:
@pytest.mark.skip(reason="标记在类上,整个类及类中的方法都不会执行!")
class TestClass2(object):
def test_case5(self):
print("我是用例5")
运行结果如下:
小结:
4、在测试用例执行期间强制跳过
以简单的for循环为例,执行到第三个的时候,跳出,示例代码如下:
def test_case6():
for i in range(50):
print(f"输出第 【{i}】个数")
if i == 3:
pytest.skip("我跑不动了,不输出了")
运行结果如下:
总结:
可以理解为这时的跳过测试就和循环的break一样,这时不再用注解的形式了。
5、在模块级别跳过测试
语法:pytest.skip(msg="",allow_module_level=False),当 allow_module_level=True 时,可以设置在模块级别跳过整个模块,示例代码如下:
# -*- coding: utf-8 -*-
# @Time : 2020/11/12 20:30
# @Author : longrong.lang
# @FileName: test_skip.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
import sys
import pytest
if sys.platform.startswith("win"):
pytest.skip("当 allow_module_level=True 时,可以设置在模块级别跳过整个模块",allow_module_level=True)
@pytest.fixture(autouse=True)
def dataTable():
print("数据初始化成功")
def test_case1():
print("我是用例1")
运行结果如下:
6、希望有条件地跳过某些测试用例
语法:@pytest.mark.skipif(条件表达式,reason="")
示例代码如下:
@pytest.mark.skip(sys.platform.startswith("win"),reason="windows系统不执行哦")
def test_case7():
print("我是用例6")
运行结果如下:
7、跳过标记的使用
好处
需要将 pytest.mark.skip 和 pytest.mark.skipif 赋值给一个标记变量,用变量(注解变量)进行标记,示例代码如下:
skip = pytest.mark.skip("skip的标记变量,标记的函数或类不执行")
skipif = pytest.mark.skipif("skipif的标记变量,标记的函数或类不执行")
@skip
def test_case8():
print("测试用例8")
class TestClass(object):
@skipif
def test_case9(self):
print("测试用例9")
运行结果如下:
8、缺少某些导入跳过的测试
语法:pytest.importorskip( modname: str,minversion: Optional[str] = None,reason: Optional[str] = None )
参数列表
- modname:模块名
- minversion:版本号
- reasone:跳过原因,默认不给也行
示例代码如下:
importskip = pytest.importorskip("importskip",minversion="0.3",reason="此处是导入失败,跳过的测试")
@importskip
def test_10():
print('测试用例10')
运行结果如下: