Pytest夹具autouse参数使用。True表示会自动在测试中使用,而无需显式指定
1. 全局conftest文件日志记录功能
# 当前路径(使用 abspath 方法可通过dos窗口执行)
current_path = os.path.dirname(os.path.abspath(__file__))
# 上上级目录
ffather_path = os.path.abspath(os.path.join(current_path,"../"))LOG_FILE_PATH = f'{ffather_path}/log/test.log'def clear_log_file():"""Clear the content of the log file."""open(LOG_FILE_PATH, 'w').close()@pytest.fixture(scope='session', autouse=True)
def configure_logging():# Clear the log file before starting the testsclear_log_file()logger = logging.getLogger()handler = logging.FileHandler(LOG_FILE_PATH, encoding='utf-8')logger.info('Logging configured')handler.setLevel(logging.INFO)formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')handler.setFormatter(formatter)handler.encoding = 'utf-8'logger.addHandler(handler)logger.setLevel(logging.INFO)logging.getLogger().encording = 'utf-8'logger.info('Starting test session')yield handlerlogger.info('Ending test session')logging.getLogger().removeHandler(handler)def pytest_runtest_makereport(item, call):if call.when == 'call' and call.excinfo is not None:logging.error(f"Test case failed: {item.nodeid}")# ***************以下二选一# # 01获取失败的简单内容# failure = call.excinfo._getreprcrash()# logging.error(failure)# 02获取失败的详细信息excinfo = call.excinfoif excinfo:# 格式化异常信息formatted_exception = ''.join(traceback.format_exception(excinfo.type, excinfo.value, excinfo.tb))logging.error(f"Exception details:\n{formatted_exception}")
Python 的日志记录和测试框架 pytest 的配置。以下是详细解释:
-
获取当前路径:
current_path = os.path.dirname(os.path.abspath(__file__)) -
获取上上级目录:
ffather_path = os.path.abspath(os.path.join(current_path,"../")) -
日志文件路径:
LOG_FILE_PATH = f'{ffather_path}/log/test.log' -
清空日志文件内容:
def clear_log_file(): """Clear the content of the log file.""" open(LOG_FILE_PATH, 'w').close()这个函数打开日志文件并清空其内容。
-
pytest测试夹具配置:scope='session'表示此夹具在测试会话开始时设置并在会话结束时清理。autouse=True表示此夹具会自动在测试中使用,而无需显式指定。 -
处理测试失败并记录详细信息:
pytest_runtest_makereport钩子用于生成测试报告。如果测试失败(
call.when == 'call'),记录测试失败的信息和详细的异常信息。
2.模块conftest.py文件配置前置、后置
@pytest.fixture(scope='function')
def connections():print('建立连接')ssh_client = 'a'ssh_server = 'b'connections = {'c_client':ssh_client,'s_client':ssh_server}yield connectionsprint('断开连接')
这段代码展示了如何使用 pytest 的夹具(fixtures)来设置和清理测试环境。夹具是 pytest 提供的一种机制,用于提供测试所需的前置条件和后置处理。详细解释如下:
-
import pytest:导入pytest库,提供了测试框架和夹具功能。 -
@pytest.fixture(scope='function'):这是pytest的夹具装饰器,用于定义一个夹具。夹具是测试执行前和后进行准备和清理的代码块。scope='function':指定夹具的作用范围。在这里,scope='function'表示每个测试函数都会调用一次该夹具。每次测试函数调用夹具时,夹具都会执行一次准备和清理代码。其他可选的作用范围包括'module'(模块级别)、'class'(类级别)和'session'(会话级别)。
-
def connections()::定义一个名为connections的夹具函数。 -
print('建立连接'):在夹具执行时,打印一条消息,表示正在建立连接。这个步骤用于模拟或实际创建测试所需的资源或状态。 -
ssh_client = 'a'和ssh_server = 'b':模拟创建两个连接对象(ssh_client和ssh_server)。在实际的测试中,这里可能会用实际的连接对象或资源初始化代码。 -
connections = {'c_client': ssh_client, 's_client': ssh_server}:将这些连接对象放入一个字典中,并将字典命名为connections。这个字典作为夹具的返回值,将被提供给需要它的测试函数。 -
yield connections:将connections字典作为夹具的返回值提供给测试函数。yield语句表示夹具的“前置准备”部分结束了,接下来是“后置清理”部分的代码。 -
print('断开连接'):在所有使用此夹具的测试函数执行完毕后,打印一条消息,表示正在断开连接。这是夹具的“后置清理”部分,用于清理测试资源或状态。在实际使用中,这里可能包含关闭连接或释放资源的代码。
3.测试用例
import pytest@pytest.mark.parametrize("title,input,expected", [('title1',1, 2),('title2',2, 4),('title3',3, 6)
])
class Test_connection1:def test_connection1(self,connections,title, input, expected):print('\t')print(title, input, expected)c_conn = connections['c_client']s_conn = connections['s_client']print(c_conn, s_conn)assert 1==1
-
import pytest:导入pytest库,用于编写和执行测试。 -
@pytest.mark.parametrize("title,input,expected", [...]):这是pytest的参数化装饰器,用于将多个输入值传递给测试方法。参数化使得同一测试方法可以使用不同的输入数据运行多次,以确保方法在各种情况下都能正常工作。"title,input,expected":指定参数名称。[...]:定义了三组测试数据:('title1', 1, 2)('title2', 2, 4)('title3', 3, 6)
-
class Test_connection1:定义了一个测试类Test_connection1,用于组织测试方法。测试方法会被应用于类中的每个测试用例。 -
def test_connection1(self, connections, title, input, expected)::这是测试方法test_connection1。该方法将会接收由参数化装饰器提供的参数title、input和expected,以及connections夹具。connections:这是pytest的夹具,提供了测试所需的连接对象。title, input, expected:来自参数化装饰器的参数值。
-
print('\t'):打印一个制表符,用于输出格式化。 -
print(title, input, expected):打印测试用例的当前参数值,帮助调试和验证测试数据。 -
c_conn = connections['c_client']和s_conn = connections['s_client']:从connections夹具中提取c_client和s_client连接对象,并赋值给变量c_conn和s_conn。 -
print(c_conn, s_conn):打印提取的连接对象,用于检查其值。 -
assert 1 == 1:一个基本的断言,用于确保测试运行时不会失败。实际测试中会用复杂的断言来验证input和expected是否符合预期。
相关文章:
Pytest夹具autouse参数使用。True表示会自动在测试中使用,而无需显式指定
1. 全局conftest文件日志记录功能 # 当前路径(使用 abspath 方法可通过dos窗口执行) current_path os.path.dirname(os.path.abspath(__file__)) # 上上级目录 ffather_path os.path.abspath(os.path.join(current_path,"../"))LOG_FILE_PATH f{ffather_path}/lo…...
Linux:归档及压缩
tar命令 • tar 集成备份工具 – -c:创建归档 – -x:释放归档 – -f:指定归档文件名称,必须在所有选项的最后 – -z、-j、-J:调用 .gz、.bz2、.xz 格式工具进行处理 – -t:显示归档中的文件清单 – -C:指定…...
jenkins 安装
jenkins安装 jenkins官网 中文网址 安装设置 所有jenkins版本 内存512M以上,10Gb磁盘;安装jdk,需要java8以上下载较新的版本,否则安装插件时可能报错版本过低 # 搜索java yum search java | grep -iE "jdk"# 安装jd…...
mysql学习教程,从入门到精通,MySQL 删除数据库教程(6)
1、MySQL 删除数据库 使用普通用户登陆 MySQL 服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库,所以我们这边使用 root 用户登录,root 用户拥有最高权限。 在删除数据库过程中,务必要十分谨慎,因为在执行删除…...
C语言:刷题日志(2)
一.币值转换 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代…...
微带结环行器仿真分析+HFSS工程文件
微带结环行器仿真分析HFSS工程文件 工程下载:微带结环行器仿真分析HFSS工程文件 我使用HFSS版本的是HFSS 2024 R2 参考书籍《微波铁氧体器件HFSS设计原理》和视频微带结环行器HFSS仿真 1、环形器简介 环行器是一个有单向传输特性的三端口器件,它表明…...
怎么仿同款小程序的开发制作方法介绍
很多老板想要仿小程序系统,就是想要做个和别人界面功能类似的同款小程序系统,咨询瀚林问该怎么开发制作?本次瀚林就为大家介绍一下仿制同款小程序系统的方法。 1、确认功能需求 想要模仿同款小程序系统,那么首先需要找到自己想要…...
音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现
一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息࿰…...
0.91寸OLED屏幕大小的音频频谱,炫酷
(后文有详细介绍) 频谱扫描: 迷你音频频谱——频率扫描 音乐律动: 迷你音频频谱——频率扫描 迷你音频频谱——音乐2 迷你音频频谱——音乐3 一、简介 音频频谱在最小0.91寸OLED 屏幕上显示,小巧玲珑 二、应用场景 本…...
6. LinkedList与链表
一、ArrayList的缺陷 通过源码知道,ArrayList底层使用数组来存储元素,由于其底层是一段连续空间,当在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移,时间复杂度为O(n),效率比…...
Statcounter Global Stats 提供全球统计数据信息
Statcounter Global Stats 提供全球统计数据信息 1. Statcounter Global Stats2. Mobile & Tablet Android Version Market Share WorldwideReferences Statcounter Global Stats https://gs.statcounter.com/ Statcounter Global Stats are brought to you by Statcounte…...
Linux kernel中的dts dtsi dtb dtc dtb.img dtbo.img
1、问题 kernel与hsm会设置一些gpio,但是某些gpio会在kernel与hsm侧共同设置,导致最终的设置结果失败,将kernel侧在dts文件中设置的gpio注释掉之后,发现hsm设置gpio时还是失败 2、问题原因 因为dts文件不仅仅会影响kernel镜像&…...
微信小程序页面制作——个人信息
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
使用C++11的`std::async`执行异步任务:实战指南
使用C11的std::async执行异步任务:实战指南 在现代软件开发中,异步编程是提高应用程序性能和响应速度的重要手段。C11引入了std::async,使得编写异步任务变得更加简单和直观。本文将详细介绍如何使用std::async执行异步任务,并提…...
【高阶数据结构】B树、B+树、B*树
B树、B树、B*树 1. 常见的搜索结构2. B树概念3. B树的插入分析4. B树的插入实现4.1 B树的节点设计4.2 B树的部分插入实现14.3 B树的查找4.4 B树的部分插入实现24.5 插入key的过程4.7 B树的插入完整代码4.8 B树的简单验证4.9 B树的删除4.10 B树的性能分析 5. B树6. B*树7. 总结8…...
HBuilderx中vue页面引用scss样式
scss为css样式的预编译器,引入了变量、嵌入、混合、集成、引入等功能,相对于css样式,实现了样式的编程,具有更灵活的样式编写模式。 那么在HBuilderx中,“.vue”格式页面如何调用scss样式呢?详细如下&#…...
粒子群算法原理的示例介绍
一:粒子群优化算法的介绍 粒子群优化算法(PSO)是一种基于群体智能的优化算法,于1995年提出。它受到鸟群狩猎行为的启发,通过模拟鸟群或鱼群的社会行为来进行问题的求解。 基本原理 粒子群算法中,每个解决…...
GNU/Linux - Open函数使用的O_CLOEXEC flag
在 Linux 中,“O_CLOEXEC ”标志与 “open ”系统调用一起使用,用于指定在使用 “exec ”系列函数(如 “execve”、“execl ”等)执行新程序时,“open ”返回的文件描述符应自动关闭。 In Linux, the O_CLOEXEC flag i…...
AWQ量化(Activation-aware Weight Quantization)
论文: AWQ: Activation-aware Weight Quantization for On-Device LLM Compression and Acceleration 中文解读: 深入理解AWQ量化技术 - 知乎 (zhihu.com) 动机:端侧设备用LLM,为了减少显存占用量,所以要用INT4量化&am…...
SprinBoot+Vue体育商品推荐的设计与实现
目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
