pytest-两种不同写法

news2024/11/24 2:09:41

XUnit 的写法

熟悉 unittest 框架的人都知道,unittest 里面 fixture 的写法是 setUp 和 tearDown,setUp_class 和 tearDown_class,只有这一种写法,而且是固定的写法哈。

Pytest 是兼容 unittest 的,当然也支持这样写:

from datetime import datetime
from time import sleep
from unittest import TestCase
class TestMikigo(TestCase):

    def setUp(self):
        print("我是前置", datetime.now())
        sleep(1)

    def test_001(self):
        print("我是用例", datetime.now())
        sleep(1)

    def tearDown(self):
        print("我是后置", datetime.now())

注意是继承了 unittest.TestCase 的,Pytest 可以兼容运行的,基本操作哈。

除此之外还有一些你没见过的 Xunit 写法:

from time import sleep
class TestMikigo:

    def setup(self):
        print("我是前置", datetime.now())
        sleep(1)

    def test_001(self):
        print("我是用例", datetime.now())
        sleep(1)

    def teardown(self):
        print("我是后置", datetime.now())
我是前置 2022-01-24 16:17:59.267900
我是用例 2022-01-24 16:18:00.269282
我是后置 2022-01-24 16:18:01.270688

你看,setup 和 teardown 这种写法也是会被自动识别的。

还有这种,看准了哈:

from datetime import datetime
from time import sleep
class TestMikigo:

    def setup_method(self):
        print("我是前置", datetime.now())
        sleep(1)

    def test_001(self):
        print("我是用例", datetime.now())
        sleep(1)

    def teardown_method(self):
        print("我是后置", datetime.now())
我是前置 2022-01-24 16:24:57.456212
我是用例 2022-01-24 16:24:58.457273
我是后置 2022-01-24 16:24:59.458097

setup_method 和 teardown_method 也可以。

这里还要讲一下 setup_method 和 setup_function 的区别,setup_function 是在基于函数的用例写法时使用的,setup_method 是基于类的用例写法使用的,我面试别人的时候喜欢问这两个的区别,如果知道这个的,基本对本部分内容是了解的。

以上只是用例级别的,下面说下类级别的写法:

from datetime import datetime
from time import sleep
class TestMikigo:

    def setup_class(self):
        print("我是类前置", datetime.now())
        sleep(1)

    def setup_method(self):
        print("我是用例前置", datetime.now())
        sleep(1)

    def test_001(self):
        print("我是用例", datetime.now())
        sleep(1)

    def teardown_method(self):
        print("我是用例后置", datetime.now())
        sleep(1)

    def teardown_class(self):
        print("我是类后置", datetime.now())
我是类前置 2022-01-24 16:31:59.411548
我是用例前置 2022-01-24 16:32:00.411892
我是用例 2022-01-24 16:32:01.413373
我是用例后置 2022-01-24 16:32:02.414377
我是类后置 2022-01-24 16:32:03.415521

直接写成 setup_class 就可以了,在 unitest 里面类级别的是需要加类方法装饰器 @classmethod 的,pytest 里面可加可不加,看你喜欢。

模块级别的就用 setup_module,会话级别的就用 setup_session,这都好理解,这里就不举例了。

fixture 写法

前面 Xunit 的写法已经很灵活了,但是 Pytest 真正厉害的是它自己特有的 fixture 写法。

from datetime import datetime
from time import sleep
import pytest
class TestMikigo:

    @pytest.fixture(scope="function")
    def do_something_before(self):
        print("我是用例前置", datetime.now())
        sleep(1)
        yield
        print("我是用例后置", datetime.now())

    def test_001(self, do_something_before):
        print("我是用例", datetime.now())
        sleep(1)

这里有几点要注意:

  • fixture 必须要加@pytest.fixture() 装饰器;
  • scope 为 fixture 级别;
  • fixture 的函数名 do_something_before 可以自定义,但是不要和 Xunit 的函数名一样,不然就乱掉了。
  • yield 之前是前置,yield 之后是后置,这里实际上是利用了生成器的原理;
  • 函数名 do_something_before 需要显式的传入用例参数:
def test_001(self, do_something_before):
    print("我是用例", datetime.now())
    sleep(1)

或者使用 @pytest.mark.usefixtures() ,就像这样:

@pytest.mark.usefixtures("do_something_before")  # 也可以放到类名前面,表示对这个类里面所有的用例都生效。
def test_001(self):
    print("我是用例", datetime.now())
    sleep(1)

不过这种写法我个人不建议哈,字符串的形式属于硬编码,不好维护。

这里要好好理解一下哈,短短的几句话,其实包含了很多内容哦。这种写法没有一个严格的定式,更多是一种模式。

欢迎关注公众号,与Joker一起探索测试之道。


参考链接:https://juejin.cn/post/7221769090834481189

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

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

相关文章

B : 斐波那契数列第n项Plus

Description 斐波那契数列即 1, 1, 2, 3, 5...,�(�)�(�−1)�(�−2) 。求斐波那契数列第 n 项 Input 每组数据给出 1≤�≤109 。 Output 斐波那契数列第 n 项 对 1097 取模 Sam…

hadoop词频统计

1 Hadoop 安装与伪分布的搭建 2 Hadoop词频统计 此文章基于搭建好hadoop之后做的词频统计实验,以上是链接为搭建hadoop的教程 目录 1 HDFS 文件系统常用命令 2 词频统计实验准备工作 2.1 启动hadoop 关闭防火墙 2.2 查看图形化界面 2.3 文件上传 3 词频统计…

实现点击按钮导出页面pdf

在Vue 3 Vite项目中,你可以使用html2canvas和jspdf库来实现将页面某部分导出为PDF文档的功能。以下是一个简单的实现方式: 1.安装html2canvas和jspdf: pnpm install html2canvas jspdf 2.在Vue组件中使用这些库来实现导出功能:…

ios13多窗口(UIWindowScene)学习笔记

ios13引入了UIWindowScene类、UIWindowSceneDelegate协议以便支持多窗口功能,但其适用于ipad,不适用于iphone,因为iphone不支持多窗口功能。注意,这里说的窗口不是UIWindow,而是UIWindowScene。 ios13前后的app的UI架…

结构体 -------- 函数-------传参

在函数题中 return 只能传一个值 如果函数体(struct fs a,struct fs b)传来了两个值,怎么才能只输出一个值呢? 同样要定义一个struct fs 类型的变量 result; 这样不仅可以访问到结构体中的变量a&#…

ESP32实现UDP连接——micropython版本

代码: import network import socket import timedef wifiInit(name, port):ap network.WLAN(network.AP_IF) # 创建一个热点ap.config(essidname, authmodenetwork.AUTH_OPEN) # 无需密码ap.active(True) # 激活热点ip ap.ifconfig()[0] # 获取ip地址print(…

短视频矩阵系统:打造品牌影响力的新方式

一、短视频矩阵概念 短视频营销革命:一站式解决策略!短视频矩阵系统是一款专为企业营销设计的高效工具,旨在通过整合和优化众多短视频平台资源,为企业呈现一个全面的短视频营销策略。该系统致力于协助企业以迅速且高效的方式制作…

Node.js全栈指南:静态资源服务器

上一章【认识 MIME 和 HTTP】。 我们认识和了解了 MIME 的概念和作用,也简单地学习了通过浏览器控制台查看请求和返回的用法。 通过对不同的 HTML、CSS、JS 文件进行判断,设置不同的 MIME 值,得以让我们的浏览器正正确地接收和显示不同的文…

2095.删除链表的中间节点

给你一个链表的头节点 head 。删除链表的中间节点 ,并返回修改后的链表的头节点 head。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点(下标从 0 开始),其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n 1、2、3、4 和…

逻辑这回事(七)---- 器件基础

Xilinx FPGA创建了先进的硅模块(ASMBL)架构,以实现FPGA具有针对不同应用程序领域优化的各种功能组合的平台。通过这一创新,Xilinx提供了更多的设备选择,使客户能够为其特定设计选择具有正确的功能和功能组合的FPGA。ASMBL体系结构通过以下方式突破了传统的设计障碍:消除几…

HarmonyOS Next开发学习手册——选项卡 (Tabs)

当页面信息较多时,为了让用户能够聚焦于当前显示的内容,需要对页面内容进行分类,提高页面空间利用率。 Tabs 组件可以在一个页面内快速实现视图内容的切换,一方面提升查找信息的效率,另一方面精简用户单次获取到的信息…

大家都在跳槽,我需要跳槽吗?

文章目录 1. 前言2. 最初的跳槽想法萌芽3. 跳槽想法的再次萌芽4. 我是否需要跳槽呢?5. 那些跳槽的同学怎么样了?6. 小结 1. 前言 两周前,看到研究生同班同学发的一条朋友圈,内容为”下一站 杭州~”,配图是拍的北京开往杭州的列车…

软件框架(Framework)是什么?

可实例化的、部分完成的软件系统或子系统,它为一组系统或子系统定义了统一的体系结构(architecture),并提供了构造系统的基本构造块(building blocks),还为实现具体功能定义了扩展点(extending points)。 框架实现了体系结构级别的复用。 其…

八爪鱼现金流-031,宽带到期记一笔负债

到期了,新弄的网络,记录一下负债包。 八爪鱼现金流 八爪鱼

昇思25天学习打卡营第4天|函数式自动微分

学习目标: 重温高数知识,回顾导数、微分、偏导数‘全微分、方向导数、梯度;斜率、切线、切平面,法相平面、法线的知识’ 函数微分与导数的含义 多元函数偏导数、全微分 函数式自动微分应用实践 昇思大模型 ,mindspor…

STM32第十三课:DMA多通道采集光照烟雾

文章目录 需求一、DMA(直接存储器存取)二、实现流程1.时钟使能2.设置外设寄存器地址3.设置存储器地址4.设置要传输的数据量5.设置通道优先级6.设置传输方向7.使通道和ADC转换 三、数据处理四、需求实现总结 需求 通过DMA实现光照强度和烟雾浓度的多通道…

JAVA期末速成库(12)第十三章

一、习题介绍 第十三章 Check Point:P501 13.3,13.17,13.28,13.29 Programming Exercise:13.1,13.6,13.11 二、习题及答案 Check Point: 13.3 True or false? a. An abst…

【做一道算一道】太平洋大西洋水流问题

太平洋大西洋水流问题 有一个 m n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights &…

零基础开始学习鸿蒙开发-读书app简单的设计与开发

目录 1.首页设计 2.发现页面的设计 3.设置页面的设计 4.导航页设计 5.总结: 6.最终的效果 1.首页设计 Entry Component export struct home {State message: string 首页build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.B…

Golang-map理解

golang-map语雀笔记整理 map的底层实现hmapbmap map是如何做到O(1)的复杂度的?map扩容策略 师兄问题回答 map的底层实现 hmap hmap的结构体核心字段有:buckets 桶数组地址, B 定位值,桶的数目是2^B个, count 当前map的…