当前位置: 首页 > news >正文

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 的配置。以下是详细解释:

  1. 获取当前路径

    current_path = os.path.dirname(os.path.abspath(__file__))
  2. 获取上上级目录

    ffather_path = os.path.abspath(os.path.join(current_path,"../"))
  3. 日志文件路径

    LOG_FILE_PATH = f'{ffather_path}/log/test.log'
  4. 清空日志文件内容

    def clear_log_file(): """Clear the content of the log file.""" open(LOG_FILE_PATH, 'w').close()

    这个函数打开日志文件并清空其内容。

  5. pytest 测试夹具配置

    scope='session' 表示此夹具在测试会话开始时设置并在会话结束时清理。

    autouse=True 表示此夹具会自动在测试中使用,而无需显式指定。

  6. 处理测试失败并记录详细信息

    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 提供的一种机制,用于提供测试所需的前置条件和后置处理。详细解释如下:

  1. import pytest:导入 pytest 库,提供了测试框架和夹具功能。

  2. @pytest.fixture(scope='function'):这是 pytest 的夹具装饰器,用于定义一个夹具。夹具是测试执行前和后进行准备和清理的代码块。

    • scope='function':指定夹具的作用范围。在这里,scope='function' 表示每个测试函数都会调用一次该夹具。每次测试函数调用夹具时,夹具都会执行一次准备和清理代码。其他可选的作用范围包括 'module'(模块级别)、'class'(类级别)和 'session'(会话级别)。
  3. def connections()::定义一个名为 connections 的夹具函数。

  4. print('建立连接'):在夹具执行时,打印一条消息,表示正在建立连接。这个步骤用于模拟或实际创建测试所需的资源或状态。

  5. ssh_client = 'a'ssh_server = 'b':模拟创建两个连接对象(ssh_clientssh_server)。在实际的测试中,这里可能会用实际的连接对象或资源初始化代码。

  6. connections = {'c_client': ssh_client, 's_client': ssh_server}:将这些连接对象放入一个字典中,并将字典命名为 connections。这个字典作为夹具的返回值,将被提供给需要它的测试函数。

  7. yield connections:将 connections 字典作为夹具的返回值提供给测试函数。yield 语句表示夹具的“前置准备”部分结束了,接下来是“后置清理”部分的代码。

  8. 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
  1. import pytest:导入 pytest 库,用于编写和执行测试。

  2. @pytest.mark.parametrize("title,input,expected", [...]):这是 pytest 的参数化装饰器,用于将多个输入值传递给测试方法。参数化使得同一测试方法可以使用不同的输入数据运行多次,以确保方法在各种情况下都能正常工作。

    • "title,input,expected":指定参数名称。
    • [...]:定义了三组测试数据:
      • ('title1', 1, 2)
      • ('title2', 2, 4)
      • ('title3', 3, 6)
  3. class Test_connection1:定义了一个测试类 Test_connection1,用于组织测试方法。测试方法会被应用于类中的每个测试用例。

  4. def test_connection1(self, connections, title, input, expected)::这是测试方法 test_connection1。该方法将会接收由参数化装饰器提供的参数 titleinputexpected,以及 connections 夹具。

    • connections:这是 pytest 的夹具,提供了测试所需的连接对象。
    • title, input, expected:来自参数化装饰器的参数值。
  5. print('\t'):打印一个制表符,用于输出格式化。

  6. print(title, input, expected):打印测试用例的当前参数值,帮助调试和验证测试数据。

  7. c_conn = connections['c_client']s_conn = connections['s_client']:从 connections 夹具中提取 c_clients_client 连接对象,并赋值给变量 c_conns_conn

  8. print(c_conn, s_conn):打印提取的连接对象,用于检查其值。

  9. assert 1 == 1:一个基本的断言,用于确保测试运行时不会失败。实际测试中会用复杂的断言来验证 inputexpected 是否符合预期。

相关文章:

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(也称为数据包或多媒体包)的信息&#xff0…...

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领域优质…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

docker详细操作--未完待续

docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM&#xff09…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线, n r n_r nr​ 根接收天线的 MIMO 系…...

2025季度云服务器排行榜

在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...