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之折腾一下目录
Oct 24 Python
python实现二叉查找树实例代码
Feb 08 Python
Python带动态参数功能的sqlite工具类
May 26 Python
Django 接收Post请求数据,并保存到数据库的实现方法
Jul 12 Python
Python爬虫使用代理IP的实现
Oct 27 Python
python next()和iter()函数原理解析
Feb 07 Python
python实现录屏功能(亲测好用)
Mar 02 Python
python numpy实现rolling滚动案例
Jun 08 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
Aug 04 Python
python从Oracle读取数据生成图表
Oct 14 Python
Python的scikit-image模块实例讲解
Dec 30 Python
Python对excel的基本操作方法
Feb 18 Python
Pytest中skip和skipif的具体使用方法
Python将CSV文件转化为HTML文件的操作方法
如何使用Tkinter进行窗口的管理与设置
Python 语言实现六大查找算法
详解MindSpore自定义模型损失函数
教你用python实现12306余票查询
python实现简易自习室座位预约系统
You might like
优化使用mysql存储session的php代码
2008/01/10 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
2013/06/03 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
php实现websocket实时消息推送
2018/03/30 PHP
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
js中this的指向问题归纳总结
2018/11/28 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
Vue Object 的变化侦测实现代码
2020/04/15 Javascript
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
python批量制作雷达图的实现方法
2016/07/26 Python
python简单实例训练(21~30)
2017/11/15 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
python打印异常信息的两种实现方式
2019/12/24 Python
使用pytorch实现可视化中间层的结果
2019/12/30 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
几道Java和数据库的面试题
2013/05/30 面试题
学生实习推荐信范文
2013/11/26 职场文书
师范毕业生个人求职信
2013/12/09 职场文书
爱护花草树木的标语
2014/06/11 职场文书
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers