研发效能 埋点自动化测试工具的设计与实践

TesterHome小助手 · 2022年12月13日 · 最后由 迷龙 回复于 2022年12月14日 · 7439 次阅读

来源:自如质量效能
作者:张茹

一、什么是埋点

数据埋点是数据采集的一种重要方式,主要用来记录和收集终端用户的操作行为,当用户的行为满足某种条件的时候,会自动触发记录和存储,然后这些数据会被收集并被传输到终端提供商。通过埋点收集到的信息,可以进行汇总分析,推动产品优化或指导运营。

二、埋点测试现状

我们在工作过程中一般遇到的都是手动埋点方式的客户端埋点:
即:产品经理在提出需求,将埋点需要上传的参数告知前端开发,开发明确需求后就会进行埋点。

这种埋点方式优点如下:

  • 埋点方式简单灵活,埋点代码实现过程对开发来说也较为简单,不会占用太多时间。
  • 可对埋点中需要上传信息的字段进行个性化选择,满足复杂业务场景。

手动埋点的缺点也是显而易见的:

  • 埋点过多时,大量重复性操作较为枯燥且容易出错。
  • 沟通成本较高。
  • 容易发生遗漏。

正是因为有这些问题,我们在使用过程中经常会遇到一些困难:

1.在埋点管理上

  • 同一个 APP 版本中,埋点需求分布于不同的需求文档,不好管理。
  • 在每一次的迭代过程中,难以找到历史版本已经存在哪些埋点,容易有重复的需求。
  • 当前需求的埋点如果有修改,如果沟通不及时,也容易发生遗漏。

2.在测试过程中

  • 每次都会在功能测试后再进行埋点测试,埋点测试占用时间也比较多。
  • 神策数据会有滞后的情况,不能及时验证触发埋点的正确性。

因此我们需要将埋点事件统一管理起来,并且能够提高埋点测试的效率和准确性,及早发现问题。

三、埋点测试工具整体设计

埋点工具分为两个部分:埋点信息管理配置平台、埋点测试工具。

配置平台:埋点信息的管理和维护,给客户端提供埋点信息。
埋点测试工具:对埋点信息进行校验,提供埋点日志、测试报告功能。
交互逻辑:

  • 在埋点信息配置平台添加埋点事件和属性等信息。
  • 配置平台提供后端接口,测试在埋点测试工具中开启埋点测试。
  • 测试输入版本号,查询出此版本的所有埋点信息。
  • 测试点击元素或浏览页面,触发埋点。
  • 埋点工具根据已获取的埋点信息,进行简单的预期值校验。
  • 校验结果显示在测试报告中。

四、埋点信息管理

将每个版本和需求中的埋点信息维护到埋点平台,以便埋点信息的管理。

1.设计思路

  • 埋点信息管理系统主要功能:
  • 提供埋点信息的录入功能。
  • 展示并可查询某埋点的详细信息。
  • 修改埋点信息

2.实现方式

2.1.数据库

直接选用 mysql 数据库。分为埋点表和埋点属性表两个表。目前这两个表可以满足我们根据版本需求来管理埋点事件和属性的需求。

表结构如下:

  • 埋点事件表:
CREATE TABLE t_event_tracking (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
event_version varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '事件版本号',
event_name varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '事件英文名',
event_description varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '事件中文名',
status int(2) NOT NULL COMMENT '状态,0有效,1删除',
is_delete int(2) NOT NULL COMMENT '是否删除,0不删除,1删除',
create_user varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
modify_user varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人',
create_time datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
modify_time datetime(0) NULL DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (id) USING BTREE,
INDEX IDX_EVENTVERSION(event_version) USING BTREE,
INDEX IDX_EVENTNAME(event_name) USING BTREE
)
  • 埋点属性表
CREATE TABLE t_event_attribute (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
event_name varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '事件英文名',
attribute_name varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '属性英文变量',
attribute_value varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '属性值',
attribute_description varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '属性名称描述',
status int(2) NOT NULL COMMENT '状态:0有效,1删除',
create_user varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
modify_user varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '修改人',
create_time datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '创建时间',
modify_time datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间',
PRIMARY KEY (id) USING BTREE,
INDEX IDX_EVENTNAME(event_name) USING BTREE
)

2.2 后端代码实现

(1)框架选择:springboot 框架
(2)实现方式:

  • 在 pom.xml 文件中导入 springboot,mybatis-plus 等需要的包。

  • 连接数据库:用 mybatis-plus 方式连接数据库,在 application.yaml 中配置数据库链接

  • 与数据库对应的实体类 TEventTracking

  • DAO 层 TEventTrackingMapper。注解引用数据源,继承了 mybatis-plus 的 BaseMapper 类,简单的单表操作可以直接调用 base 类中的方法,不需要自己再去实现。

  • DAO 层 TEventTrackingMapper.xml。简单的单表操作可以不再写 sql。

  • service 层的接口 IEventTrackingService,继承了 mybatisplus 的接口,单表操作可以直接调用父类的接口,如果有其他业务逻辑的操作,可在接口中新增。

  • service 层的实现类 EventTrackingServiceImpl。同样继承了 mybatisplus 的实现类,并实现 IEventTrackingService 接口中自定义的方法。

  • controller 层 EventTrackingController。对外暴露接口,如:api/jf/tracking/event/add

  • 启动服务,后端就可以提供服务了。

2.3.前端

通过 vue 框架来实现整个前端的功能

3.埋点信息管理工具的使用

3.1.埋点列表查询

分页查询埋点信息,可以通过版本号和埋点事件的英文名来查询特定的埋点信息,支持模糊查询。

3.2.新增埋点数据

点击埋点信息页面左上角 “添加埋点” 按钮,会弹出新增埋点数据输入框,可以添加埋点信息。

3.3.修改埋点数据

点击每条埋点数据右侧的修改按钮,即可修改埋点信息。点击 “确定修改”,埋点事件修改完成。

四、埋点测试工具

1.设计思路

通过在工具中输入版本号,查询到此版本对应的所有埋点事件和属性值,前端比对已有埋点和预期的事件、属性值是否一致,达到实时验证埋点的效果,并能在最终出具埋点测试报告。

2.实现方式

后端:实现同埋点管理,提供给客户端埋点查询接口,查询所属版本的埋点事件和属性信息。

前端:增加彩蛋作为埋点测试入口,通过输入埋点版本号,查询到该版本的所有埋点信息,同客户端上面的埋点进行校验比对,显示出校验结果。

3.埋点测试工具使用

这里我们以 IOS 为例:
(1)查询需测试版本的所有埋点信息:

  • 点击工具按钮,第一行最右边有埋点测试按钮;
  • 点击 “埋点测试”,打开埋点测试工具页面;
  • 点击标题右侧的开关,打开埋点测试功能;
  • 在输入框中输入版本号,点击获取,即可查询到此版本需求的埋点事件。
  • 点击工具按钮或左上角返回按钮,回到 app。



(2) 点击埋点工具条的 “实时”,可以看到此版本已触发的埋点,和页面上触发的全量埋点。


(3) 点击埋点工具条的 “报告”,可以切换查看此版本的正确埋点、错误埋点、未触发的埋点。


五、总结

通过埋点测试工具,可以简单的执行埋点测试,测试结果一目了然,不需要每次到产品文档、神策中去核对每一条埋点数据,节省了埋点测试时间,提高了整体测试的效率。但是在埋点测试自动化的探索过程中,仅仅是一小步,未来我们也会根据用户的需要,来拓展出更多的功能,比如测试报告的管理等。

感兴趣的同学用起来试一试吧!

共收到 5 条回复 时间 点赞

收藏收藏,虽然没把工具发出来

其实我可以理解这篇文章只是介绍了一下 mybatisplus 入门的 crud 吗 貌似没看到什么特别突出的地方

这叫埋点测试还是埋点查询?❓

可以看看这个,这个也是埋点测试工具 手把手教学

https://testerhome.com/opensource_projects/garbevents

我们在工作过程中一般遇到的都是手动埋点方式的客户端埋点。即:产品经理在提出需求,将埋点需要上传的参数告知前端开发,开发明确需求后就会进行埋点。

想请问一下:作者是如何实现埋点的。现在有了埋点工具或者平台,还需要开发手动干些啥吗😂

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册