3. 事件触发条件测试

3.1 适用场景

事件触发条件测试适用于埋点系统中所有由用户行为、系统状态变更或定时器等条件驱动的事件上报。典型场景包括:

  • 用户交互事件:点击、滑动、输入、长按等操作对应的埋点触发。
  • 生命周期事件:页面进入/离开、应用前后台切换、组件挂载/卸载。
  • 业务规则事件:购物车满额弹窗、倒计时结束、条件达成后的自动化上报。
  • 异常事件:网络超时、API 失败、资源加载错误等被动触发。

3.2 前置条件

前置条件项 说明
埋点方案文档 明确每个事件的触发时机、触发频率、重复抑制规则及边界值定义。
测试环境就绪 埋点 SDK 集成完毕,服务端 mock 或真实日志接收端可用,事件校验工具(如 Charles、埋点抓包工具)已部署。
测试用例脚本 已编写按“触发时机/重复抑制/边界条件”分类的用例,并标注预期结果(事件触发 / 抑制 / 降频)。
时间基准对齐 测试设备时间、服务端时间与埋点时间戳统一校对,避免时间偏移导致误判。

3.3 操作步骤

本节按 触发时机验证 → 重复触发抑制 → 边界条件覆盖 三个子流程依次执行。

3.3.1 触发时机验证

  1. 根据埋点方案确认每个事件的触发条件(例如:页面进入时刻、点击松开时刻、连续滚动停止后 500ms)。
  2. 在测试环境中制造精准的时间点操作,记录事件上报日志中的时间戳。
  3. 对比真实触发时间与埋点方案中定义的时机阈值(允许误差 ±100ms,具体以方案要求为准)。
  4. 校验事件是否在预期时刻前后合理窗口内触发,且 不得提前或滞后 超过允许偏差。

3.3.2 重复触发抑制

  1. 确认埋点文档中是否定义了重复抑制规则(例如:同一次点击只触发一次、相同错误码连续上报间隔至少 30s、按钮防重复点击阈值为 1s)。
  2. 模拟高频重复操作:在抑制周期内连续触发同一事件(如快速连续点击、循环调用 API 导致错误事件)。
  3. 检查实际埋点日志:
    • 第一(或前 n)次是否正常触发。
    • 后续触发是否被抑制(日志中无重复事件)或降频(按间隔频率上报)。
    • 抑制期过后再次触发是否能恢复上报。
  4. 特别注意 退出抑制窗口的边界:刚好在抑制阈值交界处(如 30s 整、30s+1ms)的表现。

3.3.3 边界条件覆盖

  1. 从埋点方案中提取所有关于触发条件的数值边界(例如:滚动距离超过 50px 触发、输入字符数 ≥3 触发、倒计时剩余 0 秒触发)。
  2. 分别测试 边界值 和 边界值±1 的输入:
    • 滚动距离:49px(不触发)、50px(触发)、51px(触发)。
    • 输入字符数:2(不触发)、3(触发)、4(触发)。
    • 倒计时:1 秒(不触发)、0 秒(触发)、-1 秒(需确认是否触发或自动处理)。
  3. 针对定时器类事件,验证 极端边界:如定时器过早取消、系统时间调整、长时间休眠后恢复。
  4. 记录每个边界点的触发/抑制结果,与预期比对。

3.4 输入输出物

类型 输入物 输出物
文档 埋点方案(含触发条件定义表) 触发条件测试报告(含通过/失败断言)
测试数据 测试用例数据集(含边界值、重复次数、时间偏移) 埋点日志快照(标注事件时间戳、事件名称)
工具 Charles / Wireshark / gpm 日志抓取工具 抓包文件或 SDK 内部日志
脚本 自动化测试脚本(如 Puppeteer 模拟用户操作) 自动化执行结果 JSON

3.5 责任边界

  • 测试工程师:负责设计触发条件测试用例、执行测试、记录日志、比对结果;对边界值覆盖率负直接责任。
  • 开发工程师:提供埋点 SDK 的触发逻辑细节(抑制算法、时间窗口);修复测试发现的触发时序 bug。
  • 产品/数据产品经理:确认触发时机定义是否满足业务需求,审核边界条件下事件是否应该触发。
  • 数据质量负责人:审批测试报告,判断是否存在不可接受的重复或丢失事件。

3.6 记录材料

  1. 触发条件测试用例清单(编号、事件名称、触发条件、预期结果、实际结果、是否通过)。
  2. 重复抑制测试日志摘录(时间轴、事件名、抑制前最后一次上报时间、抑制间隔)。
  3. 边界值测试结果矩阵(边界值、输入值、观察结果、备注)。
  4. 异常场景记录(如时间戳异常、系统时钟回拨、多线程竞态导致的误触发)。

3.7 异常处理

常见异常及处理方式:

  • 触发过早/过晚:检查 SDK 中事件队列的定时器精度(setTimeout vs requestAnimationFrame),建议使用高精度时间戳(performance.now)替代 Date.now。
  • 重复抑制失效:确认抑制逻辑是否在异步回调中丢失全局状态,推荐使用不可变幂等锁(如唯一事件 ID + 时间戳哈希去重)。
  • 边界条件误判:浮点数比较时警惕精度问题(如 50.000001px 是否被当作 ≤50),建议使用整数化阈值或容忍误差(±1px)。
  • 时间篡改或设备休眠:事件触发前应校验系统时间是否被用户手动修改,必要时采用服务器时间戳兜底。

3.8 验收标准

检查维度 验收标准
触发时机准确率 所有测试用例中 ≥99% 的事件在允许误差范围内触发;超出误差的用例需有明确根因分析。
重复抑制成功率 抑制策略覆盖的重复事件中,≥95% 被成功抑制(余下 5% 可接受为秒级内的极小时间误差产生)。
边界值覆盖率 每项数值型触发条件至少测试 边界值、边界值-1、边界值+1 三个点;低概率边界(如设备长时间休眠)需有专项测试记录。
文档一致性 测试报告中的实际触发行为与埋点方案描述一致,偏差项必须在报告内标注并通过评审。
事件触发条件测试流程 事件触发条件测试核心流程 事件源(用户/系统/定时器) 触发时机验证 重复触发抑制 边界条件覆盖 事件时刻对齐 时间戳偏差校验 窗口内触发判定 高频重复模拟 抑制规则验证 恢复上报检测 边界值提取 边界±1测试 极端场景验证 输出:触发条件测试报告 说明:三个子流程可并行执行,测试报告需合并汇总;重复抑制与边界覆盖存在交叉(如抑制周期边界),建议统一在边界章节交叉检查。