Pytest用例运行及先后顺序

news2025/6/29 23:57:55

温馨提示

本篇约1600字,看完需3-5分钟,学习学半小时,加油!

先看普通函数运行顺序

import pytest

def test_one():
    print("我是清安")

def test_02():
    print("--02--")

def test_a():
    print("--a--")

def test_a_1():
    print("--a_01__")

def test_01():
    print("--01--")

可以看到,这样写,用例的运行先后顺序根据自己写的先后函数顺序进行执行的。
那么写到类中呢?

import pytest

class Testcase:
    def test_one(self):
        print("我是清安")

    def test2(self):
        print("--02--")

    def test_a(self):
        print("--a--")

    def test_a_1(self):
        print("--a_01__")

    def test1(self):
        print("--01--")

没有丝毫变化。

模块用例运行先后顺序

首先准备两个.py文件,名称为test_a,test_b。内容如下:

import pytest

class Test_a:
    def test_a1(self):
        print(f"我是-{__class__.__name__}-类")
import pytest

class Test_b:
    def test_b1(self):
        print(f"我是-{__class__.__name__}-类")

看,是有先后顺序的。其实你也可以理解为是Pycharm已经事先排过一次顺序了,按a-z亦或者1-9这样的顺序已经排过了,因为,你在创建.py文件的时候,就已经产生了顺序,pytest只是按照特定顺序进行测试而已。

前置后置

import pytest

class Testcase():
    def setup(self):
        """每个方法用例运行前运行"""
        print("---1-set---")

    def teardown(self):
        """每个方法用例运行后运行"""
        print("---1-down---")

    def setup_class(self):
        """每个 class 运行前运行(只运行一次)"""
        print("---2-set class---")

    def teardown_class(self):
        """每个 class 运行后运行(只运行一次)"""
        print("---2-down class---")

    def test_02(self):
        print("--02--")

    def test_01(self):
        print("--01--")

它会告诉你teardowm在后续准备取消了,建议改用teardowm_method,改完后再跑,就不会出现这种警告了。(setup改setup_method以及teardowm改teardowm_method此处需自己改动)

并且是不计入用例的。并且它不会像unittest一样根据用例的名称来自动判断执行用例的先后顺序。它有自己的方式方法。

💥注意看优先级,以及代码中的注释,setup_class先运行,并且直到代码全部跑完,teardown_class才运行,其中setup_method以及teardowm_method每个用例运行的时候前后都会运行一次。

用例先后顺序设定

这就需要用到第三方插件了

pip install pytest-ordering
import pytest

class Testcase():
    def setup_method(self):
        """每个方法用例运行前运行"""
        print("---1-set---")

    def teardown_method(self):
        """每个方法用例运行后运行"""
        print("---1-down---")

    def setup_class(self):
        """每个 class 运行前运行(只运行一次)"""
        print("---2-set class---")

    def teardown_class(self):
        """每个 class 运行后运行(只运行一次)"""
        print("---2-down class---")

    def setup_module(self):
        """模块运行前运行(只运行一次)"""
        print("---3-module class---")

    def teardown_module(self):
        """模块运行后运行(只运行一次)"""
        print("---3-module class---")
        
    @pytest.mark.run(order=2)
    def test_02(self):
        print("--02--")

    @pytest.mark.run(order=1)
    def test_01(self):
        print("--01--")

如上简单的小测试,以便于了解。接下来详细说说!

源码小片段

orders_map = {
    'first': 0,
    'second': 1,
    'third': 2,
    'fourth': 3,
    'fifth': 4,
    'sixth': 5,
    'seventh': 6,
    'eighth': 7,
    'last': -1,
    'second_to_last': -2,
    'third_to_last': -3,
    'fourth_to_last': -4,
    'fifth_to_last': -5,
    'sixth_to_last': -6,
    'seventh_to_last': -7,
    'eighth_to_last': -8,
}

上述是源码中对于优先级

一个小示范

import pytest

class Testnew:

    @pytest.mark.second
    def testa_02(self):
        print("--02--")

    @pytest.mark.third
    def testa_03(self):
        print("--03--")

    @pytest.mark.fourth
    def testa_04(self):
        print("--04--")

    @pytest.mark.first
    def testa_01(self):
        print("--01--")

鉴于上述,运行的时候会提示一系列的信息(此处不展示),看着不爽,可以:

import pytest


class Testnew:

    @pytest.mark.run(order=2)
    def testa_02(self):
        print("--02--")

    @pytest.mark.run(order=3)
    def testa_03(self):
        print("--03--")

    @pytest.mark.run(order=4)
    def testa_04(self):
        print("--04--")

    @pytest.mark.run(order=1)
    def testa_01(self):
        print("--01--")

当然上述代码中你也可以写入负数,也是可以的。

执行特定的用例

也就是前面讲过的-k参数。一起看看

import pytest

class Test_new:
    def test_b2(self):
        print("**b2**")

    def test_b1(self):
        print("**b1**")

    def test_a1(self):
        print("--a1--")

    def test_a2(self):
        print("--a2--")

它可以帮助我们过滤掉一些不想运行的用例,也是一个很不错且比较常用的参数。

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

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

相关文章

老生常谈的一个问题,转行学习编程,是自学还是报班

1、自学 a、优点: 1、自我分析问题和自我解决问题的能力比较的强: 自学要自己的找学习资料,学习要自己的摸索学习,学习中遇到的问题要自己去分析,自己去解决。 通过自学成功的人往往自我分析问题和自我解决问题的能…

Android实现戴口罩人脸检测和戴口罩识别(附Android源码)

Android实现戴口罩人脸检测和戴口罩识别(附Android源码) 目录 Android实现戴口罩人脸检测和戴口罩识别(附Android源码) 1.戴口罩识别的方法 (1)基于多类别目标检测的戴口罩识别方法 (2)基于人脸检测戴口罩分类识别方法 2.戴…

【Javassist】快速入门系列05 当有指定方法调用时替换方法调用的内容

系列文章目录 01 在方法体的开头或结尾插入代码 02 使用Javassist实现方法执行时间统计 03 使用Javassist实现方法异常处理 04 使用Javassist更改整个方法体 05 当有指定方法调用时替换方法调用的内容 文章目录系列文章目录前言引入Javassist jar包当有指定方法调用时替换方法…

1. 位1的个数

文章目录题目解法一:右移统计解题思路代码实现复杂度分析解法二:清除最低位解题思路代码实现复杂度分析解法三:分治解题思路代码实现复杂度分析解法四:JDK Integer.bitCount(int i)代码实现题目 编写一个函数,输入是一…

DPU02:国产USB转UART的桥接控制器兼容替代CP2102

目录DPU02芯片特性USB配置数据和序列号设置DPU02应用领域DPU02是高度集成的USB转UART的桥接控制器芯片,可将RS-232设计更新为USB设计,并简化PCB组件空间。DPU02包括了一个USB 2.0全速功能控制器、USB收发器、振荡器、EEPROM和带有完整调制解调控制信号的…

一文详解深度学习冷板式液冷散热技术规范及要求

深度学习 | 东数西算 | 液冷散热 数据挖掘 | 数据分析 | 高性能计算 随着深度学习、东数西算、医药研发、数据分析、数据挖掘、遥感测绘、高性能计算等技术的快速发展,数据中心的创建与日俱增,传统的风冷散热方式已经不同满足数据中心散热的需求&#x…

Huffman二进制编码以及文本的压缩与解压

目录Huffman树转化成二进制编码文本压缩文本解压Huffman树转化成二进制编码 在上一篇博客的末尾,将Huffman树转化成了01 构成的字符串,显然在实际应用中不是这种操作。我们实际想要的是01构成的一串bits;举个例子:字符"A&quo…

HTTP权威指南------URL与资源

目录 URL标准格式 URL快捷方式 动扩展URL 字符 方案详解 web基础中介绍了URI、URL与URN; URI是一类更通用的资源标识符,URL是它的一个子集; URI是一个通用的概念,它主要由URL与URN组成; URL是通过描述资源的位…

【Kafka】Linux下搭建kafka服务,完整学习案例

【Kafka】Linux下搭建kafka服务,完整学习代码案例(一)Kafka架构基础【1】图解kafka是什么?(1)为什么需要消息队列(2)Topic主题(3)分区(4&#xff…

【UE4 第一人称射击游戏】06-设置动画角色2

步骤: 1.打开“WalkRun_BS”,将最左边中间的点和最右边中间的点的动画改为“walk_backward_inPlace” 2.打开“SWAT_AnimBP”,双击“Walk_Run” 双击“Walk_Run” 将混合空间“WalkRun_BS”拖入 将“Direction”和“Speed”提升为变量&#…

车载以太网 - 初识DoIP - 01

1、DoIP是什么? 从表达形式上 它就是UDS诊断套上车载以太网的马甲,然后实现UDS诊断的所有内容。通过下图DoIP的报文帧格式,从下面往上看,最尾部的数据我们能够很清晰的看到,User Data实际上就是UDS诊断数据,比如:10 03亦或是22 F1 86等信息。然后再往前就是源地址和目标…

Python通过Spleeter实现音唱人声(歌声)伴奏分离

程序示例精选 Python实现音唱人声(歌声)伴奏分离 如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助! 前言 这篇博客针对《Python实现音唱人声(歌声)伴奏分离》编写代码,功能包括了人声(歌声)-伴奏分离。运…

Dubbo、Spring Cloud和kubernetes该如何选型?

文章目录背景微服务的公共关注点微服务平台的选型横向比对微服务优劣比对背景 做技术选型。如果缺乏足够的经验,对so a啊,微服架构原理以及整个行业服务化演进的历史缺乏了解。 那么,对这个三个产品该如何选择啊?的确会感到困惑。…

想做副业怎么才能找到适合的项目,六条建议让你找副业不再迷茫

大家好,我是蝶衣王的小编 现在疫情反复,赚钱太难了。许多年轻人想发展副业。而现实情况往往是不知道做什么以及如何做,这是非常令人困惑的。我在这里分享六个要点,让你找到合适的项目。 六个步骤分别是 会观察、观察相关信息和赚…

有趣的网站分享——福音戰士標題生成器

说起文字标题生成器其实也是有一定的历史了。 他们往往源于某种媒介所带来的个性化标题的出现(比如动画或电影、广告、产品Logo等)。 被互联网群众察觉分享后在模因传播的现象下深入人心。 比如下面这样的: 就出自知名交友网站P…… 额咳。…

快速入门Spring MVC 一篇就够了

前言 我们前面学习了Spring两大核心机制IoC和AOP,接下来我们一起来学习Spring MVC。这篇文章带你快速入门Spring MVC。 Spring MVC概述 Spring MVC是目前主流的实现MVC设计模式的框架,是Spring框架的一个分支产品,以Spring loC容器为基础&…

Fabric.js 铅笔笔刷

本文简介 点赞 关注 收藏 学会了 fabric.js 的铅笔其实是继承基础画笔的一个工具,在基础画笔的基础上多了“拐角平滑度”等配置项。 本文讲解铅笔的基础用法以及常用事件。 常规配置 真实世界的铅笔有不同的型号,颜色的深浅、笔芯的硬度都是不同的…

90后,27岁转行软件测试,从月入3000+到月薪过万,打开了人生新篇章~

承蒙时光不弃,感谢努力的自己。以前总是在某些鸡汤文中看到这句话,当时觉得过于矫情,而如今当我突破重重困难成功转行,收获了更好的人生后,才发自内心的也有了这样的感叹。 几个月的努力和辛劳,一时之间难以…

转互联网好难,如何避免无效转行?

如果你现在是在传统行业工作,想转行互联网,应该怎么做呢? 很多人经常会担心自己的行业、专业、年龄等等会是障碍,或者自己没有经验,去面试的时候公司却都需要相关经验的人,怎么办呢? 这篇文章…

图形驱动软件栈

图形驱动软件栈 HINZER,2022年,我在北京。芯片设计行业,GPU 固件和驱动开发,对嵌入式系统感兴趣。 1 说明背景 1.1 近来想法 做了一段时间的 GPU 固件和驱动开发,加上平时学习的一些零散的知识,最近打算整…