测试平台系列(36) 使用全局变量

测试平台系列(36) 使用全局变量

大家好,这里是老克,一个想和大家一起分享测试开发相关的技术,面试经验和成长经历的博主!

欢迎大家关注我的公众号: 测试开发坑货

回顾

上篇我们已经编写好了全局变量的页面,今天我们就来学习怎么使用他。

Windows下的环境变量

其实说白了,全局变量也就是一个参数的读取->替换的过程。所以我们得先补习一下el表达式的知识。(关于jsonpath,这个我不太熟悉,我不太算Java技术栈的)

我们都知道,在Windows等操作系统里面会有环境变量的概念,比如:

image

当我们echo %JAVA_HOME%的时候,为什么输出的不是"%JAVA_HOME%"呢?因为windows有相关的约定,当字符串被%%包裹的话,意味着取值会从环境变量里面寻找,如果找不到,就不进行替换:

这个变量不存在,所以不进行任何替换操作

EL表达式

这是我当时在上上家公司设计的一套变量表示语法,但是意外撞了EL表达式。我约定的是用${}包裹起来的内容都算作变量,这样在接口测试中如果有需要传递变量的情况,就可以用这个方式来解决。

EL表达式源自我现在正在维护的一个JSP的项目,也算是一种猿粪吧!

思路

我们现在支持3种变量类型: JSON/YAML/STRING。我们的步骤也很简单:

  1. 拿到变量的值(取值)
  2. 替换变量为对应的真实值(替换)

编写变量解析器

  • 编写解析器基类
image

基类有2个方法:

  • 解析

  • 取值

    解析是一个待实现的方法,因为不同的类型解析器不一样,未来如果需要支持XML类型,那也要重写这个方法。

    取值比较通用,目前来讲,我们解析完yaml以后也是一个json对象,所以可以写在基类中。

    我们来仔细看看这段代码:

参数部分

parse接受2个参数,data是解析后的数据(一般是JSON对象),key是el表达式的路径如: JAVA_HOME。但是我们不能只做最简单的,我们还需要获取深层次路径的值。

举个例子:

全局变量INFO的值是个JSON类型:

{
  "name": "wc",
  "age": 19,
  "hobby": "play game"
}

我们如果只通过INFO取到JSON对象,那是远远不行的,我们还需要能够通过INFO.age取到对应的年龄。所以我们这里编写了get方法。

实现过程

其实道理很简单,我们先通过.去分割字符串,如果是INFO.age,那么字符串就会成为: ["INFO", "age"]数组。接着我们从数组的第2个元素去遍历,如果取到的是数字,那么我们就按照数组索引去取值,如果是普通的key,就按照map来取值。

最后做一个异常捕获,防止那种乱写变量的情况出现。如果result是字符串,我们直接返回。如果是数字类型,那我们就将它转为字符串类型。

思考

因为我们现在是取值,后期替换的时候是用replace把${INFO.age}替换为对应的值,如果你的age是19这个数字的话,想一下replace会出错吗?

分别实现3种解析器

image

先看string类型,因为他自己不可能再去深层次取值了。

说到这里,我突然想到它可以直接索引去取对应的字符串子串,但是我不太建议支持这样的功能。因为索引需要2个值,1个的话比较鸡肋。这样对于我们的el表达式来说不是太统一。

所以我们直接return value,也就是不需要进行更深层次取值了。

再看JSON和yaml类型,其实就是load了一下数据(将字符串数据转为JSON对象)。

编写GConfigDao获取key的方法

之前我们的查询变量的方法,都是批量的,或者说是查询一个列表。我们需要一个更精确的搜索,只要一条变量的数据。

image

接受key的名字和对应的环境,如果环境不传的话,则不根据环境去查询。因为目前我们用例执行的时候没有跟环境绑定,所以暂时先不传入env,后续备用的字段。

这里想到了小方的疑惑,之前可能go写多了,下意识会把err return回去,现在改成Python的写法了。

改写用例的执行部分

在我的理解里面,用例的变量替换是在用例执行的第一步,并且替换的地方只有那几处:

  • url
  • request_header
  • body

因为目前还没有前后置条件,所以后续再补充,断言里的内容也如此,它们独立于用例之外了。

改造Executor类

image
  • 新增fields字段,存放需要替换变量的字段。

  • 编写parse_gconfig方法

    依次去修改各个字段中的变量。

  • 编写get_parser

    这个是根据gconfig类型来获取对应的解析器,如果0则为String解析器,1则是JSON解析器,2则是Yaml解析器。

  • parse_field

    这个方法是先获取原始字段里面的el表达式,然后依次去解析到真实数据,最后再修改TestCase的字段(注意只是临时修改,不修改数据表)。

目前代码优化点### 在run方法加上有2处:

  1. 通过key获取配置的时候,一旦一个字段里面出现2个参数的时候,会获取2次key,也就是查询db2次,这样开销很大
  2. 每次跑都会执行db,开销巨大,可以考虑本地缓存或者redis缓存。

修改run方法

image

--

看下效果

image

可以看到参数都已经进行了替换,我们再来看看变量BASIC_CONFIG的内容:

image
image

--

那么,本期内容到这里就结束了。

在线演示地址: http://47.112.32.195/

前端代码仓库: https://github.com/wuranxu/pityWeb

后端代码仓库: https://github.com/wuranxu/pity

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,386评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,142评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,704评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,702评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,716评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,573评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,314评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,230评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,680评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,873评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,991评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,706评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,329评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,910评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,038评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,158评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,941评论 2 355

推荐阅读更多精彩内容