Hypium框架使能ArkTS应用高效测试

时间:2021-07-22 00:45:33

HarmonyOS发布了声明式开发框架ArkUI,带来了极简高效的开发体验,备受广大开发者的青睐。那么,我们在开发过程中,如何确保ArkTS应用的功能和界面满足预期呢?ArkTS应用怎样高效进行专项测试?接下来,有请我们本期的主角——自动化测试框架Hypium闪亮登场。

Hypium 测试框架介绍

想必大家对自动化测试框架Hypium并不陌生,此前有关于Hypium的详细介绍 《HarmonyOS自动化测试框架—Hypium》 ,大家可自行查阅。下面,我们一起了解Hypium测试框架,主要涵盖三个维度:

1、测试执行调度层

xDevice支持手机、平板、PC、穿戴、智慧屏、音箱和车机等多设备,助力应用跨设备测试验证。

2、测试框架层

涵盖HTSUnit、HUITest、HCUnit与HCPPTest多层次测试框架,从应用的单元/接口层、到UI界面层、再到C/C++系统层,构建多维度测试服务保障。

3、测试能力库

包含系统测试组件、UITestKit组件、专项测试组件,以及分布式测试组件,实现丰富的场景模拟能力和跨设备分布式测试能力。

Hypium框架使能ArkTS应用高效测试

Hypium测试框架架构

Hypium测试框架以插件形式集成到DevEco Studio中,使用非常便捷。今天,我们重点分享Hypium新版本支持ArkUI引擎,同时新增了测试能力库,构建丰富的场景模拟能力和专项测试执行能力,全面使能ArkTS应用自动化测试。

丰富的场景模拟API,助力多层次测试

ArkTS应用采用了类似MVC经典结构1,包括View(视图)、Model(模型)、Server(服务)三个部分。View(视图)负责页面元素定义生成页面和一些基础的页面逻辑;Model(模型)是数据模型,负责存储应用的数据;Server(服务)负责处理复杂的业务逻辑,包括网络、设备硬件交互等。针对三个不同层次的测试场景,我们可以采用不同的测试方式,验证应用的正确性。

1、View层: UI界面层,建议使用系统集成测试,验证基础功能和界面。

2、Model层:数据逻辑层,可以使用应用接口测试,验证数据逻辑的正确性。

3、Server层:业务逻辑层,可以使用应用接口测试,验证业务逻辑的正确性。

Hypium框架使能ArkTS应用高效测试

ArkTS应用多层次测试

在测试过程中,为了验证应用的功能,我们需要构建不同的场景。例如,测试导航场景需要构建位置移动轨迹,测试重力感应游戏需要构建重力传感器数据,测试低电量场景需要等到设备电量低于5%等。但构建这些场景耗时费力,甚至部分无法实现自动化,只能依赖人工测试,基于这种情况,Hypium测试框架提供了通用的接口模拟能力,支持开发者模拟应用接口,快捷构建测试场景。

以下是单元测试模拟能力通用接口列表:

Hypium框架使能ArkTS应用高效测试

模拟能力通用接口

使用以上模拟接口,我们可以便捷地模拟任意接口的返回值,从而达到场景模拟效果,提升应用单元测试效率。但对于部分特殊场景,开发者模拟效率较低,通用模拟能力无法满足特定的测试需求。别担心,除了通用模拟能力,Hypium测试框架还提供了特殊场景模拟能力,包括设备交互模拟、设备环境模拟、云端交互模拟。

1、设备交互模拟:构建应用与设备之间数据交互模拟能力,主要模拟设备物理器件数据与应用的交互,包括不限于:物理位置模拟、重力传感器、加速度传感器等多种传感器数据模拟。基于设备交互模拟能力可以构建多种场景,例如:导航、重力感应、接近光等。

2、设备环境模拟:构建设备状态的模拟能力,包括不限于:系统电量、信号强度、媒体播放、资源占用等,基于设备环境模拟能力可以构造设备的不同状态,例如:低电量、弱信号、后台媒体播放等。

3、云端交互模拟:构建云端模拟能力,模拟云端服务器的返回值,将应用与云端服务解耦。

专项测试执行能力,使能多维度测试

ArkTS应用除了基础的测试场景外,还面临很多特殊的测试场景,例如:如何测试应用接口的性能?接口的参数类型比较多,如何实现全量覆盖?测试某项场景时,如何避免执行全部测试用例,只执行相应部分测试用例?

针对这些特殊场景,Hypium测试框架从测试执行粒度、执行方式、执行调度等多维度提供压力、数据驱动、筛选能力等场景的测试执行能力,进一步提升ArkTS应用测试执行效率。

1、压力测试

适用于接口压力测试场景,用户可以自定义测试用例的执行次数。执行测试aa test测试命令带上压力参数即可,例如:

aa test –p xxxx –n xxxxx –s stress 10

参数

取值

含义

-s stress

正整数

测试用例执行次数

2、数据驱动测试

适用于接口参数类型比较多,无法通过测试用例直接覆盖的场景。我们可以自定义配置参数快捷驱动测试用例的执行次数和每一次传入的参数,使用时依赖data.json配置文件,文件内容如下:

{
               "suites": [{
                               "describe": ["actsAbilityTest"],
                               "stress": 2,
                               "params": {
                                              "suiteParams1": "suiteParams001",
                                              "suiteParams2": "suiteParams002"
                               },
                               "items": [{
                                              "it": "testDataDriverAsync",
                                              "stress": 2,
                                              "params": [{
                                                             "name": "tom",
                                                             "value": 5
                                              }, {
                                                             "name": "jerry",
                                                             "value": 4
                                              }]
                               }, {
                                              "it": "testDataDriver",
                                              "stress": 3
                               }]
               }]
}

配置参数说明:

Hypium框架使能ArkTS应用高效测试

3、测试用例筛选

Hypium支持根据用例属性,筛选执行指定的测试用例,使用方式是先在测试用例上标记用例属性后,再在测试应用的启动shell命令后新增"-s ${Key} ${Value}"。

Hypium框架使能ArkTS应用高效测试

示例代码

import { describe, it, expect, TestType, Size, Level } from '@ohos/hypium';
export default function attributeTest() {
    describe('attributeTest', function () {
        it("testAttributeIt", TestType.FUNCTION | Size.SMALLTEST | Level.LEVEL0, function () {
            console.info('Hello Test');
        })
    })
}

示例命令

XX -s level 1 -s size small -s testType function

该命令的作用是:筛选测试应用中同时满足a)用例级别是1 b)用例粒度是small c)用例测试类型是function 三个条件的用例执行。

4、测试套筛选

测试套与用例名称使用“#”号连接,多个筛选规则使用“,”英文逗号分隔。

Key

含义说明

Value取值范围

class

指定要执行的测试套&用例

${describeName}#${itName},${describeName} , 例如:-s class attributeTest#testAttributeIt

notClass

指定不执行的测试套&用例

${describeName}#${itName},${describeName} , 例如:-s notClass attributeTest#testAttributeIt

示例命令

XX -s class attributeTest#testAttributeIt,abilityTest#testAbilityIt

本期分享的自动化测试框架Hypium,你学会了吗?快来上手试试吧!未来,我们还将继续打磨演进Hypium测试能力,助力大家开发更卓越的应用产品,广大开发者朋友敬请期待!

注:MVC结构即 Model 模型、View 视图、Controller 控制器。

Hypium框架使能ArkTS应用高效测试