Pytest基于fixture的参数化及解决乱码问题

news2025/1/15 8:38:43

我们知道,Pytest是Python技术栈下进行自动化测试的主流测试框架。支持灵活的测试发现、执行策略,强大的Fixture夹具和丰富的插件支持。

除了通过pytest的parametrize标签进行参数化外,我们通过fixture的param参数也可以比较方便地实现参数化测试的功能

fixture参数化实现

假设我们有如下一段待测代码,根据传入参数的不同类型得到不同的输出

def deal_params(p):  
    if type(p) is int:  
        return p*10  
    if type(p) is str:  
        return f"输入了:{p}"  
    if type(p) in (tuple, list):  
        return "_".join(p)  
    else:  
        raise TypeError

然后我们编写对应的测试代码,首先定义fixture,设定params参数列表, 再通过fixture本身的request获取param. 比如这里定义几个参数。当然此外我们还定义了fixture的前置和后置动作。测试方法就是调用被测函数执行。

@pytest.fixture(params=[10, "城下秋草", "软件测试", ("示例", "代码")])  
def fix_env(request):  
    yield request.param  
  
def test_params(fix_env):  
    print(deal_params(fix_env))

运行得到如下输出:
在这里插入图片描述

可以看到,虽然参数化成功运行,但这里有个问题,就是输出的结果中,用例ID这里,显示的是乱码.
根据pytest的ID生成规则,如果是字符或数字,会显示传入的参数本身(当然也可以利用ids参数重新指定参数的对应ID),如果是元组、列表或字典,则会显示fixture的name+参数序号,比如这里的fix_env3

那这里的字符是中文,显示成了unicode转义前的编码,所以还是中文转换有问题。也就是Pytest对于fixture参数的处理,默认会使用Ascii编码来进行显示,而对于中文,我们是希望用unicode编码显示。

中文乱码解决方案一

所以,这里解决这个问题的第一个方法是可以利用Pytest的fixture集中配置文件conftest.py, 在其中利用Pytest的hook机制,修改用例收集方法中生成用例ID的部分. 对应代码:

用例文件的同级conftest.py中定义:

def pytest_collection_modifyitems(items):  
    # item表示收集到的测试用例,对他进行重新编码处理
    for item in items:  
        item.name = item.name.encode("utf-8").decode("unicode-escape")  
        item._nodeid = item._nodeid.encode("utf-8").decode("unicode-escape")

再次执行,可以看到已经正常显示了中文
在这里插入图片描述

中文乱码解决方案二

除了通过修改hook来对用例ID进行重新编码处理外,其实Pytest本身也提供了一个配置参数。只是这个配置并不是官方推荐的解决方法。在某些操作系统上的特定情形下,使用这个配置,可能会导致一些异常bug。但笔者在windows和Ubuntu上测试是没有问题的。

这里对应的配置是:

disable_test_id_escaping_and_forfeit_all_rights_to_community_support = True

从这个超长的配置名称也可以看出,就是禁用testID的转义但同时放弃了社区支持 😂😂

在pytest.ini中加上这个配置,不使用上面hook的话,也能得到中文正常显示的效果。


以上就是关于Pytest中参数化中文显示时,可能遇到的乱码问题的解决方案。


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android从上帝视角来看PackageManagerService

戳蓝字“牛晓伟”关注我哦! 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章,技术文章也可以有温度。 前言 阅读该篇之前,建议先阅读下面的系列文章: Android深入理解包管理–PackageManagerService和它的“小伙伴…

SPI

Flash-W25Q64 -- 这一章的重点是重点是知道标准SPI通信,地址会算,FLASH时序要会看 目录 Flash-W25Q64 回顾 FLASH SPI简介 单片机(32)上的SPI W25Q64 模块之间应该怎么通信呢?-- 看时序图 代码编写 更改代码…

Vue Data UI——Vue 3 数据可视化组件库

文章目录 1、Vue Data UI2、核心特点2.1.Vue 3 的深度集成2.2 丰富的可视化组件2.3 灵活的定制性2.4 易于集成2.5 文件导出功能2.6 多主题支持3、如何在项目中使用 Vue Data UI?3.1 安装 Vue Data UI3.2 全局注册组件3.3 局部引入组件3.4 使用通用组件3.5 TypeScript 集成4、总…

城市交通系统优化策略:透视拥堵之困,探索流畅之道

在快速城市化的今天,交通拥堵已成为众多大中型城市的“城市病”,严重影响居民生活质量、经济运行效率及环境质量。本文旨在深度剖析城市交通拥堵的根源,并提出一系列行之有效的优化策略,旨在构建更加顺畅、高效、绿色的城市交通系…

R语言实现logistic回归曲线绘制

方式一&#xff1a;编制函数 x<-rnorm(10000)#设置随机种子 #编写绘图函数代码快 f <- function(x){y 1/(1 exp(-x))plot(x,y)}#sigmoid函数 f(x)​ 方式二&#xff1a;Sigmoid函数代码 x<-rnorm(10000)#设置随机种子 #编写绘图函数代码块 #y<-1/(1exp(-x)) y&…

【NOIP1997 普及组第一题】棋盘问题

题目背景 NOIP1997 普及组第一题 题目描述 设有一个NM 方格的棋盘 (1≤N≤100,1≤M≤100) 求出该棋盘中包含有多少个正方形、多少个长方形&#xff08;不包括正方形&#xff09;。 例如&#xff1a;当 N2,M3时&#xff1a; 正方形的个数有 8 个&#xff1a;即边长为 1 的正…

北斗短报文平板终端|军用三防平板|国产加固平板|防爆工业平板

在当今数字化浪潮的推动下&#xff0c;各行各业对智能终端设备的需求日益多样化与专业化&#xff0c;特别是在工业领域&#xff0c;一款集通信、定位、导航及耐用性于一身的设备显得尤为重要。北斗三代短报文工业平板电脑正是应此需求而生&#xff0c;它不仅是一款普通的平板电…

睿赛德科技正式推出RT-Thread开源 4+服务,助力企业用户发展

RT-Thread始于2006 年&#xff0c;是100%由中国开发者编写的开源嵌入式操作系统。经过10多年的发展&#xff0c;已经成为国内最流行的嵌入式操作系统&#xff0c;广泛应用于工业、 电力、轨道交通、智慧城市、智能家居、穿戴、车载、甚至航空航天等领域。 RT-Thread的成功基于对…

基金好书入门阅读笔记《基金作战笔记:从投基新手到配置高手的进阶之路》笔记3

公募基金的分类方式按投资范围分 80%以上资产投资于股票的&#xff0c;叫股票基金&#xff1b;80%以上资产投资于债券的&#xff0c;叫债券基金&#xff1b;80% 以上资产投资于其他基金的&#xff0c;叫FOF; 80%以上资产投资于货币市场的&#xff0c;叫货币基金&#xff1b;以上…

【AI绘画】Midjourney进阶:中心点构图详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;前言&#x1f4af;什么是构图为什么Midjourney要使用构图 &#x1f4af;中心点构图中心点构图的特点使用场景提示词书写技巧测试 &#x1f4af;小结 &#x1f4af;前言 【AI绘画】Midj…

freertos的任务管理

任务函数 任务被实现为C函数。它们唯一特别的地方是它们的原型&#xff0c;它必须返回void并接受void指针参数。以下是函数原型。 void ATaskFunction( void *pvParameters );每个任务本身都是一个小程序。它有一个入口点&#xff0c;通常会在无限循环中永远运行&#xff0c;…

MWD天气图像多分类数据集,用于图像分类-共6个类别,共60000张图像数据 ,含有模型

MWD天气图像多分类数据集&#xff0c;用于图像分类- MWD天气图像多分类数据集&#xff0c;用于图像分类-共6个类别&#xff0c;共60000张图像数据 &#xff0c;含有模型 MWD天气图像多分类数据集及模型介绍 数据集概述 名称&#xff1a;MWD天气图像多分类数据集图像数量&…

大规模多传感器滑坡检测数据集,利用landsat,哨兵2,planet,无人机图像等多种传感器采集数据共2w余副图像,mask准确标注滑坡位置

大规模多传感器滑坡检测数据集&#xff0c;利用landsat&#xff0c;哨兵2&#xff0c;planet&#xff0c;无人机图像等多种传感器采集数据共2w余副图像&#xff0c;mask准确标注滑坡位置 大规模多传感器滑坡检测数据集介绍 数据集概述 名称&#xff1a;大规模多传感器滑坡检测…

AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台

AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型&#xff08;LLM&#xff09;应用开发平台 目录 AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型&#xff08;LLM&#xff09;应用开发平台 一、简单介绍 二、Docker 下载安…

界面控件Kendo UI for jQuery 2024 Q3亮点 - 支持切换编辑模式

随着最新的2024 Q3版本&#xff0c;Progress使用户能够使用现成的页面模板和构建块更快地构建令人惊叹的应用程序&#xff0c;使您的Telerik和Kendo UI开发体验更好。 Telerik和Kendo UI 2024 Q3版本将焦点放在新推出的页面模板和构建块上&#xff0c;每个页面模板和构建块都预…

SaaS架构:中央库存系统架构设计

大家好&#xff0c;我是汤师爷~ 近年来&#xff0c;越来越多的零售企业大力发展全渠道业务。在销售额增长上&#xff0c;通过线上的小程序、直播、平台渠道等方式&#xff0c;拓展流量变现渠道。在会员增长方面&#xff0c;通过多样的互动方式&#xff0c;全渠道触达消费者&am…

大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

TensorRT-LLM七日谈 Day4

在Day2 中&#xff0c;我们梳理了trt-llm对于TinyLLama的调用&#xff0c;在Day3,我们也熟悉了一下Trt-llm常规的三步流程。 这里其实有个问题&#xff0c;在针对tiny-llama的部署中&#xff0c;其实没有显式的进行模型转换&#xff0c;那麽其推理接口中到底包含了什么&#x…

stack - queue - priority_queue

1.stack和queue的使用 2.底层逻辑 2.1 stack和queue都是容器适配器&#xff0c;是用其他容器适配形成的 stack的逻辑是后进先出的逻辑&#xff0c;意味着会发生尾差和尾删&#xff0c;其容器就可以选择是vector和list queue的逻辑是先进先出&#xff0c;意味着会发生头删和…

Codigger Keyboard Look应用说明

Keyboard Look是一项专为Desktop设计的功能模式&#xff0c;旨在通过全面启用键盘操作&#xff0c;减少对鼠标依赖&#xff0c;从而提升用户的工作效率和操作体验。尤其对于频繁使用键盘的用户&#xff0c;如开发者&#xff0c;此模式可显著加速日常操作&#xff0c;优化工作流…