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实现360的字符显示界面
Feb 21 Python
Python的Flask框架中@app.route的用法教程
Mar 31 Python
python编写爬虫小程序
May 14 Python
Python使用Scrapy爬取妹子图
May 28 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
Python开发的实用计算器完整实例
May 10 Python
Python之str操作方法(详解)
Jun 19 Python
Python图片裁剪实例代码(如头像裁剪)
Jun 21 Python
python 解压pkl文件的方法
Oct 25 Python
win7 x64系统中安装Scrapy的方法
Nov 18 Python
Python日志syslog使用原理详解
Feb 18 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
Pytest中skip和skipif的具体使用方法
Python将CSV文件转化为HTML文件的操作方法
如何使用Tkinter进行窗口的管理与设置
Python 语言实现六大查找算法
详解MindSpore自定义模型损失函数
教你用python实现12306余票查询
python实现简易自习室座位预约系统
You might like
如何在PHP中使用Oracle数据库(3)
2006/10/09 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
IE与Firefox在JavaScript上的7个不同写法小结
2009/09/14 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
2010/04/01 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
深入了解javascript中的prototype与继承
2013/04/14 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
nodejs中的fiber(纤程)库详解
2015/03/24 NodeJs
JavaScript实现获得所有兄弟节点的方法
2015/07/23 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
2018/03/09 jQuery
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
Python之re操作方法(详解)
2017/06/14 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
selenium+python自动化测试之页面元素定位
2019/01/23 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
为什么使用接口?
2014/08/13 面试题
应届实习生的自我评价范文
2014/01/05 职场文书
工作失职检讨书范文
2014/01/16 职场文书
中队活动总结
2014/08/27 职场文书
小学生教师节广播稿
2015/08/19 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
python基础之错误和异常处理
2021/10/24 Python
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python
html中两种获取标签内的值的方法
2022/06/16 jQuery