Pytest学习笔记7-skip和skipif的使用
前言
在实际的测试中,我们经常会遇到需要跳过某些测试用例的情况,pytest提供了skip和ifskip来跳过测试
下面我们就来通过一些例子看看skip和ifskip具体如何使用吧
skip的用法
使用示例:@pytest.mark.skip(reason="跳过的原因,会在执行结果中打印")
标记在测试函数中
举个
import pytest
def test_1():
print("测试用例1")
@pytest.mark.skip(reason="没写完,不执行此用例")
def test_2():
print("测试用例2")
执行结果如下:

标记在测试类的测试用例中
举个
import pytest
class TestCase(object):
def test_1(self):
print("测试用例1")
@pytest.mark.skip(reason="没写完,不执行此用例")
def test_2(self):
print("测试用例2")
执行结果如下

标记在测试类方法上
举个
import pytest
@pytest.mark.skip(reason="没写完,不执行此用例")
class TestCase1(object):
def test_1(self):
print("测试用例1")
def test_2(self):
print("测试用例2")
class TestCase2(object):
def test_3(self):
print("测试用例3")
def test_4(self):
print("测试用例4")
执行结果如下

总结
- @pytest.mark.skip 可以加在函数上,类上,类方法上
- 如果加在类上面,则类里面的所有测试用例都不会执行
在测试用例执行期间强制跳过
以一个for循环为例,执行到第3次的时候跳出
import pytest
def test_demo():
for i in range(50):
print(f"输出第【{i}】个数")
if i == 3:
pytest.skip("跑不动了,不再执行了")
执行结果如下

在模块级别跳过测试用例
语法:pytest.skip(msg="",allow_module_level=False)
当allow_module_level=True时,可以设置在模块级别跳过整个模块
import pytest
pytest.skip("跳过整个模块", allow_module_level=True)
@pytest.fixture(autouse=True)
def test_1():
print("执行测试用例1")
def test_2():
print("执行测试用例2")
执行结果如下

有条件的跳过某些用例
语法:@pytest.mark.skipif(condition, reason="")
import sys
import pytest
@pytest.mark.skipif(sys.platform == 'darwin', reason="does not run on MacOS")
class TestSkipIf(object):
def test_demo(self):
print("不能在MacOS上运行")
注意:condition需要返回True才会跳过
执行结果如下:

跳过标记的使用
- 可以将 pytest.mark.skip 和 pytest.mark.skipif 赋值给一个标记变量
- 在不同模块之间共享这个标记变量
- 若有多个模块的测试用例需要用到相同的 skip 或 skipif ,可以用一个单独的文件去管理这些通用标记,然后适用于整个测试用例集
举个
import sys
import pytest
skipmark = pytest.mark.skip(reason="不执行此用例")
skipifmark = pytest.mark.skipif(sys.platform == 'darwin', reason="does not run on MacOS")
@skipifmark
class TestSkipIf(object):
def test_demo(self):
print("不能在MacOS上运行")
@skipmark
def test_1():
print("测试用例1")
def test_2():
print("测试用例2")
执行结果如下

当缺少某些导入时跳过用例
语法:
pytest.importorskip( modname: str, minversion: Optional[str] = None, reason: Optional[str] = None )
参数:
- modname: 需要被导入的模块名称,比如 selenium;
- minversion: 表示需要导入的最小的版本号,如果该版本不达标,将会打印出报错信息;
- reason: 只有当模块没有被导入时,给定该参数将会显示出给定的消息内容
找不到对应module
举个
import pytest
rock = pytest.importorskip("rock")
@rock
def test_1():
print("测试是否导入了rock模块")
运行结果

如果版本不达标
举个
import pytest
sel = pytest.importorskip("selenium", minversion="3.150")
@sel
def test_1():
print("测试是否导入了selenium模块")
运行结果

整理参考
Pytest学习笔记7-skip和skipif的使用的更多相关文章
- [转载]pytest学习笔记
pytest学习笔记(三) 接着上一篇的内容,这里主要讲下参数化,pytest很好的支持了测试函数中变量的参数化 一.pytest的参数化 1.通过命令行来实现参数化 文档中给了一个简单的例子, ...
- Pytest学习笔记8-参数化
前言 我们在实际自动化测试中,某些测试用例是无法通过一组测试数据来达到验证效果的,所以需要通过参数化来传递多组数据 在unittest中,我们可以使用第三方库parameterized来对数据进行参数 ...
- pytest学习笔记(二)
继续文档的第二章 (一)pytest中可以在命令行中静态/动态添加option,这里没什么好讲的,略过... 这里面主要讲下如何试用skip/xfail,还有incremental(包含一些列的测试步 ...
- pytest学习笔记(一)
这两天在学习pytest,之前有小用到pytest,觉得这个测试框架很灵巧,用在实现接口自动化(pytest+requests)非常的轻便,然后很有兴致的决定学习下,然后又发现了pytest-sele ...
- pytest学习笔记(三)
接着上一篇的内容,这里主要讲下参数化,pytest很好的支持了测试函数中变量的参数化 一.pytest的参数化 1.通过命令行来实现参数化 文档中给了一个简单的例子, test_compute.py ...
- pytest学习笔记
From: https://blog.csdn.net/gaowg11/article/details/54910974 由于对测试框架了解比较少,所以最近看了下pytest测试框架,对学习心得做个记 ...
- pytest 学习笔记一 入门篇
前言 之前做自动化测试的时候,用的测试框架为Python自带的unittest框架,随着工作的深入,发现了另外一个框架就是pytest (官方地址文档http://www.pytest.org/en/ ...
- Pytest学习笔记3-fixture
前言 个人认为,fixture是pytest最精髓的地方,也是学习pytest必会的知识点. fixture用途 用于执行测试前后的初始化操作,比如打开浏览器.准备测试数据.清除之前的测试数据等等 用 ...
- Pytest学习笔记5-conftest.py的用法
前言 在之前介绍fixture的文章中,我们使用到了conftest.py文件,那么conftest.py文件到底该如何使用呢,下面我们就来详细了解一下conftest.py文件的特点和使用方法吧 什 ...
随机推荐
- Duplicate entry '' for key 'PRIMARY'
今天在在mysql中插入数据 因为直接插入查询出来的表格,insert into 表(student_id,class_id) 直接插入了这两个字段对应的查询出来的表 没有留意到该表的主键没有设置自增 ...
- 对于uos目前只能安装商店的感慨,强制安装除外
对于uos目前只能安装商店的感慨,强制安装除外 jie1018 / 2020-5-16 21:35 浏览: 702 / 回复: 26 个人觉得,在软件不足的情况下,更应该是系统支持,而不是让用 ...
- Linux_磁盘管理理论概述
一.磁盘阵列 1.什么是磁盘阵列? 1️⃣:磁盘整列就是将多块独立的磁盘组合到一起,形成容量大的磁盘组. 2️⃣:将相同的数据存放到不多个的磁盘的不同位置 2.RAID0 1️⃣:RAID0是磁盘整列 ...
- centos国内镜像下载
国内镜像下载 http://mirrors.aliyun.com/centos/6/isos/x86_64/ 如果需要下载centos 7 版本进入对应7的/isos/x86_64/ 选择minima ...
- Linux_防火墙与SElinux
一.防火墙与SElinux 1.防火墙和selinux 防火墙 iptables 默认允许所以 firewalld 默认拒绝所有 ebtables 不认识,不管 se ...
- Java 中布尔(boolean)类型占用多少个字节
为什么要问这个问题,首先在Java中定义的八种基本数据类型中,除了其它七种类型都有明确的内存占用字节数外,就 boolean 类型没有给出具体的占用字节数,因为对虚拟机来说根本就不存在 boolean ...
- OSI七层模型与TCP/IP五层模型-(转自钛白Logic)
OSI七层模型与TCP/IP五层模型 博主是搞是个FPGA的,一直没有真正的研究过以太网相关的技术,现在终于能静下心学习一下,希望自己能更深入的掌握这项最基本的通信接口技术.下面就开始 ...
- iowait 的常见误解
转自:理解 %IOWAIT (%WIO):http://linuxperf.com/?p=33 %iowait 是 "sar -u" 等工具检查CPU使用率时显示的一个指标,在 ...
- STM8的AIR与STM32的Keil的指定地址存数据
[经验分享]KE02在IAR和KEIL中以常量形式初始化EEPROM值一, 经验分享描述 写这篇经验分享的原因是,之前有一个客户,他希望在KE02的芯片中,不要出现使用EEPROM操作命 ...
- Mui入门(Day_42)
开始体验Mui 1. 安装HbuilderX 下载地址:https://www.dcloud.io/hbuilderx.html 2. 新建Mui项目 3. 文件结构介绍 _ css : 样式表文件 ...