pytest框架前后置设置,以及pytest默认规则

2023-09-17 15:01:12

一、pytest框架的默认规则

1、模块名默认必须以test开头或者以test结尾
2、测试类必须以Test开头,并且不能有__init__方法
3、测试方法默认必须以test开头
当然以后的一些默认规则除测试类不能使用__init__方法外其余的都是可配置的,当然一般情况下我们也不会去修改这些默认配置。

二、使用setup 与teardown等方式实现用例的前后置

1.1、setup与teardown

此为函数级别实现前后置的方法,在每个测试用例运行前后都会调用前后置的方法。

class TestLogin:
    def setup(self):
        print('用例开始时执行')

    def teardown(self):
        print('用例结束时执行------>\n')

    def test_01_hujian(self):
        print('运行用例1')

    def test_02_hujian(self):
        print('运行用例2')


if __name__ == '__main__':
    pytest.main(['-vs', 'test_login.py'])

运行结果:可以看到在运行每条用例的前后都会调用前后方法
在这里插入图片描述

1.2、setup_class与 teardown_class

此为类级别的前后置方法,意思就是每个类运行前后才会运行一次该方法。

class TestLogin:
    def setup_class(self):
        print('用例开始时执行')

    def teardown_class(self):
        print('用例结束时执行------>\n')

    def test_01_hujian(self):
        print('运行用例1')

    def test_02_hujian(self):
        print('运行用例2')


运行结果:可以看到结果,在该类运行前后才会执行前后置方法。
在这里插入图片描述

2.3、setup_module、teardown_module

模块级别前后置方法,意思就是在一个python文件中可以存在多个类,各个类中存在各个测试用例,使用该前后置方法只会在类前后调用一次。值得注意的是该方法只能单独存在,不能写个某个类中哦。

def setup_module():
    print('用例开始时执行')


def teardown_module():
    print('用例结束时执行------>\n')


class TestLogin_01:

    def test_01_hujian(self):
        print('运行用例1')

    def test_02_hujian(self):
        print('运行用例2')


class TestLogin_02:
    def test_03_hujian(self):
        print('运行用例3')

    def test_04_hujian(self):
        print('运行用例4')

运行结果:
在这里插入图片描述
掌握上面三种基本方法基本就够了,不过今天的重点不是讲setup 与teardown,在pytest中一般使用fixture来实现前后置,这也是pytest框架的核心所在。

三、使用fixture来实现前后置功能

3.1、使用fixture的默认规则以及使用方法

1、fixture要放在conftest.py文件中,文件名是不可更改的。
2、在不同的用例py文件中可以使用同一个fixture文件,但是最后跟对应py文件在同一层级目录中。
3、在使用fixture时不需要任何import操作。

3.2、基本参数说明

我们在学会fixture参数使用后可以说基本就会使用fuxture啦。

@pytest.fixture(scope='', params='', autouse='', ids='', name='')
def myfuxture():   
    print('用例前后置的方式')

**1、scope:**表示是被pytest.fuxture标记的方式的作用域,function(函数)(默认)、class、module、package、session
params:参数化

**2、autouse:**autouse=True:自动执行,默认为FALSE

**3、ids:**当使用params参数化时,给每个值设置一个变量名,意义不大

**4、name:**给表示的是@pytest.fixture标记的方法取一个别名

3.3、参数的运用

在讲参数如何运行前我们先看一下如何调用fuxture吧。

# 我们在测试用例目录创建conftest.py文件,内容如下。
import pytest

@pytest.fixture()
def myfuxture():
    print('用例前后置的方式')

在用例文件调用它

# 我们直接在测试用例方法里调用myfuxture即可,因为我们没有加任何参数,所以上面提到过scope默认等于function,它是函数级别的,我们看下打印结果,只会在test_01_hujian用例前运行前置。
class TestLogin_01:

    def test_01_hujian(self,myfuxture):
        print('运行用例1')

    def test_02_hujian(self):
        print('运行用例2')

在这里插入图片描述

3.3.1、autouse:自动执行

刚看到这个参数注释的时候肯定很多小伙伴都一脸懵逼,什么是自动执行。上面我们看到在调用fuxture时需要在函数里引用,当我们加上参数autouse='Ture’时则不需要引用fuxture方法名,直接所有用例都会调用fuxture是不是很好用。

import pytest


@pytest.fixture(autouse=True)
def myfuxture():
    print('用例前后置的方式')
class TestLogin_01:

    def test_01_hujian(self):
        print('运行用例1')

    def test_02_hujian(self):
        print('运行用例2')

查看结果:因为没有加scope参数所以它是函数级别的,在两个用例执行前都会调用fuxture方法。
在这里插入图片描述

3.3.2、scope标记作用域

当不加这个参数时默认scope=function,上面以及演示。
当scop=class

@pytest.fixture(autouse=True, scope='class')
def myfuxture():
    print('用例前后置的方式')

打印结果:只会在所有方法开始前后执行class方法。
在这里插入图片描述
scop=module,当一个py文件中存在多个类时,会在第一个类执行前置,最后一个类执行后置。

import pytest


@pytest.fixture(autouse=True, scope='module')
def myfuxture():
    print('用例前后置的方式')
import pytest
import time


class TestLogin_01:

    def test_01_hujian(self):
        print('运行用例1')

    def test_02_hujian(self):
        print('运行用例2')


class TestLogin_02:
    def test_03_hujian(self):
        print('运行用例3')

    def test_04_hujian(self):
        print('运行用例4')


class TestLogin_03:
    def test_01_hujian(self):
        print('运行用例5')

    def test_02_hujian(self):
        print('运行用例6')


class TestLogin_04:
    def test_03_hujian(self):
        print('运行用例7')

    def test_04_hujian(self):
        print('运行用例8')


if __name__ == '__main__':
    pytest.main(['-vs'])

执行结果:
在这里插入图片描述
我们主要就使用这个三个参数即可,后面不多做介绍。
fuxture的参数化个人感觉不是很好用,这里就不多做介绍了,另外跟参数化涉及到的参数还有重命名参数这里不做介绍啦。

3.4、fuxture实现后置功能

前面演示的例子一直都只展示了前置功能,那后置如何实现呢。
我们用yield来实现。至于yield这里就不多做介绍了,博主有单独的文档专门介绍。

@pytest.fixture(autouse=True)
def myfuxture():
    print('用例前置的方式')
    yield 
    print('后置方法')

在这里插入图片描述

更多推荐

论文阅读《ESSWC2018:Modeling Relational Data with Graph Convolutional Networks》

论文链接本文就是大名鼎鼎的R-GCN,由于是比较早的工作了,在这篇博客中我们只讨论它的链接预测部分和模型结构部分。工作简介本文引入了关系图卷积网络(R-GCNs),并将其应用于两个标准的知识库完成任务:链接预测和实体分类。通过使用GNN编码器模型来丰富用于链接预测的因子分解模型DistMult,可以显著改善链接预测的结

JavaScript中的`async`和`await`关键字的作用

聚沙成塔·每天进步一点点⭐专栏简介⭐async关键字⭐await关键字3.错误处理⭐写在最后⭐专栏简介前端入门之旅:探索Web开发的奇妙世界记得点击上方或者右侧链接订阅本专栏哦几何带你启航前端之旅欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基

Leetcode 504.七进制数

给定一个整数num,将其转化为7进制,并以字符串形式输出。示例1:输入:num=100输出:"202"示例2:输入:num=-7输出:"-10"我的答案:一、信息1.目的实现十进制向其他进制的转换。2.原理:公式3.一段运算过程4.根据后面的一段话不难看出根据作者的意思就是用栈的数据结构来存储每次辗转相除后的余数然后输

页面设计都有哪些好用的工具推荐?

对于设计师来说,方便的页面设计工具和稳定的页面设计灵感也同样重要。在今天的信息爆炸中,很容易找到页面设计工具,网上搜索有很多建议,但找到合适的页面设计工具并不那么简单。本文推荐不容错过的9款页面设计工具即时设计即时设计是一款免费的在线UI设计工具,无系统限制,浏览器打开即可使用,更有丰富的在线素材、云端字体、交互动画等

leetcode面试题0808有重复字符串的排列组合

描述输入一个长度为n字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。数据范围:n<10要求:空间复杂度O(n!),时间复杂度O(n!)输入描述:输入一个字符串,长度不超过10,

不再使用步长卷积或池化:针对低分辨率图像和小物体的新的CNN构建块

摘要https://arxiv.org/pdf/2208.03641.pdf卷积神经网络(CNN)在许多计算机视觉任务中取得了巨大的成功,例如图像分类和目标检测。然而,它们的性能在低分辨率图像或小目标等更困难的图像任务中迅速下降。在本文中,我们指出,这根源于现有CNN体系结构中常见的缺陷设计,即使用步长卷积和/或池化层

基于卷积神经网络VGG的猫狗识别

!有需要本项目的实验源码的可以私信博主!摘要:随着大数据时代的到来,深度学习、数据挖掘、图像处理等已经成为了一个热门研究方向。深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。这也是深度学习在当下备受欢迎的原因之一,本实验的研究目的是自动识别猫狗类型,采用的是基于数据挖掘的猫狗自动

从 Zebec Protocol 长期布局看,ZBC 通证的潜在应用场景

在9月7日,Zebec创始人Sam做客社区,并进行了“NautilusChain以及$ZBC的未来”主题的AMA访谈。Sam在本次访谈中对NautilusChain生态的价值捕获、Zebec生态布局规划、可能会推出的NautilusChain治理通证NAUT进行了解读。本文将对本次AMA进行回顾与总结。主持人:社区新的

【JavaEE】_JavaScript基础语法

目录1.JavaScript概述1.1JavaScript简介1.2HTML、CSS、JavaScript的关系1.3JavaScrip的组成2.JavaScript的书写形式2.1内嵌式2.2行内式2.3外部式3.输出3.1alert3.2console.log4.变量的使用4.1创建变量4.1.1使用var4.1.

华为云云耀云服务器L实例评测|带宽,磁盘,CPU,内存以及控制台监控测试

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。🏆数年电商行业从业经验,AWS/阿里云资深使用用户,历任核心研发工程师,项目技术负责人。🎉欢迎👍点赞✍评论⭐收藏文章目录🚀一、网络带宽测试🔎1.1Nginx反向代理到

华为云云耀云服务器L实例评测 | 华为云部署Docker容器

文章目录一、什么是Docker二、Docker的好处☁️模块化⛅层和镜像版本控制❄️回滚⚡快速部署三、华为云云耀云服务器L实例安装Docker四、Docker安装镜像测试五、Docker常用命令⛵小结一、什么是DockerDocker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然

热文推荐