从0开始python学习-47.pytest框架之解决Template替换无法进行二次处理的问题之热加载

问题:当参数为动态参数时,Template替换无法进行二次处理

解决方案:通过热加载来进行替换

热加载原理:在代码运行的过程中动态的调用python中的方法达到获得动态参数

可以进行热加载的情况:yaml文件,随机数,替换后的值进行计算,加密等

示例:

需要热加载的数据:

yaml数据:extract.yaml

token: 76_ZgYcDxWFgCCjZVj2EPfqj7QWW_k3-iUZq68Mr6hE_VvDDa_IAfjEIi7nQwMUoISer8MAspesP1JnP1iIziezVPcB4jqZs4z_3EQpVtkEVm0Z0L7VyTmQV7JC0gsTYGaAAAPUC

需要操作的数据

class DeBugTalk:#场景一:读取yaml中的数据def read_yaml(self,key):with open("D:\study\pytest\extract.yaml", encoding="utf-8") as f:value = yaml.safe_load(f)return value[key]# 场景二:数据计算def add(self,a,b):return str(int(a)+int(b))# 场景三:读取随机数def random(self):return str(random.randint(1, 10))

热加载方法

class ExtractUtil:def hotload_replace(self,data_str:str):# 1.定义一个正则匹配的通用表达式# regexp = "\\$\\{(.*?)\\}"   # 用于匹配格式为:${access_token}regexp = "\\$\\{(.*?)\\((.*?)\\)\\}"  # 用于匹配格式为:${函数名(参数)}fun_list = re.findall(regexp,data_str)for f in fun_list:print(f)# ${函数名(参数)} >>函数名=f[0],参数为=f[1]if f[1] == "":  # 当f[1]没有参数为''时value = getattr(DeBugTalk(), f[0])()  # >>此时通过反射调用了random()和dm5()方法else:  # 当f[1]有参数时value = getattr(DeBugTalk(), f[0])(*f[1].split(","))# 如果value的值为字符串格式,但是时数字,为了看着清楚明白,可以加一层处理if isinstance(value, str) and value.isdigit():value = "'" + value + "'"print('value:%s' % value, type(value))  # 注意这里的打印是在if同级,不然不满足的数据无法打印# 拼接旧的值old_value = "${"+f[0]+"("+f[1]+")}"# 将旧的值替换成新的值data_str = data_str.replace(old_value,str(new_value))return data_strif __name__ == '__main__':request_data = {"data1":"${read_yaml(token)}","data2":"${add(1,2)}","data3": "${random()}"}data_str = yaml.safe_dump(request_data)print("old_str:%s" % data_str)data_str = ExtractUtil().hotload_replace(data_str)print("new_str:%s" % data_str)

打印结果

 

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

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

相关文章

用我这套模板,几分钟做出文档网站!

大家好,我是保姆皮,最近我上线了自己的《编程宝典》网站,可以在线阅读我分享过的各种编程学习路线和知识干货。 指路:https://codefather.cn/ 不少小伙伴催我出教程,说也想做个类似的文档网站。 所以我用最快的速度出了…

程序员如何写高水平简历?(附模板)

Q:什么是高水平的简历? A:满足HR需求的同时,最大化的体现自身价值的简历是高水平的简历 HR的需求是什么? ✅ HR想看到清晰专业的简历模板 ——家人们每天看几百份简历谁懂啊!花里胡哨真看不下去一点&…

OpenAI 自带的检索功能好用吗?定量测评带你深度了解!

向量数据库的劲敌来了?又有一批赛道创业公司要倒下? …… 这是 OpenAI 上线 Assistant 检索功能后,技术圈传出的部分声音。原因在于,此功能可以为用户提供基于知识库问答的 RAG(检索增强生成) 能力。而此前…

深入理解 MyBatis-Plus 批量保存方法

前言 在项目开发中,需要插入批量插入20多万条数据,通过日志观察,发现在调用MyBatis-Plus中的saveBatch()方法性能非常的差,本篇文章主要分享一下saveBatch()的原理以及使用的注意事项 原理 我们通过源码的形式进行解析saveBatc…

生信步骤|Orthofinder寻找直系同源基因

在探究功能基因的时候,我们经常需要对所研究的基因/蛋白质进行聚类分组,逐个类群探究蛋白功能。创建同源群可以采用Otrhofinder软件,该软件安装方便,运行快速,调用简单,可以说是构建同源群的神器。从OrthoF…

逆变器简述

一般家用电器,像微波炉,电饭煲等都是直接插墙壁上的电就可以工作,所以这些家用电器是使用我们市电AC220V的电压 但我们用到的手机,电瓶车以及新能源汽车都是需要充电器的,所以这些用电产品里面都是有电池的&#xff0…

统计学-R语言-4.1

文章目录 前言编写R函数图形的控制和布局par函数layout函数 练习 前言 安装完R软件之后就可以对其进行代码的编写了。 编写R函数 如果对数据分析有些特殊需要,已有的R包或函数不能满足,可以在R中编写自己的函数。函数的定义格式如下所示: …

在微服务架构中认证和授权的那些事儿

在微服务架构中认证和授权是最基础的服务能力,其中这一块行业类的标准就是OAuth2 和 SSO ,而OAuth2 和 SSO 可以归类为“用户管理和身份验证”工具,OpenID Connect 1.0是 OAuth 2.0 协议之上的一个简单身份层。 Part.1 认识OAuth 2.0 OAuth…

低代码与小程序开发:简化创新,加速应用开发

随着信息技术的迅速发展,应用程序的需求与日俱增。然而,传统的软件开发往往耗时、复杂,对于许多企业和开发者来说,开发应用程序的成本和难度成为了一道门槛。而近年来,低代码开发和小程序开发的兴起为解决这一难题带来…

RocketMQ源码阅读-Producer发消息

RocketMQ源码阅读-Producer发消息 1. 从单元测试入手2. 启动过程3. 同步消息发送过程4. 异步消息发送过程5. 小结 Producer是消息的生产者。 Producer和Consummer对Rocket来说都是Client,Server是NameServer。 客户端在源码中是一个单独的Model,目录为ro…

Torch not compiled with CUDA enabled

最近接触chatglm3对话预训练模型,从git上下载,装包装半天,最后终于跑起来了,但是一对他进行对话,后台就开始报错了 File "E:\Python311\Lib\site-packages\torch\nn\modules\linear.py", line 114, in forw…

【c++】入门4

内联函数声明和定义不能分开 inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址 了,链接就会找不到。 auto关键字 随着程序越来越复杂,程序中用到的类型也越来越复杂,经常体现在&…

JavaWEB学习笔记 2024-1-5 --HTML

JavaWEB 上一篇 个人整理非商业用途,欢迎探讨与指正!! 文章目录 JavaWEB1.HTML1.1HTML中的三大基本标签1.2显示标签1.2.1文本标签1.2.2表单标签1.2.2.1input标签1.2.2.2下拉框1.2.2.3多行文本1.2.2.4表单标签的通用属性1.2.2.5form标签1.2…

用JAVA实现樱花飘落

用java实现一个樱花飘落的方法 package Text2;import javax.swing.*; import java.awt.*; import java.util.ArrayList; import java.util.List;public class Sakura extends JFrame {private List<Point> sakuraList; // 樱花的位置列表public Sakura() {sakuraList n…

动态pv策略和组件

pv和pvc&#xff0c;存储卷&#xff1a; 存储卷&#xff1a; emptyDir 容器内部&#xff0c;随着pod销毁&#xff0c;emptyDir也会消失 不能做数据持久化 hostPath&#xff1a;持久化存储数据 可以和节点上的目录做挂载。pod被销毁了数据还在 NFS&#xff1a;一台机器&am…

【入门】字符串对比(UPC)

题目描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到100之间)&#xff0c;它们之间的关系是以下4种情况之一&#xff1a; 1&#xff1a;两个字符串长度不等。比如 Beijing 和 Hebei 2&#xff1a;两个字符串不仅长度相等&#xff0c;而且相应位置上的字符完…

x-cmd pkg | tsx - Node.js 的直接替代品

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 tsx 代表 “TypeScript execute”&#xff0c;由 TypeScript 编写&#xff0c;内部使用由 Go 语言编写的 esbuild 核心二进制实现超快的 TypeScript 编译&#xff0c;旨在增强 Node.js 以无缝运行 TypeScript / ESM /…

Golang的API项目快速开始

开启一个简单的API服务。 golang的教程网上一大堆&#xff0c;官网也有非常详细的教程&#xff0c;这里不在赘述这些基础语法教程&#xff0c;我们意在快速进入项目开发阶段。 golang好用语法教程传送门&#xff1a; m.runoob.com/go/ 编写第一个API 前提&#xff1a;按照上一…

3.3 设计模式基础

设计模式的识别&#xff1a;经验丰富的开发者经常会发现&#xff0c;新问题往往与他们之前所遇到的问题存在相似之处&#xff0c;虽然这些问题和解决方案可能各不相同。正是这些问题之间的共性催生了设计模式的概念&#xff1a;将对类似问题解决方案的理解泛化和形式化。 模式…

17. 从零用Rust编写正反向代理, Rust中一些功能的实现

wmproxy wmproxy是由Rust编写&#xff0c;已实现http/https代理&#xff0c;socks5代理&#xff0c; 反向代理&#xff0c;静态文件服务器&#xff0c;内网穿透&#xff0c;配置热更新等&#xff0c; 后续将实现websocket代理等&#xff0c;同时会将实现过程分享出来&#xff…