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领域优质…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...