来源:自如质量效能
作者:张茹
数据埋点是数据采集的一种重要方式,主要用来记录和收集终端用户的操作行为,当用户的行为满足某种条件的时候,会自动触发记录和存储,然后这些数据会被收集并被传输到终端提供商。通过埋点收集到的信息,可以进行汇总分析,推动产品优化或指导运营。
我们在工作过程中一般遇到的都是手动埋点方式的客户端埋点:
即:产品经理在提出需求,将埋点需要上传的参数告知前端开发,开发明确需求后就会进行埋点。
这种埋点方式优点如下:
手动埋点的缺点也是显而易见的:
正是因为有这些问题,我们在使用过程中经常会遇到一些困难:
因此我们需要将埋点事件统一管理起来,并且能够提高埋点测试的效率和准确性,及早发现问题。
埋点工具分为两个部分:埋点信息管理配置平台、埋点测试工具。
配置平台:埋点信息的管理和维护,给客户端提供埋点信息。
埋点测试工具:对埋点信息进行校验,提供埋点日志、测试报告功能。
交互逻辑:
将每个版本和需求中的埋点信息维护到埋点平台,以便埋点信息的管理。
直接选用 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
)
(1)框架选择:springboot 框架
(2)实现方式:
与数据库对应的实体类 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
启动服务,后端就可以提供服务了。
通过 vue 框架来实现整个前端的功能
分页查询埋点信息,可以通过版本号和埋点事件的英文名来查询特定的埋点信息,支持模糊查询。
点击埋点信息页面左上角 “添加埋点” 按钮,会弹出新增埋点数据输入框,可以添加埋点信息。
点击每条埋点数据右侧的修改按钮,即可修改埋点信息。点击 “确定修改”,埋点事件修改完成。
通过在工具中输入版本号,查询到此版本对应的所有埋点事件和属性值,前端比对已有埋点和预期的事件、属性值是否一致,达到实时验证埋点的效果,并能在最终出具埋点测试报告。
后端:实现同埋点管理,提供给客户端埋点查询接口,查询所属版本的埋点事件和属性信息。
前端:增加彩蛋作为埋点测试入口,通过输入埋点版本号,查询到该版本的所有埋点信息,同客户端上面的埋点进行校验比对,显示出校验结果。
这里我们以 IOS 为例:
(1)查询需测试版本的所有埋点信息:
(2) 点击埋点工具条的 “实时”,可以看到此版本已触发的埋点,和页面上触发的全量埋点。
(3) 点击埋点工具条的 “报告”,可以切换查看此版本的正确埋点、错误埋点、未触发的埋点。
通过埋点测试工具,可以简单的执行埋点测试,测试结果一目了然,不需要每次到产品文档、神策中去核对每一条埋点数据,节省了埋点测试时间,提高了整体测试的效率。但是在埋点测试自动化的探索过程中,仅仅是一小步,未来我们也会根据用户的需要,来拓展出更多的功能,比如测试报告的管理等。
感兴趣的同学用起来试一试吧!