测试背景

SDK 具有上百个接口,测试场景、测试用例繁多,对于修改某个模块的代码或 SDK 上线前均需要投入大量资源(人力、时间)进行回归验证。目前 QA 资源有限,希望通过梳理 SDK 的功能,尝试使用自动化测试替代部分重复性的测试工作,提升测试效率。

SDK 整体架构

SDK 主要模块如下图所示:

SDK 数据流向如下图所示:

SDK 现有功能梳理

主要功能模块 信息描述 备注
基础数据采集 通过 track 接口采集事件数据,profile_x 接口采集用户属性数据,item_x 接口采集物品属性数据
事件属性 通过自定义属性、动态公共属性、静态共属性等方式,对部分事件或全体事件增加特定的属性
用户标识 通过 login、logout、identify、resetAnonymousId 等接口,调整、修改用户的标识信息
全埋点采集 通过在初始化中设置,采集 App 启动、页面浏览、元素点击、退出,Fragment 采集(初始化后设置)
H5 打通 原生 SDK 和 JS SDK 实现数据打通,JS SDK 的数据将发送到原生 SDK,由原生 SDK 统一上报
可视化全埋点 扫码连接到 SDG 前端页面,通过圈选 App 控件/页面创建可视化全埋点事件,通过对该事件的查询,可以统计到所有点击/浏览该事件的次数或用户数
App 点击分析 扫码连接到 SA 前端页面,展示 App 页面上原生的点击情况及热力图
数据加密 SDK 开启加密后,使用接收到后台下发的密钥对采集的数据进行加密
采集控制 SDK 请求到远程配置信息后,对部分数据的采集进行限制
渠道追踪 用户点击到第三方链接/页面后,进入到目标 App,通过调用 SDK 的激活事件,统计进入目标 App 的用户来源
数据存储与上报

设置采集的数据存储/上报的最大条数、时间间隔

计时器 统计某个事件的时长
推送点击采集 采集推送消息的点击事件
页面停留时长采集 采集当前停留在当前页面的时长

自动化框架设计原则

  • 代码规范
  • 模块清晰明确
  • 通用性强
  • 可拓展、可维护
  • 错误机制处理机制
  • 系统日志清晰,方便调试
  • 报告详尽

SDK 自动化测试框架

测试框架详细设计

初始化模块

  • App 集成神策 SDK,并正确完成初始化操作,其中注意开启后续自动化测试过程中所需的配置项,例如:数据加密、页面停留时长等
  • 调用 SDK 获取预置属性的接口,得到设备相关基础信息,并对该基础信息进行人工校准。该基础信息非常重要,是后续所有数据检验的预期值 *
  • 校准完毕后,人工启动自动化测试服务 

为什么要进行人工校准?

由于 SDK 对设备信息的获取,对于用户来说是一个黑盒操作,如果不进行数据人工数据校验,直接将该份数据作为预期值的话,就可能会出现数据校验通过,但真实情况下这个值是错误的情况。

例如:SDK 获取当前设备的操作系统是 Android,事件属性中的操作系统也是 Android,但 App 是运行在 Harmony 系统上。

测试用例模块

  • 将自然语言中的测试用例转换为可执行的测试代码
  • 测试用例抽象化,方便多个用例使用相同模版
  • 测试用例类包含的基础信息包括:测试执行前环境准备(beforeTest)、测试执行(Test)、测试完成后环境处理(afterTest)
  • 灵活强,不同测试用例均可执行
  • 耦合性低,调整测试用例时只需修改业务测试用例代码
  • 校验机制生效,可正常判断用例测试是否通过 *

如何进行校验 ?

神策 SDK 返回的数据,不仅包括接口的返回值,还包含无返回值的接口触发的数据。例如:getDistinctId 是有返回值的接口,需要将该返回值与预期值进行比较。

track 接口并没有返回值,但会触发事件数据,我们需要截获到触发的事件数据,与预期数据进行比较。

针对不同的测试点,我们需要在测试用例中分别进行测试代码设计,从而得到可以比较的预期值与实际值。

例如:当我们需要对计时器事件的时长需要测试,就需要手动对事件触发的起止时间进行打点,得到预期值,最后再进行预期值与实际值进行比较。

测试服务模块

  • 利用反射机制,获取全量用例
  • 用例增加、修改、删除后,均无需进行代码调整
  • 控制测试用例执行,为不同测试用例所需环境提供逻辑支持
  • 全量用例测试完成,输出测试结论

数据库模块

  • 每一条测试用例的执行都需要进行持久化记录,使用数据库记录上述信息是一个绝佳的选择
  • 使用 ORM (Object Relational Mapping,对象关系映射)设计的数据,可以很方便的与测试用例类对应,开发者只需像操作对象那样操作数据库,而无需编写繁琐易错的 SQL 语句
  • 数据库单条数据的结构在测试用例类的基础上增加额外的信息,需要包括:用例编号(数据 ID)、执行时间、优先级、用例名称、用例描述、预期结果、实际结果、是否通过、失败原因、备注等

测试报告模块

  • 自动化测试需要支持实时输出及结束后输出测试结果的功能
  • 实时输出测试结果,对应于 IDE 的运行日志,可动态的展示每一条测试用例的执行情况
  • 结束后输出测试结果,针对各端特性,可分别为 App 端输出整体结论(包括用例执行条数、通过率、测试结论等),更丰富的测试信息需要在网页端进行展示(读取数据库模块存储的数据)

最终效果

企微机器人推送测试报告信息:

测试报告详情:

测试代码相关信息

开源 SDK 地址:https://github.com/sensorsdata/sa-sdk-android 

自动化测试代码地址:https://github.com/liuweiqiang2016/SDKTest

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐