查看原文
其他

生成可视化数据构造工具,我只用了5分钟

转转QA 转转QA 2022-11-09

作者|孙敏

在测试过程中,我们需要各种各样的测试数据

如果依赖纯手工的方式去构造数据,花费时间长、重复性工作量大,是非常低效的。所以各式各样的数据构造工具应运而生。 

我们在工作中,常见的一些数据构造的方法:

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次

最后

每个公司、每个测试组肯定都会涉及到数据构造,找到适用自己的一个脚本配置模板,每个人都可以快速的生成一个可视化数据构造工具。

往期精彩回顾

数据驱动过程改进

论测试方法带来的成就感

日志插桩工具快速搞定接口测试

转转APP专项测试——静态代码扫描

从性能分析角度谈拆分组件


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存