前言:今天我们来学习下App埋点测试用例如何做自动化回归!
一、背景和目的
线上存在埋点数量总数大于1000个,主流程case大于300个,在对功能迭代过程中经常会有对已有的埋点进行回归的述求,以往都是消耗大量的时间去手工回归,同时覆盖2端还容易出现漏测的现象。
为了改善现状,内部调研可做成UI自动化回归,经过实践后约能提效50%,且只要及时补充场景,就可以大大降低漏测的场景。
二、断言方法
如何获取客户端上报的埋点数据:
- Android 客户端通过adb命令实现:
#!/usr/bin/env python
# _*_ coding: utf-8 _*_
# @project : datafaker
# @File : test.py
# @Date : 2021/8/18 11:32 上午
# @Author : 李文良
def save_logcat_to_file(self, file_path, grep_str="", extra_args="", parameter="-d"):
"""
保存log 到指定文件 & 返回 进程
adb logcat -v time > xxx
:param grep_str: 过滤字符
:param extra_args: 额外的参数
:param file_path: log 存储路径
:param parameter: logcat的额外的参数; 默认-d(将缓存的日志输出, 并且不会阻塞;)
:return: log 进程
"""
logcat_cmd = "shell "
to_file_cmd = " > " + file_path
if extra_args:
logcat_cmd += " " + extra_args
if grep_str:
if config.is_windows:
# logcat_cmd += ``"\"logcat -d -v time | grep \'"+ grep_str + ``"\'\""
logcat_cmd += ``"\"logcat " + parameter + ``" -v time | grep \'" + grep_str + ``"\'\""
else:
# logcat_cmd += ``"logcat -d -v time | grep \'"+ grep_str + ``"\'"
logcat_cmd += ``"logcat " + parameter + ``" -v time | grep \'" + grep_str + ``"\'"
else:
logcat_cmd = ``"logcat -v time"
# 打印日志详细时间的简单数据
return self.cmd(logcat_cmd + to_file_cmd, return_proc=True)
- iOS 客户端通过idevicesyslog命令实现:
#!/usr/bin/env python
# _*_ coding: utf-8 _*_
# @project : datafaker
# @File : test.py
# @Date : 2021/8/18 11:32 上午
# @Author : 李文良
def save_device_log(device_id, device_log_path):
"""
开始保存设备log到指定文件 & 返回保存log 进程
:param device_id: 指定设备 id
:param device_log_path: 设备log文件
:return: 保存log 进程 / None
"""
try:
Logger().setlog(device_id + " 准备收集Case 日志", LEVEL_INFO)
if PLATFORM_IOS in config.operating_system:
# proc = Shell.proc("idevicesyslog -u "+ device_id + " > "+ device_log_path)
proc = Shell.proc("tidevice -u " + device_id + " syslog> " + device_log_path)
else:
device = ADB(serialno=device_id)
device.clear_logcat()
proc = device.save_logcat_to_file(device_log_path)
Logger().setlog(device_id + "开始收集Case 日志", LEVEL_INFO)
return proc
except:
print("存储设备log异常")
return None
3、H5页面通过调用客户端webview能力实现:
因H5是初尝试实现,在落实过程中,为了保证能够有如下效果,调研设想了3套方案
方案一「舍弃」: 通过获取H5的日志,对H5日志进行断言
舍弃原因:当前线上环境的H5埋点,是直接上报到线上环境的,避免测试数据对统计造成影响;实现对H5执行日志捕获投入成本高;
实现流程如下:
方案二「舍弃」:写一个新的API,供H5上报埋点时异步调用
舍弃原因:投入资源成本高,线上会高频调用;无法保证延迟和稳定容易影响到业务
流程如下:
方案三「最终」:
H5实现方案是在上报埋点的方法里面,同时异步调用客户端webview的能力,达到共用客户端实现的方法,也可以完成埋点的断言。
实现流程如下:
三、实现前后测试方法对比
场景 | 传统人工回归验证 | UI自动化验回归 | 实现后优缺点 |
客户端操作 | 手动挂代理,开启彩蛋(客户端调试模式)高频重复操作APP | 自动化操作 | 优点:可以大大减小人工高频操作缺点:客户端的操作需要提前录入case |
埋点上报验证 | 操作APP后,需要等待3分钟左右(平台数据查询有延迟),登录神策平台相关SQL查询设备上报记录分析每个字段的上报和时序是否和预期一致 | 对客户端上报日志自动断言每个埋点都是1个case,单独进行回归,互不影响输出相关SQL,人工可以随机快速复核埋点 | 优点:1、大大降低漏测率,质效提升约50%2、操作后实时进行断言,无需等待缺点:前期还需人工随机复核 |
回归频率和范围 | 回归主流程埋点 | 只要录入,都能覆盖回归 | 优点:覆盖范围全,回归次数越多,质效提示越明显缺点:释放的人力,部分时间投入到了埋点case录入和维护 |
四、总结
1、梳理业务流程,明确自动化需要做哪范围
2、自动化框架造型
3、埋点测试存在哪些痛点,对比之后寻找解决思路
4、数据自动校验对比
5、提高自动化利用率,工程发布自动化触发自动化,每天定时执行检测