3. 事件触发条件测试
3.1 适用场景
事件触发条件测试适用于埋点系统中所有由用户行为、系统状态变更或定时器等条件驱动的事件上报。典型场景包括:
- 用户交互事件:点击、滑动、输入、长按等操作对应的埋点触发。
- 生命周期事件:页面进入/离开、应用前后台切换、组件挂载/卸载。
- 业务规则事件:购物车满额弹窗、倒计时结束、条件达成后的自动化上报。
- 异常事件:网络超时、API 失败、资源加载错误等被动触发。
3.2 前置条件
| 前置条件项 | 说明 |
|---|---|
| 埋点方案文档 | 明确每个事件的触发时机、触发频率、重复抑制规则及边界值定义。 |
| 测试环境就绪 | 埋点 SDK 集成完毕,服务端 mock 或真实日志接收端可用,事件校验工具(如 Charles、埋点抓包工具)已部署。 |
| 测试用例脚本 | 已编写按“触发时机/重复抑制/边界条件”分类的用例,并标注预期结果(事件触发 / 抑制 / 降频)。 |
| 时间基准对齐 | 测试设备时间、服务端时间与埋点时间戳统一校对,避免时间偏移导致误判。 |
3.3 操作步骤
本节按 触发时机验证 → 重复触发抑制 → 边界条件覆盖 三个子流程依次执行。
3.3.1 触发时机验证
- 根据埋点方案确认每个事件的触发条件(例如:页面进入时刻、点击松开时刻、连续滚动停止后 500ms)。
- 在测试环境中制造精准的时间点操作,记录事件上报日志中的时间戳。
- 对比真实触发时间与埋点方案中定义的时机阈值(允许误差 ±100ms,具体以方案要求为准)。
- 校验事件是否在预期时刻前后合理窗口内触发,且 不得提前或滞后 超过允许偏差。
3.3.2 重复触发抑制
- 确认埋点文档中是否定义了重复抑制规则(例如:同一次点击只触发一次、相同错误码连续上报间隔至少 30s、按钮防重复点击阈值为 1s)。
- 模拟高频重复操作:在抑制周期内连续触发同一事件(如快速连续点击、循环调用 API 导致错误事件)。
- 检查实际埋点日志:
- 第一(或前 n)次是否正常触发。
- 后续触发是否被抑制(日志中无重复事件)或降频(按间隔频率上报)。
- 抑制期过后再次触发是否能恢复上报。
- 特别注意 退出抑制窗口的边界:刚好在抑制阈值交界处(如 30s 整、30s+1ms)的表现。
3.3.3 边界条件覆盖
- 从埋点方案中提取所有关于触发条件的数值边界(例如:滚动距离超过 50px 触发、输入字符数 ≥3 触发、倒计时剩余 0 秒触发)。
- 分别测试 边界值 和 边界值±1 的输入:
- 滚动距离:49px(不触发)、50px(触发)、51px(触发)。
- 输入字符数:2(不触发)、3(触发)、4(触发)。
- 倒计时:1 秒(不触发)、0 秒(触发)、-1 秒(需确认是否触发或自动处理)。
- 针对定时器类事件,验证 极端边界:如定时器过早取消、系统时间调整、长时间休眠后恢复。
- 记录每个边界点的触发/抑制结果,与预期比对。
3.4 输入输出物
| 类型 | 输入物 | 输出物 |
|---|---|---|
| 文档 | 埋点方案(含触发条件定义表) | 触发条件测试报告(含通过/失败断言) |
| 测试数据 | 测试用例数据集(含边界值、重复次数、时间偏移) | 埋点日志快照(标注事件时间戳、事件名称) |
| 工具 | Charles / Wireshark / gpm 日志抓取工具 | 抓包文件或 SDK 内部日志 |
| 脚本 | 自动化测试脚本(如 Puppeteer 模拟用户操作) | 自动化执行结果 JSON |
3.5 责任边界
- 测试工程师:负责设计触发条件测试用例、执行测试、记录日志、比对结果;对边界值覆盖率负直接责任。
- 开发工程师:提供埋点 SDK 的触发逻辑细节(抑制算法、时间窗口);修复测试发现的触发时序 bug。
- 产品/数据产品经理:确认触发时机定义是否满足业务需求,审核边界条件下事件是否应该触发。
- 数据质量负责人:审批测试报告,判断是否存在不可接受的重复或丢失事件。
3.6 记录材料
- 触发条件测试用例清单(编号、事件名称、触发条件、预期结果、实际结果、是否通过)。
- 重复抑制测试日志摘录(时间轴、事件名、抑制前最后一次上报时间、抑制间隔)。
- 边界值测试结果矩阵(边界值、输入值、观察结果、备注)。
- 异常场景记录(如时间戳异常、系统时钟回拨、多线程竞态导致的误触发)。
3.7 异常处理
常见异常及处理方式:
- 触发过早/过晚:检查 SDK 中事件队列的定时器精度(setTimeout vs requestAnimationFrame),建议使用高精度时间戳(performance.now)替代 Date.now。
- 重复抑制失效:确认抑制逻辑是否在异步回调中丢失全局状态,推荐使用不可变幂等锁(如唯一事件 ID + 时间戳哈希去重)。
- 边界条件误判:浮点数比较时警惕精度问题(如 50.000001px 是否被当作 ≤50),建议使用整数化阈值或容忍误差(±1px)。
- 时间篡改或设备休眠:事件触发前应校验系统时间是否被用户手动修改,必要时采用服务器时间戳兜底。
3.8 验收标准
| 检查维度 | 验收标准 |
|---|---|
| 触发时机准确率 | 所有测试用例中 ≥99% 的事件在允许误差范围内触发;超出误差的用例需有明确根因分析。 |
| 重复抑制成功率 | 抑制策略覆盖的重复事件中,≥95% 被成功抑制(余下 5% 可接受为秒级内的极小时间误差产生)。 |
| 边界值覆盖率 | 每项数值型触发条件至少测试 边界值、边界值-1、边界值+1 三个点;低概率边界(如设备长时间休眠)需有专项测试记录。 |
| 文档一致性 | 测试报告中的实际触发行为与埋点方案描述一致,偏差项必须在报告内标注并通过评审。 |