【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==1def 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 itemstest01.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==1def 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 itemstest01.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==2def 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 itemstest01.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 02、跳过方法或用例,备注了原因
import pytest,sys
class Test(object):@pytest.mark.skip(reason='跳过一个方法或一个测试用例')def test_one(self):assert 1==2def 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 itemstest01.py s.                                                             [100%]=========================== short test summary info ===========================
SKIPPED [1] test01.py:414: 跳过一个方法或一个测试用例
======================== 1 passed, 1 skipped in 0.05s =========================Process finished with exit code 03、当条件满足,跳过方法或用例,备注了原因
import pytest,sys
class Test(object):@pytest.mark.skipif(1==1,reason='跳过一个方法或一个测试用例')def test_one(self):assert 1==2def 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 itemstest01.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==2def 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 itemstest01.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):@myskipdef test_one(self):assert 1==2def 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 itemstest01.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==2def 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 itemstest01.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.rhkb.cn/news/190397.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring IOC - Bean的生命周期之实例化

在Spring启动流程文章中讲到,容器的初始化是从refresh方法开始的,其在初始化的过程中会调用finishBeanFactoryInitialization方法。 而在该方法中则会调用DefaultListableBeanFactory#preInstantiateSingletons方法,该方法的核心作用是初始化…

元核云亮相金博会,智能质检助力金融合规

11月初,第五届中新(苏州)数字金融应用博览会|2023金融科技大会在苏州国际博览中心举办,围绕金融科技发展热点领域及金融行业信息科技领域重点工作,分享优秀实践经验,探讨数字化转型路径与未来发…

蓝桥杯每日一题2023.11.8

题目描述 题目分析 对于输入的abc我们可以以a为年也可以以c为年,将abc,cab,cba这三种情况进行判断合法性即可,注意需要排序去重,所以考虑使用set 此处为纯模拟的写法,但使用循环代码会更加简洁。 方法一: #include&…

物联网AI MicroPython学习之语法 network网络配置模块

学物联网,来万物简单IoT物联网!! network介绍 模块功能: 用于管理Wi-Fi和以太网的网络模块参考用法: import network import time nic network.WLAN(network.STA_IF) nic.active(True) if not nic.isconnected():…

SplayTree高分测试用例

测试用例结果展示 覆盖率 变异得分 测试注意点 从SplayTree测起,然后再测SubSplayTree,因为前者调用后者。SplaySubTree的remove方法大部分内容需要通过反射才能测到。value和index在SplayTree当中都不是唯一的。一个index可能对应多个value。 不足之…

【Maven教程】(十):使用 Hudson 进行持续集成—— 从Hudson的安装到任务创建 ~

Maven 使用 Hudson 进行持续集成 1️⃣ 持续集成的作用、过程和优势2️⃣ Hudson 简介与安装3️⃣ 准备 Subversion 仓库4️⃣ Hudson 的基本系统设置5️⃣ 创建 Hudson 任务5.1 Hudson 任务的基本配置5.2 Hudson 任务的源码仓库配置5.3 Hudson 任务的构建触发配置5.4 Hudson …

代码随想录 Day43 动态规划11 LeetCode T309 买卖股票的最佳时期含冷冻期 T714买卖股票的最佳时机含手续费

LeetCode T309 买卖股票的最佳时机含冷冻期 题目链接:309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode) 题目思路: 这题其实就是将卖出的状态拆分成三个状态 1.前两天就卖出并一直保持卖出的状态 2.今天卖出的状态 3.今天是冷冻期的状态 当然还有一个…

Sprint Boot 学习路线 6

测试 Spring提供了一组测试工具,可以轻松地测试Spring应用程序的各个组件,包括控制器、服务、存储库和其他组件。它具有丰富的测试注释、实用程序类和其他功能,以帮助进行单元测试、集成测试等。 JPA测试 Spring JPA(Java Pers…

DBever连接PG库

一、简介 DBeaver是一种通用数据库管理工具,适用于需要以专业方式使用数据的每个人;适用于开发人员,数据库管理员,分析师和所有需要使用数据库的人员的 免费(DBeaver Community) 的多平台数据库工具,支持 Windows、Li…

postswigger 靶场(CSRF)攻略-- 2.令牌验证

靶场地址: What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy (portswigger.net)https://portswigger.net/web-security/csrf 令牌(token)验证取决于请求方法 题目中已告知易受攻击的是电子邮件的更改功能&#xff0…

基因检测技术的发展与创新:安全文件数据传输的重要作用

基因是生命的密码,它决定了我们的身体特征、健康状况、疾病风险等。随着基因检测技术的高速发展,我们可以通过对基因进行测序、分析和解读,更深入地认识自己,预防和治疗各种遗传性疾病,甚至实现个性化医疗和精准健康管…

网络编程 初探windows编程

目录 一、什么是Winodws编程 二、开发环境搭建以及如何学习 三、VA助手安装 四、第一个Win32程序 五、窗口类句柄/窗口类对象 六、Winodws消息循环机制 七、Windows数据类型 一、什么是Winodws编程 Windows 编程指的是在 Microsoft Windows 操作系统上进行软件开发的过…

在报错中学python something

这里写目录标题 动手学深度学习pandas完整代码数据处理TypeError: can only concatenate str (not "int") to str(fillna填补缺失值) 创建文件夹学习这个数据分组get_dummies实现one hot encode 动手学深度学习pandas完整代码 import osimpor…

CCF CSP认证历年题目自练Day45

这几天搞泰迪杯数据分析技能赛去了。等拿国奖了就出一期关于泰迪杯的。 题目 试题编号: 201703-3 试题名称: Markdown 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   Markdown 是一种很流行的轻量级标记…

怎么设置代理IP进行网络爬取呢?代理访问网络如何设置?

在如今网络爬虫广泛应用的年代,很多时候我们都会遇到需要使用代理IP进行网络爬取的情况。代理IP可以帮助我们隐藏真实的IP地址,从而保护我们的隐私和安全。那么,怎么设置代理IP进行网络爬取呢?代理访问网络如何设置?下…

如何使用CORS和CSP保护前端应用程序安全

前端应用在提供无缝用户体验方面起着核心作用。在当今互联网的环境中,第三方集成和API的普及使得确保强大的安全性至关重要。安全漏洞可能导致数据盗窃、未经授权访问以及品牌声誉受损。本文将向您展示如何使用CORS和CSP为您的网页增加安全性。 嗨,大家好…

08.Diffusion Model数学原理分析(下)

文章目录 denoising matching term σ t z \sigma_tz σt​z的猜想Diffusion Model for SpeechDiffusion Model for TextMask-Predict 部分截图来自原课程视频《2023李宏毅最新生成式AI教程》,B站自行搜索。 书接上文。 denoising matching term E q ( x t ∣ x 0 …

极狐GitLab CI 助力 .Net 项目研发效率和质量双提升

目录 .NET nuget 自动生成测试包(prerelease)版本号 .NET 版本号规范 持续集成自动打包 持续集成自动修改版本号 .NET 行级增量代码规范——拯救老项目 本地全量代码规范 行级增量代码规范 很多团队或开发者都会使用 C#、VB 等语言开发 .Net 应用…

02-瑞吉外卖员工表的增删改查

添加员工信息 执行流程 第一步: 用户点击添加员工按钮跳转到add.html页面,然后在页面中输入要添加的员工的信息 第二步: 用户点击保存按钮发送Ajax请求将用户输入的员工信息以json的格式提交到服务端 第三步: 服务端Controller接收页面提交的json格式的数据并转化为java对象…

2022年06月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 Python中 print(“八进制{: o}”.format(12)) 正确的输出结果是?( ) A: 八进制:O B: 八进制:O14 C: 八进制14O D: 八进制14 答案:D 字符串的format()格式。 第2题 下列的程…