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 25 Python
用python写扫雷游戏实例代码分享
May 27 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 26 Python
python矩阵的转置和逆转实例
Dec 12 Python
Python使用pandas对数据进行差分运算的方法
Dec 22 Python
自学python的建议和周期预算
Jan 30 Python
python脚本开机自启的实现方法
Jun 28 Python
Python:Numpy 求平均向量的实例
Jun 29 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
Jul 23 Python
Python 元组操作总结
Sep 18 Python
pytorch  网络参数 weight bias 初始化详解
Jun 24 Python
Python的Tqdm模块实现进度条配置
Feb 24 Python
Pytest中skip和skipif的具体使用方法
Python将CSV文件转化为HTML文件的操作方法
如何使用Tkinter进行窗口的管理与设置
Python 语言实现六大查找算法
详解MindSpore自定义模型损失函数
教你用python实现12306余票查询
python实现简易自习室座位预约系统
You might like
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
php导出CSV抽象类实例
2014/09/24 PHP
php实现网站文件批量压缩下载功能
2015/10/28 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
2015/10/19 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
jQuery实现放大镜案例
2020/10/19 jQuery
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
js实现碰撞检测
2021/01/29 Javascript
python实现的防DDoS脚本
2011/02/08 Python
Python3.x和Python2.x的区别介绍
2013/02/12 Python
python多线程操作实例
2014/11/21 Python
以windows service方式运行Python程序的方法
2015/06/03 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
Python实现的归并排序算法示例
2017/11/21 Python
Python中Proxypool库的安装与配置
2018/10/19 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
超简单使用Python换脸实例
2019/03/27 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
Python操作Word批量生成合同的实现示例
2020/08/28 Python
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
农民工创业典型事迹
2014/01/25 职场文书
乡镇干部先进事迹材料
2014/02/03 职场文书
软件售后服务承诺书
2014/05/21 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书