Pytest中skip skipif跳过用例详解


Posted in Python onJune 30, 2021

前言

  • pytest.mark.skip可以标记无法在某些平台上运行的测试功能,
  • 或者您希望失败的测试功能希望满足某些条件才执行某些测试用例,否则pytest会跳过运行该测试用例
  • 实际常见场景:跳过非Windows平台上的仅Windows测试,或者跳过依赖于当前不可用的外部资源(例如数据库)的测试

@pytest.mark.skip

跳过执行测试用例,有可选参数reason:跳过的原因,会在执行结果中打印

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
__title__  = 
__Time__   = 2020/4/9 13:49
__Author__ = 小菠萝测试笔记
__Blog__   = https://www.cnblogs.com/poloyy/
"""
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 skipif跳过用例详解

知识点

  • @pytest.mark.skip可以加在函数上,类上,类方法上
  • 如果加在类上面,类里面的所有测试用例都不会执行
  • 以上小案例都是针对:整个测试用例方法跳过执行,如果想在测试用例执行期间跳过不继续往下执行呢?

pytest.skip()函数基础使用

作用:在测试用例执行期间强制跳过不再执行剩余内容

类似:在Python的循环里面,满足某些条件则break 跳出循环

def test_function():
    n = 1
    while True:
        print(f"这是我第{n}条用例")
        n += 1
        if n == 5:
            pytest.skip("我跑五次了不跑了")

执行结果

Pytest中skip skipif跳过用例详解

pytest.skip(msg="",allow_module_level=False)

当allow_module_level=True时,可以设置在模块级别跳过整个模块

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
__title__  = 
__Time__   = 2020/4/9 13:49
__Author__ = 小菠萝测试笔记
__Blog__   = https://www.cnblogs.com/poloyy/
"""
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")

执行结果

collecting ...
Skipped: skipping windows-only tests
collected 0 items / 1 skipped
============================= 1 skipped in 0.15s ==============================

@pytest.mark.skipif(condition, reason="")

作用:希望有条件地跳过某些测试用例

注意:condition需要返回True才会跳过

@pytest.mark.skipif(sys.platform == 'win32', reason="does not run on windows")
class TestSkipIf(object):
    def test_function(self):
        print("不能在window上运行")

执行结果

collecting ... collected 1 item
07skip_sipif.py::TestSkipIf::test_function SKIPPED                       [100%]
Skipped: does not run on windows
============================= 1 skipped in 0.04s ==============================

跳过标记

  • 可以将pytest.mark.skip和pytest.mark.skipif赋值给一个标记变量
  • 在不同模块之间共享这个标记变量
  • 若有多个模块的测试用例需要用到相同的skip或skipif,可以用一个单独的文件去管理这些通用标记,然后适用于整个测试用例集
# 标记
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("测试标记")

执行结果

collecting ... collected 3 items
07skip_sipif.py::TestSkip_Mark::test_function SKIPPED                    [ 33%]
Skipped: 不能在window上运行啦啦啦=====
07skip_sipif.py::TestSkip_Mark::test_def SKIPPED                         [ 66%]
Skipped: 不能在window上运行=====
07skip_sipif.py::test_skip SKIPPED                                       [100%]
Skipped: 不能在window上运行=====
============================= 3 skipped in 0.04s ==============================

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

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

参数列表

  • modname:模块名
  • minversion:版本号
  • reasone:跳过原因,默认不给也行
pexpect = pytest.importorskip("pexpect", minversion="0.3")


@pexpect
def test_import():
    print("test")

执行结果一:如果找不到module

Skipped: could not import 'pexpect': No module named 'pexpect'
collected 0 items / 1 skipped

执行结果一:如果版本对应不上

Skipped: module 'sys' has __version__ None, required is: '0.3'
collected 0 items / 1 skipped

到此这篇关于Pytest中skip skipif跳过用例详解的文章就介绍到这了,更多相关skip skipif跳过用例内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
深入理解Python中字典的键的使用
Aug 19 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
Jul 12 Python
Python 类的继承实例详解
Mar 25 Python
Python3.6笔记之将程序运行结果输出到文件的方法
Apr 22 Python
python email smtplib模块发送邮件代码实例
Apr 26 Python
Python selenium抓取微博内容的示例代码
May 17 Python
python实现beta分布概率密度函数的方法
Jul 08 Python
python内存动态分配过程详解
Jul 15 Python
django 简单实现登录验证给你
Nov 06 Python
从0到1使用python开发一个半自动答题小程序的实现
May 12 Python
keras实现基于孪生网络的图片相似度计算方式
Jun 11 Python
python 监控logcat关键字功能
Sep 04 Python
Pytest中skip和skipif的具体使用方法
Python将CSV文件转化为HTML文件的操作方法
如何使用Tkinter进行窗口的管理与设置
Python 语言实现六大查找算法
详解MindSpore自定义模型损失函数
教你用python实现12306余票查询
python实现简易自习室座位预约系统
You might like
PHP下一个非常全面获取图象信息的函数
2008/11/20 PHP
解析php下载远程图片函数 可伪造来路
2013/06/25 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
Vue计算属性的使用
2017/08/04 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
[20:46]Ti4循环赛第三日VG vs DK
2014/07/12 DOTA
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python 类的继承实例详解
2017/03/25 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
对python中的logger模块全面讲解
2018/04/28 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
Python中url标签使用知识点总结
2020/01/16 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
Python super()函数使用及多重继承
2020/05/06 Python
python3代码中实现加法重载的实例
2020/12/03 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
信用卡工作证明模板
2014/09/14 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
大学生受助感言
2015/08/01 职场文书
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android
Python类方法总结讲解
2021/07/26 Python
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
2022/04/06 Vue.js