如何优雅地参与开源贡献,向顶级开源项目提交 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

30分钟成为Contributor|共建测试子系统,赋能提升项目代码质量的更多相关文章

  1. Linux ALSA音频库(二) 环境测试+音频合成+语音切换 项目代码分享

    1. 环境测试 alsa_test.c #include <alsa/asoundlib.h> #include <stdio.h> // 官方测试代码, 运行后只要有一堆信息 ...

  2. JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)

    前言:关于Vue框架,好几个月之前就听说过,了解一项新技术之后,总是处于观望状态,一直在犹豫要不要系统学习下.正好最近有点空,就去官网了解了下,看上去还不错的一个组件,就抽空研究了下.最近园子里vue ...

  3. 2016windows(10) wamp 最简单30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world

    2016最简单windows(10) wamp 30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world thrift是什么 最简单解释 thrift是用来帮助各个编程语 ...

  4. 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  5. 30分钟?不需要,轻松读懂IL

    先说说学IL有什么用,有人可能觉得这玩意平常写代码又用不上,学了有个卵用.到底有没有卵用呢,暂且也不说什么学了可以看看一些语法糖的实现,或对.net理解更深一点这些虚头巴脑的东西.最重要的理由就是一个 ...

  6. 【grunt第二弹】30分钟学会使用grunt打包前端代码(02)

    前言 上一篇博客,我们简单的介绍了grunt的使用,一些基础点没能覆盖,我们今天有必要看看一些基础知识 [grunt第一弹]30分钟学会使用grunt打包前端代码 配置任务/grunt.initCon ...

  7. Objective-C 30分钟入门教程

    Objective-C 30分钟入门教程 我第一次看OC觉得这个语言的语法有些怪异,为什么充满了@符号,[]符号,函数调用没有()这个,但是面向对象的高级语言也不外乎类,接口,多态,封装,继承等概念. ...

  8. 30分钟groovy快速入门并掌握(ubuntu 14.04+IntelliJ 13)

    本文适合于不熟悉 Groovy,但想快速轻松地了解其基础知识的 Java开发人员.了解 Groovy 对 Java 语法的简化变形,学习 Groovy 的核心功能,例如本地集合.内置正则表达式和闭包. ...

  9. 30分钟手把手教你学webpack实战

    30分钟手把手教你学webpack实战 阅读目录 一:什么是webpack? 他有什么优点? 二:如何安装和配置 三:理解webpack加载器 四:理解less-loader加载器的使用 五:理解ba ...

  10. 30分钟入门Java8之默认方法和静态接口方法

    30分钟入门Java8之默认方法和静态接口方法 前言 上一篇文章30分钟入门Java8之lambda表达式,我们学习了lambda表达式.现在继续Java8新语言特性的学习,今天,我们要学习的是默认方 ...

随机推荐

  1. django中的Case,When,then用法

    # 参考文档 https://docs.djangoproject.com/en/2.2/ref/models/conditional-expressions/ # Case()接受任意数量的When ...

  2. 【Azure 云服务】Azure Cloud Service如何来设置固定IP地址(ReservedIP)

    问题描述 在云中环境,部署的应用到云服务(Cloud Service)都是动态的IP地址,所以在添加DNS记录的时候,都是使用CNAME,但如果需要在DNS中添加A记录,则需要一个固定IP. 解决方案 ...

  3. 利用微软官方API实现Office文档的在线预览功能

    随着互联网时代的飞速发展,越来越多的工作开始依赖于云端服务,我们的办公方式也逐渐发生了翻天覆地的变化.在这种背景下,急需一种无需本地安装Office软件,就能快速查看和共享Word.PowerPoin ...

  4. C#与C互操作

    C#给C++传递char**(转载) extern "C" _declspec(dllexport)void GetResult(char* a,char** pBuf) { sp ...

  5. 4、 mysql的explain分析执行计划

    EXPLAIN或者 DESC命令获取 MySQL如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序. 查询SQL语句的执行计划 : explain sele ...

  6. 详解Python魔法函数,__init__,__str__,__del__

    1.简介 Python作为一门灵活而强大的编程语言,提供了许多特殊的方法,被称为魔法函数(Magic methods).这些魔法函数以双下划线开头和结尾,能够让我们自定义类的行为,使得Python更加 ...

  7. Harbor 2.1.2 安装部署

    环境 首先需要准备好 Docker + Docker-Compose 环境,Docker 在 CentOS 7.x 的安装教程请参考 这篇文章,后续文章假设你已经安装好了上述环境. 安装 标准安装 首 ...

  8. Nacos服务跨分组调用

    一. 问题背景 nacos有两种服务隔离的机制,一个是空间namespace,一般我们用namespace区分环境,另外一个是分组group,nacos的默认调用机制是同namespace下的同gro ...

  9. 探索Git内部原理

    Git是一个开源的分布式版本控制系统,是目前主流的版本控制系统,很多软件项目都会用它做源代码管理.Git的常用操作想必很多人都会,但是可能了解Git内部原理的人并不多.了解一些底层的东西,可以更好的帮 ...

  10. nginx部署SSL证书后,使用域名访问报错-net::ERR_SSL_PROTOCOL_ERROR

    一.问题由来 最近在做一个小程序的后台,自己去微信官网上查看了相关的规定,小程序正式发布时,要求比较严格,必须是使用https+域名访问,自己在 阿里云购买了一个域名,可是没有备案.SSL证书去阿里云 ...