1. 简介

学过unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例开始前和结束后都去执行一次。
当然还有更高级一点的setupClass和teardownClass,需配合@classmethod装饰器一起使用,在做selenium自动化的时候,它的效率尤为突出,可以只启动一次浏览器执行多个用例。
pytest框架也有类似于setup和teardown的语法,并且还不止这四个

2. 用例运行级别

  • 模块级(setup_module/teardown_module)开始于模块始末,全局的

  • 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)

  • 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)

  • 方法级(setup_method/teardown_method)开始于方法始末(在类中)

  • 类里面的(setup/teardown)运行在调用方法的前后

3. 函数式

3.1 setup_function/teardown_function (每个用例开始和结束时调用一次)
3.1.1 代码实现:

3.1.2 参考代码:
# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 1.导入模块
#  content of  test_bjhg_class1.py
import pytest
# 函数式def setup_function():print("setup_function:每个用例开始前都会执行")def teardown_function():print("teardown_function:每个用例结束后都会执行")def test_one():print("正在执行----test_one")x = "this"assert 'h' in xdef test_two():print("正在执行----test_two")x = "hello"assert hasattr(x, 'check')def test_three():print("正在执行----test_three")a = "hello"b = "hello world"assert a in bif __name__ == "__main__":pytest.main(["-s", "test_fixt.py"])
3.1.3运行结果:

运行代码后,控制台打印如下图的结果

3.2 setup_module/teardown_module(所有用例开始和结束时调用一次)
3.2.1 代码实现:

3.2.2 参考代码:
# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 1.导入模块
#  content of  test_class2.py
import pytest
# 函数式def setup_module():print("setup_module:整个.py模块只执行一次")print("比如:所有用例开始前只打开一次浏览器")def teardown_module():print("teardown_module:整个.py模块只执行一次")print("比如:所有用例结束只最后关闭浏览器")def setup_function():print("setup_function:每个用例开始前都会执行")def teardown_function():print("teardown_function:每个用例结束前都会执行")def test_one():print("正在执行----test_one")x = "this"assert 'h' in xdef test_two():print("正在执行----test_two")x = "hello"assert hasattr(x, 'check')def test_three():print("正在执行----test_three")a = "hello"b = "hello world"assert a in bif __name__ == "__main__":pytest.main(["-s", "test_class2.py"])
3.2.3 运行结果:

运行代码后,控制台打印如下图的结果

3.3 类和方法

1.setup/teardown和unittest里面的setup/teardown是一样的功能,setup_class和teardown_class等价于unittest里面的setupClass和teardownClass

3.3.1 代码实现:

3.3.2 参考代码:
# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 1.导入模块
#  content of  test_class3.py
import pytest
# 类和方法
class TestCase():def setup(self):print("setup: 每个用例开始前执行")def teardown(self):print("teardown: 每个用例结束后执行")def setup_class(self):print("setup_class:所有用例执行之前")def teardown_class(self):print("teardown_class:所有用例结束后执行")def setup_method(self):print("setup_method:  每个用例开始前执行")def teardown_method(self):print("teardown_method:  每个用例结束后执行")def test_one(self):print("正在执行----test_one")x = "this"assert 'h' in xdef test_two(self):print("正在执行----test_two")x = "hello"assert hasattr(x, 'check')def test_three(self):print("正在执行----test_three")a = "hello"b = "hello world"assert a in bif __name__ == "__main__":pytest.main(["-s", "test_class3.py"])
3.3.3 运行结果:

运行代码后,控制台打印如下图的结果

备注:这里setup_method和teardown_method的功能和setup/teardown功能是一样的,一般二者用其中一个即可

3.4 函数和类混合

1.如果一个.py的文件里面既有函数用例又有类和方法用例,运行顺序又是怎样的呢?

3.4.1 代码实现:

3.4.2 参考代码:
# coding=utf-8
# 1.导入模块
#  content of  test_bjhg_class1.py
import pytest
# 类和方法
def setup_module():print("setup_module:整个.py模块只执行一次")print("比如:所有用例开始前只打开一次浏览器")def teardown_module():print("teardown_module:整个.py模块只执行一次")print("比如:所有用例结束只最后关闭浏览器")def setup_function():print("setup_function:每个用例开始前都会执行")def teardown_function():print("teardown_function:每个用例结束前都会执行")def test_one():print("正在执行----test_one")x = "this"assert 'h' in xdef test_two():print("正在执行----test_two")x = "hello"assert hasattr(x, 'check')class TestCase():def setup_class(self):print("setup_class:所有用例执行之前")def teardown_class(self):print("teardown_class:所有用例执行之前")def test_three(self):print("正在执行----test_three")x = "this"assert 'h' in xdef test_four(self):print("正在执行----test_four")x = "hello"assert hasattr(x, 'check')if __name__ == "__main__":pytest.main(["-s", "test_bjhg_class1.py"])
3.4.3 运行结果:

运行代码后,控制台打印如下图的结果

2.从运行结果看出,setup_module/teardown_module的优先级是最大的,然后函数里面用到的setup_function/teardown_function与类里面的setup_class/teardown_class互不干涉

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

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

相关文章

Starrocks存算一体和存算分离

网上整理了一下starrocks两种部署方式的区别差异性,个人感觉生产环境还是尽量存算分离部署,防止资源争夺等问题影响线上生产数据,虽然存算一体部署起来更方便一些 📊 1. 架构设计 存算一体: 节点类型:仅包含…

多线程编程 ----线程主动退出pthread_exit与线程被动退出pthread_cancel

主动退出 pthread_exit 与 pthread_cancel 的区别 1. 核心区别 特性pthread_exitpthread_cancel调用者线程自身调用,主动退出。其他线程调用,异步请求终止目标线程。行为方式立即终止线程,资源需手动释放。发送取消请求,线程在取…

电脑开机加速工具,优化启动项管理

软件介绍 今天为大家推荐一款专业的电脑启动项管理工具,这款软件能有效优化电脑开机速度,帮助用户管理开机自启动程序。 使用方式 软件无需安装,以管理员身份直接双击运行即可使用。为确保安全,软件特别设计为不添加注册表…

设备管理的11个指标、七大误区、六大特征

1、设备的完好率 在这些指标里用得最多,但其对管理的促进作用有限。所谓的完好率,是在检查期间,完好设备与设备总台数的比例(设备完好率=完好设备数/设备总数)很多工厂的指标可以达到95%以上。理由很简单,在检查的那一刻,如果设备是运转的,没出故障,就算是完好的,于…

11OAuth2

目录 本节大纲 一、OAuth2 简介 二、OAuth2 授权总体流程 三、四种授权模式 授权码模式 简化模式 密码模式 客户端模式 四、OAuth2 标准接口 五、GitHub 授权登录 1. 创建 OAuth 应用 2. 项目开发 六、Spring Security OAuth2 七、授权、资源服务器 1. 授权服务器…

Github Copilot协助解决cucumber插件不支持async/await

一、提示词 问题描述 在使用了badeball/cypress-cucumber-preprocessor插件后,存在不支持nodejs原生的promise和async/await语法问题 执行用例命令 npx cypress run --env configFilemhesi-staging,TAGS"API005" --spec "cypress/integration/AL…

C++多线程【Linux】

Linux的多线程 Linux的子线程实际上也是个进程&#xff0c;但是比传统的进程轻量化。 pthread pthread是用于Linux系统下的线程库&#xff0c;头文件是<pthread.h>。C11 之前的多线程开发高度依赖平台原生 API&#xff0c;Windows 以 CreateThread 和内核对象为核心&am…

Windows 环境下 NVM 命令详解:多版本 Node.js 管理利器

“一个 Node.js 版本走天下&#xff1f;太局限了&#xff01;试试 nvm&#xff0c;版本切换如丝般顺滑。” 什么是 NVM NVM&#xff08;Node Version Manager&#xff09;是一个命令行工具&#xff0c;允许你安装并在多个 Node.js 版本之间自由切换。 在 Linux/macOS 下常用的…

一二级路由之间的传参方式以及高亮问题

实现如下图所示的一二级路由的高亮情况&#xff1a; 在一级路由APP.vue下设置&#xff1a; .head a.router-link-active {background-color: rgb(235, 221, 204); }在二级路由Mycenter.vue下设置&#xff1a; /* 要求在点击跳转到mycenter_lianxi页面时候父路由保持高亮…

前端JavaScript力扣HOT100刷题【51-100】

注&#xff1a;纯手打&#xff0c;如有错误欢迎评论区交流&#xff01; 转载请注明出处&#xff1a;https://blog.csdn.net/testleaf/article/details/148953015 编写此文是为了更好地学习前端知识&#xff0c;如果损害了有关人的利益&#xff0c;请联系删除&#xff01; 本文章…

智能制造数字孪生集成交付生态链:智慧产线极速克隆,孪生重构生产周期

在智能制造的浪潮中&#xff0c;数字孪生技术正以前所未有的速度重塑制造业的生产模式。从产品设计到生产制造&#xff0c;再到运维管理&#xff0c;数字孪生通过构建物理世界的虚拟镜像&#xff0c;实现了生产全流程的数字化映射与优化。 山东融谷信息以“智能制造数字孪生集成…

非常详细版: dd.device.geolocation 钉钉微应用获取定位,移动端 PC端都操作,Vue实现钉钉微应用获取精准定位并渲染在地图组件上

dd.device.geolocation 钉钉微应用获取定位,钉钉微应用获取精准定位并渲染在地图组件上 ,手机端 PC端要都可用 【dd.device.geolocation是需要鉴权的哦】 想要的数据和效果图 想要的数据格式 代码 <template><div class="dialogStyles"

鸿蒙5:组件状态共享

目录 1. 组件状态共享 1.1 状态共享-父子传值&#xff1a;Local、Param、Event 1.2 状态共享-父子双向绑定!! 1.3 跨代共享&#xff1a;Provider和Consumer 1.3.1 aliasName和属性名 1.3.2 实现跨代共享 1.3.3 装饰复杂类型&#xff0c;配合Trace一起使用 1.3.4 支持共…

【MySQL】12. C语言与数据库的连接

1. 下载MySQL的连接库 sudo apt install -y libmysqlclient-dev 2. MySQL连接库的常用接口介绍 通过下面的样例了解MYSQL的常用接口&#xff1a; #include <iostream> #include <mysql/mysql.h> using namespace std;const char *host "localhost";…

[springboot系列] 探秘JUnit 5: Java单元测试利器

介绍 JUnit 5 是一个用于 Java 编程语言的单元测试框架&#xff0c;它是 JUnit 框架的第五个版本&#xff0c;与 JUnit 4 相比&#xff0c;JUnit 5 提供了许多改进和新特性&#xff0c;包括更好的扩展性、灵活性和对现代 Java 特性的支持。 JUnit 5 由三个主要的子模块组成&a…

开源 java android app 开发(十三)绘图定义控件、摇杆控件的制作

文章的目的为了记录使用java 进行android app 开发学习的经历。本职为嵌入式软件开发&#xff0c;公司安排开发app&#xff0c;临时学习&#xff0c;完成app的开发。开发流程和要点有些记忆模糊&#xff0c;赶紧记录&#xff0c;防止忘记。 相关链接&#xff1a; 开源 java an…

Python 库 包 sentence-transformers

sentence-transformers 是一个非常流行的 Python 库&#xff0c;专门用于将文本&#xff08;句子、段落、文档&#xff09;转换为高质量的语义向量&#xff08;嵌入&#xff09;。它基于 Transformer 架构&#xff08;如 BERT、RoBERTa、DistilBERT 等&#xff09; 的预训练模型…

《聚类算法》入门--大白话篇:像整理房间一样给数据分类

一、什么是聚类算法&#xff1f; 想象一下你的衣柜里堆满了衣服&#xff0c;但你不想一件件整理。聚类算法就像一个聪明的助手&#xff0c;它能自动帮你把衣服分成几堆&#xff1a;T恤放一堆、裤子放一堆、外套放一堆。它通过观察衣服的颜色、大小、款式这些特征&#xff0c;把…

AutoGen(五) Human-in-the-Loop(人类在环)实战与进阶:多智能体协作与Web交互全流程(附代码)

AutoGen Human-in-the-Loop&#xff08;人类在环&#xff09;实战与进阶&#xff1a;多智能体协作与Web交互全流程&#xff08;附代码&#xff09; 引言&#xff1a;AI自动化的极限与人类参与的价值 在大模型&#xff08;LLM&#xff09;驱动的AI应用开发中&#xff0c;完全自…

并查集 Union-Find

目录 引言 简单介绍 浅浅总结 算法图解 初始化 根节点查找 集合合并 连通性检查 例题 大概思路 完整代码&#xff1a; 引言 一个小小的并查集让我们在ccpc卡了那么久(还有unordered_map,如果不是忘了map自动排序这么一回事也不至于试那么多发)&#xff0c;至今仍然心有…