【Pytest】跳过执行之@pytest.mark.skip()详解

一、skip介绍及运用

在我们自动化测试过程中,经常会遇到功能阻塞、功能未实现、环境等一系列外部因素问题导致的一些用例执行不了,这时我们就可以用到跳过skip用例,如果我们注释掉或删除掉,后面还要进行恢复操作。

1、skip跳过成功,标识为s ============================= 2 skipped in 0.04s ==============================

2、pytest.main(['-rs','test01.py']) 用-rs执行,跳过原因才会显示SKIPPED [1] test01.py:415: 跳过Test类,会跳过类中所有方法

3、skip跳过,无条件和原因@pytest.mark.skipif()

4、skip跳过,无需满足条件true、有跳过原因@pytest.mark.skipif(reason='无条件,只有跳过原因')

5、skip跳过,需满足条件true、且有跳过原因@pytest.mark.skipif(条件1==1,reason='跳过原因')

6、skip赋值变量,多处调用myskip=pytest.mark.skipif(1==1,reason='skip赋值给变量,可多处调用')

然后@myskip使用

二、跳过测试类

@pytest.mark.skip()和@pytest.mark.skipif()两个标签,用他们装饰测试类

1、被标记的类中所有方法测试用例都会被跳过

2、被标记的类,当条件为ture时,会被跳过,否则不跳过

#skip跳过类
 
import pytest,sys
@pytest.mark.skip(reason='跳过Test类,会跳过类中所有方法')
class Test(object):
    def test_one(self):
        assert 1==1
    def test_two(self):
        print('test_02')
        assert 1==2
if __name__=='__main__':
    pytest.main(['-rs','test01.py'])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py ss                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [2] test01.py: 跳过Test类,会跳过类中所有方法
============================= 2 skipped in 0.07s ==============================
 
Process finished with exit code 0
 
 
 
 
#skip满足条件,skip跳过类
import pytest,sys
@pytest.mark.skipif(1==1,reason='跳过Test类,会跳过类中所有方法')
class Test(object):
    def test_one(self):
        assert 1==1
    def test_two(self):
        print('test_02')
        assert 1==2
if __name__=='__main__':
    pytest.main(['-rs','test01.py'])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py ss                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [1] test01.py:415: 跳过Test类,会跳过类中所有方法
SKIPPED [1] test01.py:417: 跳过Test类,会跳过类中所有方法
============================= 2 skipped in 0.04s ==============================
 
Process finished with exit code 0

三、跳过方法或测试用例

我们想要某个方法或跳过某条用例,在方法上加以下3种都可以

@pytest.mark.skip() #1、跳过方法或用例,未备注原因

@pytest.mark.skip(reason='跳过一个方法或一个测试用例') #2、跳过方法或用例,备注了原因

@pytest.mark.skipif(1==1,reason='跳过一个方法或一个测试用例') #3、当条件满足,跳过方法或用例,备注了原因

1、跳过方法或用例,未备注原因
import pytest,sys
class Test(object):
    @pytest.mark.skip()
    def test_one(self):
        assert 1==2
    def test_two(self):
        print('test_02')
        assert 1==1
if __name__=='__main__':
    pytest.main(['-rs','test01.py'])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py s.                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [1] test01.py:414: unconditional skip
======================== 1 passed, 1 skipped in 0.04s =========================
 
Process finished with exit code 0
 
2、跳过方法或用例,备注了原因
import pytest,sys
class Test(object):
    @pytest.mark.skip(reason='跳过一个方法或一个测试用例')
    def test_one(self):
        assert 1==2
    def test_two(self):
        print('test_02')
        assert 1==1
if __name__=='__main__':
    pytest.main(['-rs','test01.py'])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py s.                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [1] test01.py:414: 跳过一个方法或一个测试用例
======================== 1 passed, 1 skipped in 0.05s =========================
 
Process finished with exit code 0
 
3、当条件满足,跳过方法或用例,备注了原因
import pytest,sys
class Test(object):
    @pytest.mark.skipif(1==1,reason='跳过一个方法或一个测试用例')
    def test_one(self):
        assert 1==2
    def test_two(self):
        print('test_02')
        assert 1==1
if __name__=='__main__':
    pytest.main(['-rs','test01.py'])
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py s.                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [1] test01.py:414: 跳过一个方法或一个测试用例
======================== 1 passed, 1 skipped in 0.06s =========================
 
Process finished with exit code 0

四、多个skip时,满足1个条件即跳过

我们在类和方法上分别加了skip,类中满足条件,方法中未满足条件,所以生效类中skip

import pytest,sys
@pytest.mark.skipif(1==1,reason='多个条件时,有1个条件满足就跳过(类)')
class Test(object):
    @pytest.mark.skipif(1==2, reason='多个条件时,有1个条件满足就跳过(方法)')
    def test_one(self):
        assert 1==2
    def test_two(self):
        print('test_02')
        assert 1==1
if __name__=='__main__':
    pytest.main(['-rs','test01.py'])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py ss                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [1] test01.py:418: 多个条件时,有1个条件满足就跳过(类)
SKIPPED [1] test01.py:415: 多个条件时,有1个条件满足就跳过(类)
============================= 2 skipped in 0.04s ==============================

五、skip赋值给变量,可多出调用

无论是@pytest.mark.skip()标签还是@pytest.mark.skipif()标签,如果你想在多个测试方法上装饰,依次写起来很麻烦的话,你可以选择定义个变量让它等于标签,然后在装饰的时候用该变量代替标签。这种方法,你还可以通过在其他模块中导入的变量的方式,在其他模块中共享标签;如果可以这样的话,我们为什么不新建一个模块用来存放标签呢?这样是不是又方便了许多。

赋值:myskip=pytest.mark.skipif(1==1,reason='skip赋值给变量,可多处调用')

调用:@myskip

import pytest,sys
myskip=pytest.mark.skipif(1==1,reason='skip赋值给变量,可多处调用')
class Test(object):
    @myskip
    def test_one(self):
        assert 1==2
    def test_two(self):
        print('test_02')
        assert 1==1
if __name__=='__main__':
    pytest.main(['-rs','test01.py'])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py s.                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [1] test01.py:415: skip赋值给变量,可多处调用
======================== 1 passed, 1 skipped in 0.07s =========================
 
Process finished with exit code 0

六、pytest.skip()方法内跳过

除了通过使用标签的方式,还可以在测试用例中调用pytest.skip()方法来实现跳过,可以选择传入msg参数来说明跳过原因;如果想要通过判断是否跳过,可以写在if判断里(_)

import pytest,sys
class Test(object):
    def test_one(self):
        pytest.skip(msg='跳过')
        assert 1==2
    def test_two(self):
        print('test_02')
        assert 1==1
if __name__=='__main__':
    pytest.main(['-rs','test01.py'])
 
 
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/Test/test/test01.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\Test\test
plugins: allure-pytest-2.8.5, html-1.22.0, metadata-1.8.0
collected 2 items
 
test01.py s.                                                             [100%]
 
=========================== short test summary info ===========================
SKIPPED [1] c:\users\wangli\pycharmprojects\test\test\test01.py:416: 跳过
======================== 1 passed, 1 skipped in 0.04s =========================
 
Process finished with exit code 0

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/129923.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nodejs express multer 保存文件名为中文时乱码,问题解决 originalname

nodejs express multer 保存文件名为中文时乱码,问题解决 originalname 一、问题描述 用 express 写了个后台,在接收文件并保存的时候 multer 接收到的文件名为乱码。 二、解决 找了下解决方法,在 github 的 multer issue 中找到了答案 参…

【MySQL进阶之路丨第十七篇(完结)】一文带你精通MySQL运算符

引言 在上一篇中我们介绍了MySQL函数;在开发中,对MySQL运算符的运用是十分重要的。这一篇我们使用命令行方式来帮助读者掌握MySQL中运算符的操作。 上一篇链接:【MySQL进阶之路丨第十六篇】一文带你精通MySQL函数 MySQL运算符 MySQL中的运…

node插件MongoDB(四)—— 库mongoose 的个性话读取(字段筛选、数据排序、数据截取)(四)

文章目录 一、字段筛选二、数据排序三、数据截取1. skip 跳过2. limit 限定![在这里插入图片描述](https://img-blog.csdnimg.cn/c7067b1984ee4c6686f8bbe07cae9176.png) 一、字段筛选 字段筛选:只读取指定的数据,比如集合(表)中有…

JMeter 相关的面试题

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:加入1000人软件测试技术学习交流群📢资源分享:进了字节跳动之后,才…

【已验证】php配置连接sql server中文乱码(解决方法)更改utf-8格式

解决数据库中的中文数据在页面显示乱码的问题 在连接的$connectionInfo中设置"CharacterSet" > "UTF-8",指定编码方式即可 $connectionInfo array("UID">$uid, "PWD">$pwd, "Database">$database…

提升采购订单管理效率的五个最佳实践

企业每年都要订购成千上万的商品和服务。公司运营和发展所需的一切都来自庞大的供应商网络,而沟通这些需求的主要方式是通过采购订单。 由于所有订单都会流经系统,而且每个月都会发生数千元不等的供应支出,因此掌握采购订单流程成为重中之重…

[autojs]逍遥模拟器和vscode对接

第一步:启动autojs服务 第二步:去cmd查看ip地址,输入ipconfig 第三步:打开逍遥模拟器中的sutojs-左上角- 连接电脑,然后输入WLAN或者其他ip也行,根据自己电脑实际情况确认 此时vscode显示连接成功。我们写…

selenium 自动化测试 1-如何搭建自动化测试环境,搭建环境过程应该注意的问题

最近也有很多人私下问我,selenium学习难吗,基础入门的学习内容很多是3以前的版本资料,对于有基础的人来说,3到4的差别虽然有,但是不足以影响自己,但是对于没有学过的人来说,通过资料再到自己写的…

Pinia 是什么?Redux、Vuex、Pinia 的区别?

结论先行: Pinia 是 Vue 官方团队开发的一个全新状态管理库。核心都是解决组件间的通信和数据的共享问题。 它和 Vuex 的区别呢,一个是虽然它和 Vuex 类似,但 Pinia 使用起来更加简单和直观。因为 Pinia 基于 Vue3 的组合式 API 风格&…

【Unity】零基础实现塔防游戏中敌人沿固定路径移动的功能

目录 场景搭建 烘焙(Bake) 敌人动作控制 脚本实现 我们知道,在一些塔防小游戏中,敌人往往会沿着给定的一条路径移动,我们在条路的路边会布置防御设施,攻击消灭敌人,阻止敌人到达终点。 场景搭建 我们首先新建一个…

【数据结构与算法】DFA算法-关键词匹配-java案例实现

该算法往往是用于匹配一些敏感词、绝对词等,从一篇文章中快速找到其中包含的关键词。 实现思路: 先读取所有关键词并存入set集合中。再将set中的关键词存入HashMap中,是以每个关键词字顺序存储,key为一个字、value为一个HashMap。…

Laplacian Redecomposition for Multimodal Medical Image Fusion

LRD方法 GDIE means ‘gradient-domain image enhancement’,DGR means ‘decision graph redecomposition’ MLD means ‘maximum local difference’ LEM means ‘local energy maximum’,OD means ‘overlapping domain’,LP means ‘L…

Awesome-Selfhosted:互联网常见服务开源平替 | 开源日报 No.68

awesome-selfhosted/awesome-selfhosted Stars: 137.7k License: NOASSERTION Awesome-Selfhosted 是一个列出了可以在自己的服务器上托管的免费软件网络服务和 Web 应用程序列表。 以下是该项目的主要功能: 提供各种类型 (如分析、备份、博客平台等) 的开源软件…

Vue创建浅层响应式数据

shallowReactive:只处理对象第一层数据的响应式(浅响应式)。 shallowRef:只处理基本数据类型的响应式,不处理对象类型的响应式。 shallowReactive 适用于:如果有一个对象类型的数据,结构比较深…

SQL表、字段、查询参数获取

SQL工具类表、字段、查询参数提取 1. 执行效果2. 使用2.1 引入依赖2.2 相关实体2.3 工具类 1. 执行效果 2. 使用 2.1 引入依赖 <!-- sql 解析处理--><dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifact…

PLSQL工具 数据库连接名的设置

在help >>surpost info 能看到 这东西好难用啊。。不直接显示url,非要搞个名称。。

2023年A股借壳上市研究报告

第一章 借壳上市概况 1.1 定义 借壳上市作为一种独特的资本市场操作手法&#xff0c;历来是企业拓展融资渠道和实现市场战略目标的重要途径。具体来说&#xff0c;借壳上市可分为狭义与广义两种模式。在狭义的定义下&#xff0c;借壳上市是指一家已上市的公司的控股母公司&am…

React【异步逻辑createAsyncThunk(一)、createAsyncThunk(二)、性能优化、createSelector】(十二)

文章目录 异步逻辑 createAsyncThunk&#xff08;一&#xff09; createAsyncThunk&#xff08;二&#xff09; 性能优化 createSelector 异步逻辑 //Product.js const onAdd () > {const name nameRef.current.value// 触发添加商品的事件dispatch(addProduct({name…

vue3介绍

介绍 3完全兼容2的语法 vue3&#xff1a;体积更小&#xff0c;性能会更高。底层做了很多优化 2倍左右 vue3vitets 渐进式框架 vue3和vue2 的区别 新语法&#xff0c;性能上提升很多 思想是一致的&#xff1a;动态绑定&#xff1a;状态data&计算属性&#xff0c;监听某些状态…

超声波俱乐部分享:Enter AI native application

11月5日&#xff0c;2023年第十四期超声波俱乐部内部分享会在北京望京举行。本期的主题是&#xff1a;Enter AI native application。 到场的嘉宾有&#xff1a;超声波创始人杨子超&#xff0c;超声波联合创始人、和牛商业创始人刘思雨&#xff0c;蓝驰创投合伙人刘勇&#xf…