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函数缺省值与引用学习笔记分享
Feb 10 Python
python三元运算符实现方法
Dec 17 Python
Python中的推导式使用详解
Jun 03 Python
python中的句柄操作的方法示例
Jun 20 Python
实例详解Python模块decimal
Jun 26 Python
Python 实现交换矩阵的行示例
Jun 26 Python
python命令行工具Click快速掌握
Jul 04 Python
python爬虫项目设置一个中断重连的程序的实现
Jul 26 Python
原来我一直安装 Python 库的姿势都不对呀
Nov 11 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
Apr 29 Python
Django DRF路由与扩展功能的实现
Jun 03 Python
pytorch中[..., 0]的用法说明
May 20 Python
Pytest中skip和skipif的具体使用方法
Python将CSV文件转化为HTML文件的操作方法
如何使用Tkinter进行窗口的管理与设置
Python 语言实现六大查找算法
详解MindSpore自定义模型损失函数
教你用python实现12306余票查询
python实现简易自习室座位预约系统
You might like
在同一窗体中使用PHP来处理多个提交任务
2006/10/09 PHP
php 将excel导入mysql
2009/11/09 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
浅谈thinkphp5 instance 的简单实现
2017/07/30 PHP
javascript 播放器 控制
2007/01/22 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
jquery自定义显示消息数量
2017/12/19 jQuery
webpack打包react项目的实现方法
2018/06/21 Javascript
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
python的绘图工具matplotlib使用实例
2014/07/03 Python
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
python实现小球弹跳效果
2019/05/10 Python
详解anaconda安装步骤
2020/11/23 Python
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
最好的商品表达自己:Cafepress
2019/09/04 全球购物
SQL面试题
2013/12/09 面试题
汽车运用工程专业求职信
2014/06/18 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
自愿离婚协议书范本2016
2016/03/18 职场文书
Python四款GUI图形界面库介绍
2022/06/05 Python