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

我们知道,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.rhkb.cn/news/446696.html

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

相关文章

java对接GPT 快速入门

统一对接GPT服务的Java说明 当前,OpenAI等GPT服务厂商主要提供HTTP接口,这使得大部分Java开发者在接入GPT时缺乏标准化的方法。 为解决这一问题,Spring团队推出了Spring AI ,它提供了统一且标准化的接口来对接不同的AI服务提供商…

记一次有趣的发现-绕过堡垒机访问限制

前言 在某一次对设备运维管理的时候,发现的某安全大厂堡垒机设备存在绕过访问限制的问题,可以直接以低权限用户访问多个受控系统,此次发现是纯粹好奇心驱使下做的一个小测试压根没用任何工具。因为涉及到了很多设备和个人信息,所以…

rom定制系列------小米6x_MIUI14_安卓13刷机包修改写入以及功能定制 界面预览

在接待一些定制化系统中。有很多工作室或者一些特殊行业的友友需要在已有固件基础上简略修改其中的功能。方便使用。例如usb调试默认开启。usb安装设置以及usb安装与内置删减一些app的定制服务。今天给友友预览其中小米6X此款机型定制相关的一些界面与功能演示。 定制机型以及…

Web自动化Demo-Go+Selenium

1.新建工程 使用GoLand新建工程如下: 打开终端输入如下命令安装Selenium go get -u github.com/tebeka/selenium 2.编写代码 package mainimport ("fmt""github.com/tebeka/selenium""log""time" )const (chromeDriver…

【AUTOSAR 基础软件】ComM模块详解(通信管理)

文章包含了AUTOSAR基础软件(BSW)中ComM模块相关的内容详解。本文从AUTOSAR规范解析,ISOLAR-AB配置以及模块相关代码分析三个维度来帮读者清晰的认识和了解ComM这一基础软件模块。文中涉及的ISOLAR-AB配置以及模块相关代码都是依托于ETAS提供的…

2025选题推荐|基于微信小程序的高校就业招聘系统

作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,…

MFC框架制作的exe,当界面增加或者删除组件后,需要如何修改Dlg.cpp?

使用Microsoft Foundation Classes(MFC)框架制作的应用程序中,当界面中增加或删除组件后,需要对Dlg.cpp文件进行相应的修改,以确保程序能够正确地初始化和管理这些组件。 1. 更新资源文件 (.rc) 首先,确保你…

Elasticsearch学习笔记(六)使用集群令牌将新加点加入集群

随着业务的增长,陆续会有新的节点需要加入集群。当我们在集群中的某个节点上使用命令生成令牌时会出现报错信息。 # 生成令牌 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node出现报错信息: Unable to create enrollment…

【React】使用脚手架或Vite包两种方式创建react项目

1.使用脚手架搭建React项目: 在终端窗口运行如下命令即可: npx create-react-app react-basic(创建的文件目录) npx:Node.js工具命令,用于查找并执行后续的包命令。 2.使用Vite包创建React项目: 在终端窗口运行如…

Redis集群相关

目录 一、Redis主从集群 主从数据同步原理 全量同步 1)为什么是基本一致而不是完全一致呢? 2)上述过程还有一个问题,怎么判断是不是第一次同步? 增量同步 1)master节点怎么知道slave节点与自己的数据…

初学者如何快速入门人工智能

一、引言 人工智能(Artificial Intelligence,简称AI),作为当今科技领域极具前景与影响力的方向之一,吸引着众多人士投身其中。无论是对科技充满好奇的学生,还是意图拓展职业发展路径的职场人士&#xff0c…

STM32 USB CUBEMX

开发背景 使用的平台:STM32H750 注意事项 时钟必须是48MHZ,其它都不行 2. 将默认任务的堆栈设大一点 如果使用操作系统,USB任务跑在默认任务里,因此需要设置默认任务的堆栈缓存是直接定义的全局变量,需要设置编译器…

Spring Boot常见错误与解决方法

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏 目录 创建第一个SpringBoot项目 SpringBoot项目各个…

基于神经协同过滤(Neural Collaborative Filtering,NCF)的算法

论文题目:Neural Collaborative Filtering∗ 论文地址:https://arxiv.org/abs/1708.05031 今天我要分享一篇关于深度学习在推荐系统中应用的经典论文,题为“基于神经协同过滤(Neural Collaborative Filtering,NCF&…

如何去除背景音乐保留人声?保留人声,消除杂音

在日常生活和工作中,我们经常遇到需要处理音频的情况,尤其是当我们想要去除背景音乐,仅保留人声时。这种需求在处理电影片段、制作音乐MV、或者提取演讲内容等场景中尤为常见。本文将为您详细介绍如何去除背景音乐并保留人声,帮助…

组合式API有什么好处

什么是组合式API? 组合式 API (Composition API) 是一系列 API (响应式API、生命周期钩子、依赖注入)的集合。它不是函数式编程,组合式 API 是以 Vue 中数据可变的、细粒度的响应性系统为基础的,而函数式编程通常强调…

论文笔记:Prototypical Verbalizer for Prompt-based Few-shot Tuning

论文来源:ACL 2022 论文地址:https://arxiv.org/pdf/2203.09770.pdfhttps://arxiv.org/pdf/2203.09770.pdf 论文代码:https://github.com/thunlp/OpenPrompthttps://github.com/thunlp/OpenPrompt Abstract 基于提示的预训练语言模型&#…

数据结构——遍历二叉树

目录 什么是遍历二叉树 根据遍历序列确定二叉树 例题(根据先序中序以及后序中序求二叉树) 遍历的算法实现 先序遍历 中序遍历 后序遍历 遍历算法的分析 二叉树的层次遍历 二叉树遍历算法的应用 二叉树的建立 复制二叉树 计算二叉树深度 计算二…

VR全景摄影的拍摄和编辑软件推荐

随着虚拟现实技术的不断进步,VR全景摄影逐渐成为商业、娱乐和教育等多个领域中的重要工具。通过专业的设备与软件,摄影师能够创作出沉浸式的360度全景作品,为观众提供身临其境的视觉体验。在这篇文章中,我们将介绍VR全景摄影的相关…

(接口测试)day01接口测试理论 http理论 接口测试流程 接口文档解析

一.接口测试理论 1.接口和接口测试 服务器为客户端开了一个验证接口(接口本质:函数方法)客户端向服务器传送的消息可以相当于函数的参数,接口是用来让客户端传递数据的 接口:相当于开了一个通道 当服务器要给客户端响…