利用开发过程中,要确保利用的性能和界面能满足预期,往往须要通过测试来验证。为此,咱们研发了一套新的自动化测试框架,它反对以插件模式集成到DevEco Studio中,让开发者在利用开发的过程中能够疾速编写和执行测试用例,实现利用的高效验证。本期,咱们就带大家理解这个自动化测试框架——Hypium。

一、Hypium简介

“Hypium”是“Hyper Automation + ium”的组合词,“Hyper Automation”示意超级自动化, “ium”意指稳固、牢靠的测试框架能力底座。从取名含意能够看出,咱们想要为开发者打造一个以超级自动化测试为现实指标、且稳固牢靠的测试框架。
自动化测试框架Hypium以插件模式集成到DevEco Studio中。开发者创立工程后,DevEco Studio会主动生成测试目录、测试类和测试用例模板等,如图1所示。开发者无需从零开始,让测试更加简略、高效。

                                  图1 Hypium

应用程序的自动化测试,从利用场景上次要分为两类:一类次要测试程序的外部性能逻辑,聚焦在测试程序内的函数接口,用于开发人员自测试应用;另一类次要是所见即所得的界面测试,操作页面并查看页面控件是否合乎预期的端到端的测试,用于测试人员笼罩全门路的验证测试。
针对上述两种利用场景,自动化测试框架Hypium推出了单元测试框架和UI测试框架两个子框架。
 单元测试框架(HJsUnit):提供单元测试用例编写的根底接口,以及用于测试零碎或利用的接口。反对开发者编写和执行单元测试用例,并且生成对应的测试报告。
● UI测试框架(HUiTest):通过简洁易用的API提供查找和操作界面控件的能力,反对开发基于界面操作的自动化测试脚本。
上面为大家一一介绍Hypium的单元测试框架和UI测试框架。

二、单元测试框架

HarmonyOS利用的多端部署、多语言开发等特点,使其在单元测试时面临很大的挑战,对单元测试框架也提出了高要求:

  1. HarmonyOS作为面向万物互联时代的分布式智能操作系统,反对在手机、平板、智能座舱、智慧屏、轻量级设施(如智能穿戴)等多种终端设备上应用。开发者在开发HarmonyOS利用时,也须要思考适配多种终端设备。这就要求测试框架可能针对不同设施反对定制相应的测试能力。
  2. HarmonyOS的开发框架反对开发者应用Java/JS/eTS等多种语言进行利用开发。这就要求测试框架在执行测试用例时须要思考多语言以及语法兼容等。
    为满足以上要求,咱们在设计阶段就思考到了单元测试框架须要具备多语言对立执行,语法兼容,空间占用最小化,性能可定制裁剪等能力。通过研发团队的不懈努力,最终实现了具备语法对立、执行对立、可裁剪、轻量化特点的单元测试框架。 
    ● 语法对立:ArkUI开发框架反对基于JS语言的类Web开发范式以及基于eTS语言的申明式开发范式。针对不同的语言和开发范式,单元测试框架提供一套对立的测试用例开发接口。开发者可基于对立的接口,来开发反对不同语言和开发范式的测试用例。
    ● 执行对立:单元测试框架反对Java与JS/eTS的测试用例在同一个测试hap中运行,后果对立展现。
    ● 可裁剪:单元测试框架采纳了规范的插件机制,除了外围的根底用例运行与根底接口局部,其余的扩大能力能够依据不同的需要而动静组合。开发者能够依据不同的设施能力和测试需要,动静地定制测试框架能力。
    ● 轻量化:单元测试框架内核局部的代码量很少,打包编译之后小于10KB,可用于开发在轻量化设施上执行的测试用例。
    通过下面的介绍,大家对Hypium的单元测试框架有了初步的意识。上面就为大家揭晓单元测试框架的具体架构。

                               图2 单元测试框架架构图

    如图2所示,单元测试框架由Core、EXT和SPE三个模块组成:
    ● Core(外围模块):蕴含测试用例执行须要的外围接口和逻辑,是运行测试用例所需的最小汇合。对于轻量化设施,单元测试框架能够只蕴含Core模块。
    EXT(扩大能力模块):在外围模块的根底上减少测试框架罕用的能力,反对自定义断言,用例异样超时管制等。
    SPE(专项测试能力模块):减少局部非凡测试能力,例如Mock模仿、数据驱动测试、压力测试等。

    三、UI测试框架

    UI测试框架次要提供UI界面测试的能力,次要面临以下两大挑战:
    1. UI界面操作繁琐,学习和应用老本高。
    UI界面测试在行业内已广泛应用,外围逻辑次要蕴含以下三个操作:
    ● 辨认界面构造,获取操作坐标 。
    ● 操作控件,注入UI操作事件,驱动事件响应。
    ● 查看页面响应,验证是否合乎操作逻辑 。
    此外,UI界面测试通常还须要很多其余辅助操作,例如:设施连贯(次要是连贯零碎的无障碍服务)、页面刷新期待、页面控件定位等。这些操作导致测试接口数量繁多、应用逻辑繁琐,使得UI界面测试的老本高,上手艰难。
    2. WebView混合开发、多窗口等个性,给UI界面测试带来很大难度。
    在UI界面测试中,WebView混合开发、多窗口等个性,始终是UI界面测试的难点。
    ● WebView混合开发没有应用零碎提供的开发框架,所以零碎的无障碍服务无奈获取WebView中的控件信息,从而也无奈进行UI界面测试。
    ● 多窗口是指窗口之间有层叠关系,无奈做到所见即所得,须要开发者动静地指定窗口来获取其在前台显示的页面构造。如果产生窗口拖拽等窗口挪动的状况,开发者所见的界面会有比拟大的变动,然而多窗口页面构造没有变动,这种状况下UI界面测试脚本的编写和稳定性都面临很大的挑战。
    针对以上挑战,Hypium的UI测试框架提供了相应的应答措施:
    1.  UI测试框架将所有操作封装到UiDriver、By和UiComponent三个外围类中,每个类各司其职,语法高深莫测,大大降低了学习应用老本。

                        图3 UI测试框架的三个外围类

    UiDriver:UI测试能力入口类,负责与设施(零碎的无障碍服务)交互,提供页面控件查找、查看存在性以及注入按键等能力。
    By:用于形容指标控件个性(文本、id、类型等)。UiDriver依据By形容的控件特色来查找控件。
    UiComponent:依据UiDriver查找返回的控件对象,记录控件相干属性,并提供控件相干UI操作,例如点击、滑动、双击等。
    2. 针对WebView混合开发、多窗口等测试难点,UI测试框架提供了高效的解决方案。 
    ● 针对WebView,UI测试框架引入了解析WebView页面构造的引擎,从而彻底解决WebView的页面构造显示问题。
    ● 针对多窗口,UI测试框架将多窗口信息扁平化,层叠的窗口最终只保留用户可见的局部,最终拼成一个残缺的页面返回给用户。用户不须要指定窗口,页面构造所见即所得,操作简化。
    此外,UI测试框架也思考了多语言和语法兼容,反对Java/JS/eTS三种语言。有的开发者小伙伴之前可能应用过UI测试框架提供的Java接口,最近新增的JS/eTS接口定义和语法与Java接口是统一的,开发者们能够无缝切换到JS/eTS语言来应用。
    接下来再带大家理解UI测试框架的具体架构。

                                 图4 UI测试框架架构图

    UI测试框架次要分为三个局部
    ● uitest-api:封装提供利用UI测试场景的测试API。
    test-agent:提供跨利用UI测试场景设施端辅助测试模块,通过uitest与系统核心库对接。
    uitest:UI测试外围模块,对接零碎服务,提供控件树获取、解析、查找、操作等能力。
    下面就是咱们本期要介绍的内容了。将来咱们还将持续欠缺自动化测试框架Hypium的能力,助力开发者开发更卓越的产品,大家敬请期待!