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
30分钟成为Contributor|共建测试子系统,赋能提升项目代码质量的更多相关文章
- Linux ALSA音频库(二) 环境测试+音频合成+语音切换 项目代码分享
1. 环境测试 alsa_test.c #include <alsa/asoundlib.h> #include <stdio.h> // 官方测试代码, 运行后只要有一堆信息 ...
- JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)
前言:关于Vue框架,好几个月之前就听说过,了解一项新技术之后,总是处于观望状态,一直在犹豫要不要系统学习下.正好最近有点空,就去官网了解了下,看上去还不错的一个组件,就抽空研究了下.最近园子里vue ...
- 2016windows(10) wamp 最简单30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world
2016最简单windows(10) wamp 30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world thrift是什么 最简单解释 thrift是用来帮助各个编程语 ...
- 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...
- 30分钟?不需要,轻松读懂IL
先说说学IL有什么用,有人可能觉得这玩意平常写代码又用不上,学了有个卵用.到底有没有卵用呢,暂且也不说什么学了可以看看一些语法糖的实现,或对.net理解更深一点这些虚头巴脑的东西.最重要的理由就是一个 ...
- 【grunt第二弹】30分钟学会使用grunt打包前端代码(02)
前言 上一篇博客,我们简单的介绍了grunt的使用,一些基础点没能覆盖,我们今天有必要看看一些基础知识 [grunt第一弹]30分钟学会使用grunt打包前端代码 配置任务/grunt.initCon ...
- Objective-C 30分钟入门教程
Objective-C 30分钟入门教程 我第一次看OC觉得这个语言的语法有些怪异,为什么充满了@符号,[]符号,函数调用没有()这个,但是面向对象的高级语言也不外乎类,接口,多态,封装,继承等概念. ...
- 30分钟groovy快速入门并掌握(ubuntu 14.04+IntelliJ 13)
本文适合于不熟悉 Groovy,但想快速轻松地了解其基础知识的 Java开发人员.了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的核心功能,例如本地集合.内置正则表达式和闭包. ...
- 30分钟手把手教你学webpack实战
30分钟手把手教你学webpack实战 阅读目录 一:什么是webpack? 他有什么优点? 二:如何安装和配置 三:理解webpack加载器 四:理解less-loader加载器的使用 五:理解ba ...
- 30分钟入门Java8之默认方法和静态接口方法
30分钟入门Java8之默认方法和静态接口方法 前言 上一篇文章30分钟入门Java8之lambda表达式,我们学习了lambda表达式.现在继续Java8新语言特性的学习,今天,我们要学习的是默认方 ...
随机推荐
- django时区相关说明
# naive time 从字面意思上理解,这是个"幼稚的时间",所以可以理解为它是个本地时间,不带时区信息,不能直接用于存储,如下 import datetime datetim ...
- Kotlin 协程四 —— Flow 和 Channel 的应用
目录 一. Flow 与 Channel 的相互转换 1.1 Flow 转换为 Channel 1.1.1 ChannelFlow 1.1.2 produceIn -- 将 Flow 转换为单播式 C ...
- 【Azure 媒体服务】使用媒体服务 v3 对视频进行上载、编码和流式传输时遇见的AAD错误
问题描述 使用媒体服务 v3 对视频进行上载.编码和流式传输示例时,遇见了AAD错误. TIP: Make sure that you have filled out the appsettings. ...
- linux下查看文件时显示行号
1.用 vi 或 vim 打开文件后显示行号: 显示当前行号: :nu 显示所有行号: :set nu 2.设置服务器显示行号 2.1:编辑~/.vimrc文件,在该文件中加入 ...
- 第143篇:手写vue-router,实现router-view
好家伙, 今天来手写我们的老伙计vue-router, 1.替换router 新开一个项目,并使用我们手写的router 2.大致结构 let Vue; // 保存vue的构造函数 cla ...
- if (ctx.ifTo(ctx.property, next)) return
if (ctx.ifTo(ctx.property, next)) return if (ctx.ifGoto(ctx.property, 'functionName')) return 试试 a & ...
- debian卡顿,造成用户注销现象的原因以及解决方法
现象:当时电脑正在运行,宝塔面板安装初始化应用,一个浏览器,一个虚拟机 解决方法:目前还不清楚--是不是负载过大?好奇怪!
- 基于ads1299生物电信号采集研发总结之参考信号的接法
一 概念 ads1299的电极端有两种采集方式,单端和差分.两种的使用方式又有很大的区别,怎么高质量的采集信号,这个是一个比较难的问题. 二 解析 参考信号SRB1的接法,决定了采集到数据的精确度和信 ...
- ETL工具-KETTLE教程实例实战3----转换(输入、输出)
ETL工具-KETTLE教程实例实战3----转换(输入.输出) 欢迎关注笔者的公众号: java大师, 每日推送java.kettle运维等领域干货文章,关注即免费无套路附送 100G 海量学习.面 ...
- 27_H.264解码实战
目录 使用FFmpeg命令进行H.264解码 使用FFmpeg代码进行H.264解码 1.获取解码器 3.创建解析器上下文 4.创建AVPacket 5.创建AVFrame 6.打开解码器 7.打开文 ...