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

一、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 timeclass 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('后置方法')

在这里插入图片描述

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

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

相关文章

C/C++好题分享--代码题

2-1排序子序列 int main() {int n;cin >> n;// 注意这里多给了一个值&#xff0c;是处理越界的情况的比较&#xff0c;具体参考上面的解题思路vector<int> a;a.resize(n 1);//这里有个坑&#xff0c;这个题越界了牛客测不出来&#xff0c;给n,并且不写a[n] 0;不会…

SpringCloud Gateway--Predicate/断言(详细介绍)上

&#x1f600;前言 本篇博文是关于SpringCloud Gateway–Predicate/断言&#xff08;详细介绍&#xff09;上&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以…

Vue中的路由介绍以及Node.js的使用

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Vue》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这个专栏…

数据结构之顺序表

前言 顺序表采用模块化编程思路&#xff0c;顺序表的实现使用3个模块&#xff0c;test.c—测试模块 Seqlist.c—接口函数的实现模块 seqlist.h—接口函数声明 顺序表的基本概念 顺序表是在计算机内存中通常以数组形式存储的线性表&#xff0c;线性表是n个具有相同特性的数据元…

R语言绘制PCA双标图、碎石图、变量载荷图和变量贡献图

1、原论文数据双标图 代码&#xff1a; setwd("D:/Desktop/0000/R") #更改路径#导入数据 df <- read.table("Input data.csv", header T, sep ",")# ----------------------------------- #所需的包: packages <- c("ggplot2&quo…

电视访问群晖共享文件失败的设置方式,降低协议版本

控制面板-文件服务-SMB-高级设置&#xff0c;常规及其他里面配置即可。

【红外图像增强】基于引力和侧向抑制网络的红外图像增强模型(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

计算机视觉: 三维物体生成

三维物体生成与编辑 论文地址: Controllable Mesh Generation Through Sparse Latent Point Diffusion Models 背景 数据是目前数字化和AI领域最宝贵的财富之一&#xff0c;但是对于目前的开发者来说&#xff0c;收集数据都意味着极大的成本。所以建立一个高效的生成模型能极…

Linux学习之Redis使用

搭建Redis服务器 在主机redis64运行redis服务 #安装redis服务 [rootredis64 ~]# yum install -y redis # 启动redis服务并开机启动 [rootredis64 ~]# systemctl enable redis --now # 查看redis端口 [rootredis64 ~]# ss -tnlp | grep redis-server LISTEN 0 128 …

PythonWeb服务器(HTTP协议)

一、HTTP协议与实现原理 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一种用于在网络上传输超文本数据的协议。它是Web应用程序通信的基础&#xff0c;通过客户端和服务器之间的请求和响应来传输数据。在HTTP协议中连接客户与服务器的…

网工基础知识——以太网

1972年Bob Metcalfe“以太网之父”被Xerox雇佣为网络专家&#xff0c;Bob Metcalfe 来到Xerox公司的Palo Alto研究中心&#xff08;PARC&#xff09;的第一个任务是把Palo Alto的计算机连接到ARPANET&#xff08;Internet的前身&#xff09;上。1972年底Bob Metcalfe以ALOHA系统…

Day 02 python学习笔记

python运算符 算术运算符 混合运算的优先级&#xff1a; () 高于 ** * / // % 高于 - 赋值运算符 - * / ** a 1 > a 3 > a a 3 其余同理 注意&#xff1a; python没有自增自减 &#xff08;a a a-- --a&#xff09;…

力扣刷题-链表-设计链表

题意&#xff1a; 在链表类中实现这些功能&#xff1a; get(index)&#xff1a;获取链表中第 index 个节点的值。如果索引无效&#xff0c;则返回-1。 addAtHead(val)&#xff1a;在链表的第一个元素之前添加一个值为 val 的节点。插入后&#xff0c;新节点将成为链表的第一个节…

华为OD机考算法题:分积木

目录 题目部分 解读与分析 代码实现 题目部分 题目分积木难度难题目说明Solo和koko是两兄弟&#xff0c;妈妈给了他们一大堆积木&#xff0c;每块积木上都有自己的重量。现在他们想要将这些积木分成两堆。哥哥Solo负责分配&#xff0c;弟弟koko要求两个人获得的积木总重量“…

ImportError: Java package ‘edu‘ not found, requested by alias ‘edu‘

参考issue&#xff1a; https://github.com/ncbi-nlp/NegBio/issues/44 我目前的解决办法 pip uninstall jpype1 -y可以成功运行。

Ubuntu修改静态IP、网关和DNS的方法总结

Ubuntu修改静态IP、网关和DNS的方法总结 ubuntu系统&#xff08;其他debian的衍生版本好像也可以&#xff09;修改静态IP有以下几种方法。&#xff08;搜索总结&#xff0c;可能也不太对&#xff09; /etc/netplan (use) Ubuntu 18.04开始可以使用netplan配置网络&#xff0…

二十五、MySQL事务的四大特性和常见的并发事务问题

1、事务的四大特性 2、常见的并发事务问题 &#xff08;1&#xff09;并发事务问题分类&#xff1a; &#xff08;2&#xff09;脏读&#xff1a; 一个事务正在对一条记录做修改&#xff0c;在这个事务完成并提交前&#xff0c;这条记录的数据就处于不一致的状态&#xff1b;…

HTTP代理反爬虫技术详解

HTTP代理是一种网络技术&#xff0c;它可以将客户端的请求转发到目标服务器&#xff0c;并将服务器的响应返回给客户端。在网络安全领域中&#xff0c;HTTP代理经常被用来反爬虫&#xff0c;以保护网站的正常运营。 HTTP代理反爬虫的原理是通过限制访问者的IP地址、访问频率、U…

【Spark】win10配置IDEA、saprk、hadoop和scala

终于&#xff0c;要对并行计算下手了哈哈哈。 一直讲大数据大数据&#xff0c;我单次数据处理量大概在1t上下&#xff0c;是过亿级的轨迹数据。 用python调用multiprogress编写的代码&#xff0c;用多线程也要一个多月跑完。 我对这个效率不太满意&#xff0c;希望能快一点再快…

python实验2

1、实验题目&#xff1a;个人用户信息注册 模拟用户个人信息注册&#xff0c;需要输入用户个人信息 姓名、性别、年龄、血型、身高、电话 信息&#xff0c;并输出显示。 源代码&#xff1a; print(用户个人信息注册) name input("请输入您的姓名&#xff1a;") sex…