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操作csv文件实例详解
Jul 31 Python
TensorFlow在MAC环境下的安装及环境搭建
Nov 14 Python
Python字符串拼接六种方法介绍
Dec 18 Python
Python找出微信上删除你好友的人脚本写法
Nov 01 Python
Python类装饰器实现方法详解
Dec 21 Python
Python实现针对json中某个关键字段进行排序操作示例
Dec 25 Python
python操作日志的封装方法(两种方法)
May 23 Python
Python使用正则表达式分割字符串的实现方法
Jul 16 Python
在OpenCV里实现条码区域识别的方法示例
Dec 04 Python
python数据库编程 Mysql实现通讯录
Mar 27 Python
基于Tensorflow一维卷积用法详解
May 22 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
Nov 02 Python
Pytest中skip和skipif的具体使用方法
Python将CSV文件转化为HTML文件的操作方法
如何使用Tkinter进行窗口的管理与设置
Python 语言实现六大查找算法
详解MindSpore自定义模型损失函数
教你用python实现12306余票查询
python实现简易自习室座位预约系统
You might like
PHP+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
php URL跳转代码 减少外链
2011/06/25 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
Vue的状态管理vuex使用方法详解
2020/02/05 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
python清理子进程机制剖析
2017/11/23 Python
Python读取图片为16进制表示简单代码
2018/01/19 Python
使用python画社交网络图实例代码
2019/07/10 Python
基于spring boot 日志(logback)报错的解决方式
2020/02/20 Python
python 日志模块 日志等级设置失效的解决方案
2020/05/26 Python
python3 简单实现组合设计模式
2020/07/02 Python
Python wordcloud库安装方法总结
2020/12/31 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
物流专业大学的自我评价
2014/01/11 职场文书
个人担保书格式范文
2014/05/12 职场文书
外联部演讲稿
2014/05/24 职场文书
应用外语系自荐信
2014/06/26 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
小学运动会报道稿
2015/07/22 职场文书
尊师重教主题班会
2015/08/14 职场文书
春节随笔
2015/08/15 职场文书