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计算程序开始到程序结束的运行时间和程序运行的CPU时间
Nov 28 Python
Python批量提取PDF文件中文本的脚本
Mar 14 Python
Python实现统计给定列表中指定数字出现次数的方法
Apr 11 Python
python中多个装饰器的执行顺序详解
Oct 08 Python
对python numpy.array插入一行或一列的方法详解
Jan 29 Python
Python实现Event回调机制的方法
Feb 13 Python
python实现AES加密与解密
Mar 28 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
Python基于pip实现离线打包过程详解
May 15 Python
Python基于xlrd模块处理合并单元格
Jul 28 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
Mar 03 Python
Pytest中skip和skipif的具体使用方法
Python将CSV文件转化为HTML文件的操作方法
如何使用Tkinter进行窗口的管理与设置
Python 语言实现六大查找算法
详解MindSpore自定义模型损失函数
教你用python实现12306余票查询
python实现简易自习室座位预约系统
You might like
zend framework文件上传功能实例代码
2013/12/25 PHP
PHP生成静态HTML页面最简单方法示例
2015/04/09 PHP
php验证手机号码
2015/11/11 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
jquery.form.js异步提交表单详解
2017/04/25 jQuery
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
如何运行Python程序的方法
2013/04/21 Python
Python中修改字符串的四种方法
2018/11/02 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
Python PO设计模式的具体使用
2019/08/16 Python
Python greenlet和gevent使用代码示例解析
2020/04/01 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
墨西哥购物网站:Elektra
2020/01/21 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
雷蛇美国官网:Razer
2020/04/03 全球购物
大学生自我鉴定评语
2014/01/27 职场文书
烹饪自我鉴定
2014/03/01 职场文书
保险内勤岗位职责
2014/04/05 职场文书
鲁迅故居导游词
2015/02/05 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
商标侵权律师函
2015/05/27 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python