生成可视化数据构造工具,我只用了5分钟
作者|孙敏
如果依赖纯手工的方式去构造数据,花费时间长、重复性工作量大,是非常低效的。所以各式各样的数据构造工具应运而生。
我们在工作中,常见的一些数据构造的方法:
1、存储在本地的
依托在文档管理平台上的记录,比如文档记录删除Redis中的XX key,然后手动去操作
存储在自己电脑上的SQL脚本
2、生成Web页面的
自己用HTML+JS+一些Spring等框架组合的Web页面,大多数都是一个界面,上面有几个输入框,输入参数后去执行服务端的Java代码
3、工程里的Java方法
测试工程中,写几个本地的Java方法,然后去执行
通过对比我们会发现,上面这几种方法各有利弊
存储在本地和工程里,简单,生成一个数据构造工具的成本低。但是本地的东西不利于传承,也不利于和其他人共享使用这些方法。
Web页面式的执行起来清晰,方便大家共享使用。但是生成一个Web页面的成本稍微高些。你需要了解基础的HTML+JS,需要了解前后台的交互。而且好多数据构造工具是操作数据库的,如果一旦测试库变更了配置,需要去修改代码,重新部署上线
我对转转APP这面进行了一下统计,截止到目前,可执行的界面化的数据构造工具,只有8个(分布在3个Web页面);而文档平台上对某个数据的构造的方法描述,以及Java测试工程里的本地方法非常多,因为放的地方非常杂,所以不易维护,而我也不能很清楚的知道我们到底有多少个可用方法。
那能不能汇总各类数据构造工具,让它的生成变的更简单?答案是肯定的。
通过对现有数据构造工具的使用,发现其实所有数据构造的方法,都有一定的规律。一个脚本大概需要以下内容:
1、配置文件,连接MySQL等服务的配置信息
2、执行的脚本内容,SQL语句等
3、脚本的入参(比如传入不同的uid,来构造不同用户的数据)
转转的数据构造方法主要是由SQL、WRedis、Redis、codis、Java构成的,针对这五种类型的脚本需要的配置信息以及主要的方法如下:
类型 | 配置 | 方法 |
SQL | Host user password db | select delete update … |
WRedis | appKey type | set del … |
Codis | team | set get … |
Redis | host port db | set get … |
Java | 无特殊配置文件 | 自定义的方法 |
根据这些类型脚本的通性,我们可以设计出一个自定义的脚本创建、执行工具。
什么叫自定义?创建出来的脚本工具是什么样的?自定义就是配置信息、脚本信息什么的都是我自己个性化的。我只要知道脚本的配置信息,要执行的方法,以及可变的一个变量信息,就可以组合生成一个可视化的数据构造工具。
拿SQL UPDATE语句来举例,例如:我要修改测试环境,uid=XX的用户的创建时间。
1、首先uid是不固定的,那它就是一个可以让用户输入的参数
2、然后我知道测试环境的MySQL连接信息:host=xxx,user=root;password=123456;db=user
3、最后我知道更新某字段的SQL语句为:UPDATE user set createTime=xxx WHERE uid=xxx;
用给定的这些配置文件、脚本内容、执行变量,即可生成一个可以执行的界面化的工具
新建脚本的页面如下:
一个数据构造脚本是由一串的脚本步骤组成的,比如更改商品信息。我首先需要调用SQL语句更改数据库中的内容,然后需要通过调用WRedis方法清除商品缓存信息。
新建单个脚本步骤的页面如下:
最终的执行界面,会根据你创建时的变量名生成多个输入框,供用户输入。然后根据用户输入的变量值去执行对应的脚本信息。
综上,生成一个数据构造工具,我只要把脚本信息录入进去就好了。然后就会根据我录入的信息生成界面化的工具了。
那这个自定义数据构造工具平台是怎么实现的呢?简单来说,就是录入脚本信息,解析脚本信息,执行脚本信息。
一个脚本由脚本基本信息、变量和一系列脚本步骤组成;脚本步骤由步骤信息、脚本类型、脚本步骤配置文件、脚本执行方法步骤组成。
变量信息:
定义一个规则,目前只支持输入框类型。变量名=输入框内的提示信息;
然后执行时去解析这些变量信息展示成输入框样式;
当然后续还可以扩展很多,定义更多的变量信息规则,比如可以设定下拉输入框,输入框内容必填非必填等。
脚本步骤-配置信息:
这个比较简单,不同脚本类型不同的配置内容,只要能正确解析处理即可
脚本步骤-要执行的方法:
根据不同的脚本类型,执行不同的方法;
这里也需要对方法进行一些定义和解析,比如调用Java方法的入参类型需要支持String、int、Map等多种类型,那需要创建一个规则标识当前入参的类型;
还需要针对变量信息进行一个定义,我这里用的是${param}的格式,这样你执行时才能替换变量使其生效。
执行脚本:
上面介绍变量信息的时候说了,我们会根据变量信息生成界面的输入框让用户输入信息,然后执行时替换脚本中的变量信息,去执行真正的脚本内容。执行主要用了Java的动态加载来实现。
执行这里为了能拿到具体的执行日志,会针对每个人每次执行脚本时都动态的生成一个执行id,去贯穿整个执行过程。从而可以拿到整个执行过程中生成的日志。而且这种日志可以利用到自定义的Java脚本中去,可以让用户自定义一些要最终在界面上输出的内容。
通过对执行脚本次数等信息进行埋点,方便分析什么样的工具最受欢迎;
做好数据备份,防止服务器出问题等导致的数据丢失问题。
通过自定义数据构造工具,我们能获得什么?高效。我们通过很短的时间生成了一个工具,在版本快速迭代过程中,有利于提高我们的测试效率。
便于他人使用。当RD让我们帮忙构造数据时,一个链接扔过去,更利于大家共享构造方法。
便于传承、汇总。SQL语句等简单内容,再也不用每个人本地放一份,也不用维护到文档平台去记录。直接录到自定义脚本平台上,保存每一个脚本,随时使用。
易于修改。配置文件更改?没关系,直接编辑一下脚本,修改一下配置,即时生效。
便于统计。想知道这么多脚本,哪个用的次数最多,想分析一下为什么?针对每个脚本我们除了创建者的信息外,针对每个脚本的有效执行次数都做了记录,轻松查询最受欢迎的脚本排行。
放一组自定义数据构造平台,在APP实行了3个版本后的数据(当然包含了其他业务线部分同学的数据)
可视化脚本数量:31个
单个脚本执行最多的次数:344次
每个公司、每个测试组肯定都会涉及到数据构造,找到适用自己的一个脚本配置模板,每个人都可以快速的生成一个可视化数据构造工具。
往期精彩回顾