pytest学习和使用10-Pytest中的测试用例如何跳过执行?

news2025/1/13 17:04:41

10-Pytest中的测试用例如何跳过执行?

  • 1 引入
  • 2 Unittest中的用例跳过
  • 3 pytest.mark.skip
  • 4 pytest.skip()
  • 5 pytest.mark.skipif()
  • 6 跳过标记
  • 7 pytest.importorskip

1 引入

  • 有时候我们需要对某些指定的用例进行跳过,或者用例执行中进行跳过,在Unittest中我们使用skip()方法;
  • Pytest中如何使用呢?
  • Pytest中也提供了两种方式进行用例的跳过 skip、skipif

2 Unittest中的用例跳过

# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/11/17 
# 文件名称:test_unittest_skip.py
# 作用:验证unittest的skip
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import unittest

class TestCase(unittest.TestCase):
    def test_1(self):
        print("用例1")

    def test_2(self):
        print("用例2")

    @unittest.skip("该用例不执行,没用")
    def test_3(self):
        print("用例3")


if __name__ == '__main__':
    unittest.main()
======================== 2 passed, 1 skipped in 0.05s =========================

进程已结束,退出代码 0
PASSED                           [ 33%]用例1
PASSED                           [ 66%]用例2
SKIPPED (该用例不执行,没用)     [100%]
Skipped: 该用例不执行,没用

3 pytest.mark.skip

  • pytest.mark.skip 可标记无法运行的测试功能,或者您希望失败的测试功能;
  • 简单说就是跳过执行测试用例;
  • 可选参数reason:是跳过的原因,会在执行结果中打印;
  • 可以使用在函数上,类上,类方法上;
  • 使用在类上面,类里面的所有测试用例都不会执行;
  • 作用范围最小的是一个测试用例;
  • 这个功能和unittest基本是一样的。
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/11/17 
# 文件名称:test_pytest_skip.py
# 作用:验证pytest的skip功能
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import pytest

@pytest.fixture(scope="module")
def start():
    print("打开浏览器,输入用户名和密码登陆")
    # yield
    # print("关闭浏览器")

def test_1(start):
    print("用例1......")

def test_2(start):
    print("用例2......")

@pytest.mark.skip(reason="用例3不用执行")
def test_3(start):
    print("用例3......")

class TestA():

    def test_4(self):
        print("用例4......")

    @pytest.mark.skip(reason="用例5不用执行")
    def test_5(self):
        print("用例5......")

@pytest.mark.skip(reason="该类中的用例不用执行")
class TestB():
    def test_6(self):
        print("用例6......")


if __name__ == '__main__':
    pytest.main(["-s", "test_pytest_skip.py"])

test_pytest_skip.py::test_1              打开浏览器,输入用户名和密码登陆
PASSED                                   [ 16%]用例1......

test_pytest_skip.py::test_2 PASSED       [ 33%]用例2......

test_pytest_skip.py::test_3 SKIPPED      (用例3不用执行)  [ 50%]
                                          Skipped: 用例3不用执行

test_pytest_skip.py::TestA::test_4 PASSED  [ 66%]用例4......

test_pytest_skip.py::TestA::test_5 SKIPPED (用例5不用执行)  [ 83%]
                                            Skipped: 用例5不用执行

test_pytest_skip.py::TestB::test_6 SKIPPED (该类中的用例不用执行)   [100%]
                                            Skipped: 该类中的用例不用执行


======================== 3 passed, 3 skipped in 0.04s =========================

4 pytest.skip()

  • pytest.skip()不同于pytest.mark.skippytest.mark.skip是作用于整个测试用例;
  • pytest.skip()是测试用例执行期间强制跳过不再执行剩余内容;
  • Python中break 跳出循环类似,如下:
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/11/17 
# 文件名称:test_pytest_skip1.py
# 作用:验证pytest的skip()函数功能
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import pytest
import time

@pytest.fixture()
def start():
    print("打开浏览器,输入用户名和密码登陆")
    yield
    print("关闭浏览器")

def test_1(start):
    print("用例1......")
    i = 1
    while True:
        print(time.time())
        i += 1
        if i == 6:
            pytest.skip("打印5次时间后,第六次不再打印了~")

if __name__ == '__main__':
    pytest.main(["-s", "test_pytest_skip1.py"])

test_pytest_skip1.py::test_1 打开浏览器,输入用户名和密码登陆
SKIPPED (打印5次时间后,第六次不再打印了~)  [100%]用例1......
1668677189.0525532
1668677189.0525532
1668677189.0525532
1668677189.0525532
1668677189.0525532

Skipped: 打印5次时间后,第六次不再打印了~
关闭浏览器


============================= 1 skipped in 0.02s ==============================

  • pytest.skip(msg="",allow_module_level=True )时,设置在模块级别跳过整个模块,如下:
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/11/17 
# 文件名称:test_pytest_skip2.py
# 作用:验证pytest的skip()参数allow_module_level=True功能
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import pytest
import time
import sys

if sys.platform.startswith("win"):
    pytest.skip("跳过Windows平台的用例", allow_module_level=True)

@pytest.fixture()
def start():
    print("打开浏览器,输入用户名和密码登陆")
    yield
    print("关闭浏览器")

def test_1(start):
    print("用例1......")
    i = 1
    while True:
        print(time.time())
        i += 1
        if i == 6:
            pytest.skip("打印5次时间后,第六次不再打印了~")


if __name__ == '__main__':
    pytest.main(["-s", "test_pytest_skip2.py"])

collected 0 items / 1 skipped

============================= 1 skipped in 0.02s ==============================

5 pytest.mark.skipif()

  • 在条件满足时,跳过某些用例;
  • 参数为pytest.mark.skipif(condition, reason="")
  • condition需要返回True才会跳过。
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/11/17 
# 文件名称:test_pytest_skipif.py
# 作用:验证pytest的skipif()功能
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import pytest
import time
import sys

@pytest.mark.skipif(sys.platform == "win32", reason="Windows平台不执行")
class TestA():
    @pytest.fixture()
    def start(self):
        print("打开浏览器,输入用户名和密码登陆")
        yield
        print("关闭浏览器")

    def test_1(self, start):
        print("用例1......")
        i = 1
        while True:
            print(time.time())
            i += 1
            if i == 6:
                pytest.skip("打印5次时间后,第六次不再打印了~")


if __name__ == '__main__':
    pytest.main(["-s", "test_pytest_skipif.py"])

test_pytest_skipif.py::TestA::test_1 SKIPPED (Windows平台不执行)         [100%]
Skipped: Windows平台不执行


============================= 1 skipped in 0.02s ==============================

6 跳过标记

  • 简单理解为把pytest.mark.skippytest.mark.skipif 赋值给一个标记变量;
  • 不同模块之间共享这个标记变量;
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/11/17 
# 文件名称:test_pytest_skipif1.py
# 作用:验证pytest的skipif()功能
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import pytest
import time
import sys

mark1 = pytest.mark.skipif(sys.platform == "win32", reason="Windows平台不执行")
mark2 = pytest.mark.skip("不用执行这个用例")

@mark1
class TestA():
    @pytest.fixture()
    def start(self):
        print("打开浏览器,输入用户名和密码登陆")
        yield
        print("关闭浏览器")

    def test_1(self, start):
        print("test case 1 ......")

@mark2
def test_2(self, start):
    print("test case 2 ......")


if __name__ == '__main__':
    pytest.main(["-s", "test_pytest_skipif1.py"])

test_pytest_skipif1.py::TestA::test_1 SKIPPED (Windows平台不执行)        [ 50%]
Skipped: Windows平台不执行

test_pytest_skipif1.py::test_2 SKIPPED (不用执行这个用例)                [100%]
Skipped: 不用执行这个用例


============================= 2 skipped in 0.02s ==============================

7 pytest.importorskip

  • 参数为:( modname: str, minversion: Optional[str] = None, reason: Optional[str] = None )
参数说明
modname模块名
minversion版本号
reason原因
  • 作用为:如果缺少某些导入,则跳过模块中的所有测试;

  • pip list下,我们找一个存在的版本的包试试:

在这里插入图片描述

  • 比如attrs,版本为20.3.0,代码如下:
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/11/17 
# 文件名称:test_pytest_importskip.py
# 作用:验证pytest的importskip功能
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import pytest
import amqp

attrs = pytest.importorskip("attrs", minversion="20.3.0")
@attrs
def test_1():
    print("=====模块不存在")

def test_2():
    print("=====模块存在")

if __name__ == '__main__':
    pytest.main(["-s", "test_pytest_importskip.py"])

Skipped: could not import 'attrs': No module named 'attrs'
collected 0 items / 1 skipped

============================= 1 skipped in 0.05s ==============================
  • 再比如sys,版本为1.1.1,引入包后,显示如下:
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/11/17 
# 文件名称:test_pytest_importskip1.py
# 作用:验证pytest的importskip功能
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import pytest
import sys

sys1 = pytest.importorskip("sys", minversion="1.1.1")

@sys1
def test_1():
    print(sys.platform)
    print("=====模块存在")


if __name__ == '__main__':
    pytest.main(["-s", "test_pytest_importskip1.py"])

Skipped: module 'sys' has __version__ None, required is: '1.1.1'
collected 0 items / 1 skipped

============================= 1 skipped in 0.03s ==============================

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高项 成本管理论文

4个过程 1,规划成本:为规划、管理、花费和控制项口成本而制定政策、程序和文档的过程。 2,估算成本:对完成项目活动所需资金进行近似估算的过程。 3,制定预算:汇总所有单个活动或工作包的估算成本&…

【面试题】JavaScript面试题详细总结(一)

js基础部分 01 值类型与引用类型 1.1 问法 js判断数据类型?js值类型与引用类型有哪些?值类型与引用类型的区别? 1.2 介绍 JavaScript存储数据两个区域:栈和堆 栈:通常空间是固定的(占据空间小、大小固定&…

MySQL基础|数据库存储时间段,数字从指定值递增AUTO_INCREMENT【详细版,建议收藏】

今天,在写SQL语句存储时间时遇到了一些问题,最后成功解决了 mysql基础一、时间字段的格式限制(一)精确到秒的表达1、错误的表达2、解决方式如下3、查看创建的表(二)存储一个时间段1、错误的表达语句2、解决…

一个优秀的程序员应该养成哪些好的习惯?

文章目录一、写代码前先想好思路,先规划框架,再到局部实现二、注重代码风格三、注重代码执行效率四、掌握一些编码原则五、解决问题时,对于原理性的问题,不要面向搜索引擎编程。六、注重基础知识的学习,不忙碌跟风新技…

分享美容美发会员管理系统功能的特点_分享美容美发会员管理系统的制作

人们越来越关心美发,美发行业发展迅速,小程序可以连接在线场景,许多美发院也开发了会员卡管理系统。那么一个实用的美发会员管理系统怎么制作呢?它有什么功能?我们一起来看看~(干货满满,耐心看完…

艾美捷Immunochemistry FAM FLICA Poly Caspase检测方案

Caspases在细胞凋亡和炎症中发挥重要作用。ICT的FLICA检测试剂盒被研究人员用于通过培养的细胞和组织中的胱天蛋白酶活性来定量凋亡。FAM FLICA Poly Caspase探针允许研究人员评估胱天蛋白酶的激活。 用艾美捷Immunochemistry FAM-FLICA Poly caspase检测试剂盒检测活性半胱天冬…

2022年信息学部物联网工程学院学生科协机器学习科普

什么是机器学习 机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。 它是人…

【安全学习】记一次内网环境渗透

注意: 本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习目的,如果列出的技术用于其他任何目标&#xff…

讲讲 Redis 缓存更新一致性,看了都说好!

当执行写操作后,需要保证从缓存读取到的数据与数据库中持久化的数据是一致的,因此需要对缓存进行更新。 因为涉及到数据库和缓存两步操作,难以保证更新的原子性。 在设计更新策略时,我们需要考虑多个方面的问题: 对系统吞吐量的影…

那些测试行业的细分岗位,你知道多少?薪资又如何?

软件测试是个需求多,就业机会大的职业。目前,我国具备软件测试能力的人员数量和市场需求相差巨大,巨大的市场空缺,使软件测试工程师从初级到高级,只需要 1 年甚至更短的时间来完成。所以作为一名软件测试工程师&#x…

【北亚数据恢复】不认盘的移动硬盘恢复数据案例解决方案

【案例一】 一块西数移动硬盘不小心摔了,插到电脑上就不认盘,之后没在其他的任何操作。这是比较典型的硬盘故障类型:故障原因就是移动硬盘磁头损坏。 北亚数据恢复工程师在用户同意的前提下开盘,对移动硬盘开盘换磁头。&#xff0…

8.5 Spring解决循环依赖的机理(AOP)

8.5 Spring解决循环依赖的机理(AOP) MyAspect Aspect public class MyAspect {After(value "execution(* com.cjf.bean.B.*(..))")public void myAfter(){System.out.println("最终通知的功能.........");} }SpringBean.xml <aop:aspectj-autoproxy&g…

Unity游戏Mod/插件制作教程03 - 插件实例1: HelloWorld

准备工作 作为编程类的教程&#xff0c;果然第一个需要来一个传统项目——HelloWolrd。 在开始之前&#xff0c;我先贴一个链接&#xff0c;这是BepInex官方的开发手册 https://bepinex.github.io/bepinex_docs/v5.0/articles/dev_guide/index.html 有什么问题也可以翻阅官方的…

论文阅读【6】RRN:LSTM论文阅读报告(1)

lstm类似于Simple_RNN,但是又比他复杂很多.我是参考这个视频的老师讲解的,这个老师讲解的非常好.https://www.bilibili.com/video/BV1FP4y1Z7Fj?p4&vd_source0a7fa919fba05ffcb79b57040ef74756 lstm的最重要的设计就是那一条传输带,即为向量CtC_tCt​,过去的信息通过他传送…

跨程序共享数据:Android四大组件之内容提供器

跨程序共享数据&#xff1a;Android四大组件之内容提供器前言七、跨程序共享数据&#xff1a;Android四大组件之内容提供器7.1 内容提供器&#xff08;Content Provider&#xff09;简介7.2 运行时权限&#xff08;软件不能为所欲为&#xff0c;想要什么权限&#xff0c;还得主…

【project 】软件使用

project软件使用 1.如何为某任务或资源创建日历 创建新日历 工具->更改工作时间->新建->定义日历名称&#xff0c;选择“新建基准日历”->根据各承建商的日历创建相应的日历 使用新日历 拷贝各承建商的各项任务到指定的项目计划中&#xff0c;然后&#xff…

基于特征选择的二元蜻蜓算法(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

C. String Equality(思维)

Problem - 1451C - Codeforces Ashish有两个字符串a和b&#xff0c;每个字符串的长度为n&#xff0c;还有一个整数k。 他想通过对a进行一些&#xff08;可能是零&#xff09;操作&#xff0c;将字符串a转换成字符串b。 在一次操作中&#xff0c;他可以 选择一个索引i&#x…

哪吒汽车的技术发布会都发布了什么?纯干货抢先看

11月21日&#xff0c;哪吒汽车发布了浩智超算、浩智电驱、浩智增程三大技术品牌&#xff0c;并推出三款技术产品&#xff0c;包括智能汽车中央超算平台、800V SiC高性能电驱系统、高效三合一增程器。去年年底&#xff0c;哪吒曾经发布过山海平台&#xff0c;据说是一个支持哪吒…

性能环境搭建(0-CentOS7 安装配置)

1.前言 根据现有的组件&#xff0c;准备动手搭建一套完整的监控环境。既然是练手&#xff0c;还是在虚拟机里自己先练习一下。出了问题也好恢复。所有就先从最基本的开始。那就是操作系统开始搭建玩起来。 2.环境 资源有效利用吧&#xff0c;公司的资源能自由使用的那最方便…