测试平台系列(147) 改造变量处理模块(1)

温故而知新

上一节我们简简单单修复了一个bug(过了一年多我也不记得是啥了,看标题说的)。

那么接下来,我想做一件事情:

改造pity的变量管理模块

至于为什么,那属实是pity里面对于变量的替换实在太过于丑陋了。在此之前,我们先看看节选的现有的pity代码(依托答辩)。

来看这简简单单的一段,首先通过正则提取出字符串里面的变量,如${name}这样的内容,如果遇到${response.data.name}就继续做深层次的解析。

这一段代码,性能差不说,写的也很繁琐,里面还用到了序列化这种性能怪兽。慢就不说了,反正真挺丑的(不优雅)。

要命的是,我们的一个前置条件里面可能会包含很多个变量,比如url里面有变量,body里面有变量,断言里面有变量,以原来pity的写法,每次有变量产生都会尝试去渲染一次,累不累呀!(满满的槽点)

为了有个更好的方式去处理这些随时都在变化的值,我需要重新向你们隆重介绍一款类似的第三方工具:jinja2

了解jinja2模板引擎

可能有同学就会说了:jinja2不就是那啥老古董吗?就是那啥,以前写django,写flask的时候,去渲染html页面的。这题我会,这题我会:

html 复制代码
<head>
  <title>{{htmlTitle}}</title>
</head>

要用的时候,我们把htmlTitle变量传递进去就能展示出对应的html页面了。

没错没错,就是这玩意。我们先来了解下它是干嘛的:

果不其然,他就是一个模板引擎。官网的介绍比较晦涩,但也列举了一些特点,这里咱们着重看几个:

  • 强大的HTML自动转义

    这个指的是我们模板一般是html模板,去渲染变量的时候不会影响原生的html语法或被他影响。这显然和我们没啥关系,我们的使用场景并非html。

  • 模板继承

    也是针对html的,比如我们可以编写一个基础的html页面,就像基类一样。

  • 编译最优的python代码

    这个是一个关键点,我们知道我们之前的变量只能简单的通过伪JSONPath去取值,但如果咱们多了Python语法支持,那岂不是芜湖~起飞!

    没错,这也是我们要转为jinja2的一个核心点,而且重要的是,他还能支持自定义的函数,这个就很牛掰了。

    想象一下,我们这样使用我们的变量,假设我们需要获取当前时间戳,那我们只需要定义一个函数叫: now, 那我们在测试用例里面这样使用:

JSON 复制代码
{
  "timestamp": {{now()}}
}

这样便可以自动获取到当前时间戳, 并替换这一串变量,成为以下内容:

JSON 复制代码
{
  "timestamp": 1612000000
}

这里的数字我随便写的,大家看得懂就行。由于篇幅的原因,jinja2的部分就留到后头继续介绍了。大家只要明白为什么我们要做改造即可。

总结

在pity的历史长河中,粑粑代码正在悄无声息地扎根。我们必须合理地清除他们。

使用到jinja2的原因很简单,我们需要利用它的几大特性:

  • 完美的变量替换机制

  • 支持自定义函数

  • 支持一部分原生Python语法,天然就支持JSONPath取值

    以上就是我们今天的总结,下一节我会详细介绍jinja2的基本用法,并且封装成公共方法,敬请期待。

相关推荐
Reart4 小时前
Leetcode 213.打家劫舍2(内含闲谈,打劫真是技术活,好题,716)
后端·算法
触底反弹4 小时前
🔥 RAG 到底是怎么工作的?掰开揉碎了给你讲明白!
javascript·人工智能·后端
techdashen4 小时前
Go 1.26 新增 `bytes.Buffer.Peek`:只看数据,不移动读取位置
开发语言·后端·golang
Reart5 小时前
Leetcode 198.打家劫舍(716)
后端·算法
Java编程爱好者5 小时前
Spring6.0+Boot3.0:秒级启动、万级并发的开发新姿势
后端
YYYing.5 小时前
【C++大型项目之高性能服务器框架 (七) 】Socket与ByteArray模块
服务器·c++·后端·框架·高性能·c/c++
青山木5 小时前
一把 Redis 分布式锁,踩透四个坑:锁争抢、僵尸锁、锁过期、锁丢失
java·数据库·redis·后端
神奇小汤圆6 小时前
雪花算法ID重复了?惨痛教训:请勿轻易造轮子!
后端
Java内核笔记6 小时前
万字避坑!Spring Boot 3.x 升 4.0 最全升级指南(附 Migration Checklist,建议收藏⭐)
java·后端
从零开始的代码生活_6 小时前
C++ list 原理与实践:双向链表、迭代器与简化实现
开发语言·c++·后端·学习·算法·链表·list