30 分钟成为 Contributor|共建测试子系统,赋能提升项目代码质量
如何优雅地参与开源贡献,向顶级开源项目提交 PR(Pull Request),跟着大咖 30 分钟成为 OpenAtom OpenHarmony(以下简称“OpenHarmony”) Contributor。战“码”先锋直播间第 6 期,邀请拥有 10 年终端产品软件和系统框架测试经验的华为 OpenHarmony 高级测试测试工程师 Andy 为大家分享《共建测试子系统 赋能开发者提高代码质量》。他在分享中介绍了:测试子系统、测试基础框架、稳定性测试工具设计、兼容性测试套示例和快速参与共建。
参与战“码”先锋,PR 征集令!你可以在 Gitee 的 OpenHarmony 代码仓提交 PR 参与活动,和全球开发者同台竞技,比拼技艺,为 OpenHarmony 贡献力量。
测试子系统简介
OpenHarmony 系统构建初期,各子系统提供系统的基础能力。要进行子系统完整看护,通过手工测试验证工作量巨大,基于此出现了自动化测试的诉求。测试子系统包含测试基础框架、OS 测试标准与工具、应用测试标准与工具和兼容性测试几个部分。OpenHarmony 测试工具集后续官方统一宣传名称为 OpenHarmony Arsenal(OHA)。
测试基础框架中,单元测试框架作为测试基础框架的基座,支撑自动化测试的运行;UI 测试框架基于单元测试框架构建了 UI 界面操作自动化测试的能力;分布式测试组件和专项测试组件作为扩展能力逐步进行演进;测试调度框架(xdevice)负责整个测试脚本的执行调度。
OS 测试标准与工具:主要进行系统的稳定性、性能、安全等 DFX 测试验证,发现系统的异常重启和帧率不达标等关键问题。应用测试标准与工具:提供给开发者测试工具进行应用的 DFX 测试验证。兼容性测试:提供兼容性测试套进行南北向的框架兼容性看护。
单元测试框架:
单元测试框架提供基础的测试脚本编写、管理、调度执行和报告生成能力。单元测试框架依赖 AbilityDelegator(测试框架入口)和 TestRunner(重写进行测试准备和执行操作)。
核心功能包括:
● 测试套 &测试用例管理:测试套包含测试用例,基于测试套编写实现测试用例
● 预置清理方法:每个测试用例之间可以通过预置和清理方法进行解耦
● 配置管理:用例级别和类型的配置管理,用于后续筛选测试执行用例
● 日志处理能力:用于测试用例执完毕的结果日志统计
● 基础断言能力:测试用例的预期结果和实际执行结果判断
扩展能力:
● 定义执行顺序:用于后续进行测试用例执行顺序的配置管理
● 自定义断言:基于基础断言的扩展比较能力
● 异步测试 &断言:测试脚本直接进行异步执行和断言,当前是通过同步等待方式执行
增强能力:
● 数据驱动:通过配置参数方式进行接口的压力测试
● Mock:模拟依赖外部接口的实现,返回预期内容
● Fake:直接返回依赖外部接口的期望返回值,接口正常执行
● SPY:接口探测能力,验证接口是否有被调用执行
大家可以参考具体的代码仓,了解单元测试框架的代码逻辑。
一个完整的测试套执行过程,通过 AA 命令行启动测试框架,AMS 框架拉起测试进程,启动 TestRunner 解析参数,接下来启动 TestAbility 加载和执行测试用例,测试用例执行完成后输出打印执行结果,并关闭测试进程和 AA 进程,测试套执行完成。
UI 测试框架:
UI 测试框架提供 UI 界面测试能力,包括 UI 操作、UI 控件检查等基础能力。UI 测试框架对外会提供 JS API 给开发者使用,UI Test 提供框架的基础能力,测试框架依赖无障碍服务获取界面的控件 dump 信息,多模输入服务提供控件操作的能力。UI Test JS API 包含
● 基础操作 API:点击、滑动等操作的基础能力
● 控件获取 API:查找控件等基础能力
● 增强操作 API:控件拖拽、滑动查找控件等能力
● 自定义属性 API:滑动速率和按键时长等参数配置能力
UI Test:UI Test 独立进程,提供测试进程和 UI Test 进程传递数据序列化能力,进程保活能力和事件注入能力。目前提供单窗口的 UI 自动化测试,后续提供多窗口的控件操作能力,主动识别 UI 界面变化和多指触控等复杂手势操作能力。
大家可以参考具体代码仓,了解 UI 测试框架的代码逻辑。
UI 测试框架核心流程:UI 测试用例执行,启动 UITest 进程,绑定无障碍服务和多模服务进行交互操作。开发者可以基于 UIDriver、BY、UIComponent 类配合进行 UI 测试脚本的编写。
大家可以参考具体代码仓,了解 UI 测试框架对外提供的接口能力
新建联系人 UI 测试脚本的代码示例:
1. 导入依赖的测试包
2. 启动被测试的界面
3. 初始化 UIDriver
4. 基于 UIDriver 的 findComponent 和 BY 能力配合查找联系人控件
5. 基于 UIComponent 的 click 能力点击联系人控件
6. 基于 UIDriver 的 assertComponentExist 能力验证存在没有联系人文本
稳定性测试工具设计:
稳定性测试工具提供异常捕获能力,帮助开发者快速识别系统异常问题,通过黑白名单指定是否测试对应名单内的应用。提供录制回放能力进行辅助回归测试验证,目前只有控件操作等事件注入能力,后续提供系统事件的注入能力。目前稳定性工具预置在版本中,后续提供可视化的设备端和 PC 端的测试工具,开发者可以更方便的进行稳定性测试。
大家可以参考具体代码仓,了解稳定性测试工具框架的代码逻辑。
稳定性工具执行示例:wukong exec –b ohos.xxxx -a 0.1 -t 0.5 -S 0.4 -s 5
具体工作流程:稳定性测试工具进行命令行参数解析,测试环境的初始化,启动异常监听。通过随机事件生成和事件注入及捕获异常的循环处理进行稳定性测试。最终生成日志记录用于查看异常场景。
关键命令:通过 seed 种子可以指定固定的操作序列,用于回归重现问题。不同的事件支持比例的设置。可以通过 time 和 count 字段进行稳定性测试时长的指定。
兼容性测试套:
通过兼容性测试套进行应用南北向和设备东西向的兼容性看护,分别通过 ACTS、DCTS、HATS 测试套进行兼容性验证。大家可以参考文末代码仓,了解兼容性测试套的测试用例实现。
测试用例关键语法的定义,通过 describe 定义测试套,一个测试用例必须需要有 3 个关键注解字段,tc.number:用例编号,tc.name:用例名称,tc.desc:用例描述,通过 it 进行测试用例定义。
快速参与共建:
最后,Andy 为开发者们介绍了快速参与共建的方式。大家可以基于开发过程中使用的 API,在兼容性测试代码仓搜索相应 API 的测试脚本,识别当前测试用例的完备性,进行测试脚本补充共建。如下提供了 promise 和 callback 异步接口的两个案例进行接口的正常和异常场景的测试脚本设计。
欢迎感兴趣的开发者朋友们一起共建测试子系统,成为 OpenHarmony Contributor。参与战“码”先锋,PR 征集令!在 Gitee 的 OpenHarmony 代码仓提交 PR 参与活动,和全球的开发者一起共建 OpenHarmony 的繁荣生态!
“现在就打开 gitee ,提你的第一个 PR,你的一小步,是 OpenHarmony 开源项目的一大步”
文章中涉及的链接汇总:
单元测试框架代码仓 jsunit 目录:
https://gitee.com/openharmony/arkXtest
UI 测试框架代码仓 uitest 目录
https://gitee.com/openharmony/arkXtest
UI 测试框架对外 JS API 接口代码仓
https://gitee.com/openharmony/interface_sdk-js/blob/master/api/@ohos.uitest.d.ts
稳定性测试工具代码仓
https://gitee.com/openharmony/wukong
兼容性测试套代码仓
ACTS:https://gitee.com/openharmony/xts_acts
DCTS: https://gitee.com/openharmony/xts_dcts
HATS: https://gitee.com/openharmony/xts_hats
评论