鸿蒙Next Test Kit:一站式自动化测试框架详解
为鸿蒙应用质量保驾护航的利器
在鸿蒙生态蓬勃发展之际,确保应用质量成为开发者面临的重要挑战。鸿蒙Next Test Kit作为官方推出的一站式自动化测试解决方案,为开发者提供了从单元测试到UI自动化,再到性能与兼容性测试的完整工具链。
鸿蒙Test Kit概览
HarmonyOS自动化测试框架arkxtest,作为HarmonyOS工具集的重要组成部分,提供了HarmonyOS自动化脚本编写和运行的基础能力。该测试框架主要包含两大核心部分:单元测试框架(JsUnit) 和UI测试框架(UiTest),支持开发者针对应用接口进行单元测试,并且可基于UI操作进行UI自动化脚本的编写。
Test Kit的设计目标是提供一套完整、高效、易用的测试解决方案,覆盖鸿蒙应用测试的全生命周期,从开发阶段的功能验证到上架前的兼容性检查,都能找到相应的工具支持。
核心组件与功能特性
1. 单元测试框架(JsUnit)
单元测试框架是测试框架的基础底座,提供了最基本的用例识别、调度、执行及结果汇总的能力。其主要功能特性包括:
-
基本流程控制:支持编写及异步执行基础用例,提供describe定义测试套,it定义单条用例的能力
-
丰富的断言库:提供assertEqual、assertTrue、assertFalse等多种断言方法,判断用例实际期望值与预期值是否相符
-
Mock能力:支持函数级mock能力,对定义的函数进行mock后修改函数的行为,使其返回指定的值或者执行某种动作
-
数据驱动:提供数据驱动能力,支持复用同一个测试脚本,使用不同输入数据驱动执行
-
专项能力:支持测试套与用例筛选、随机执行、压力测试、超时设置、遇错即停模式等高级功能
单元测试框架通过beforeAll、beforeEach、afterEach和afterAll等钩子函数,提供了灵活的测试环境管理机制。
2. UI测试框架(UiTest)
UI测试框架主要对外提供了UiTest API供开发人员在对应测试场景调用,而其脚本的运行基础还是上面提到的单元测试框架。通过简洁易用的API提供查找和操作界面控件能力,支持用户开发基于界面操作的自动化测试脚本。
UiTest框架的核心能力包括:
-
控件查找与操作:提供多种控件定位策略和模拟用户操作的能力
-
异步交互处理:内置对应用异步加载的智能等待机制
-
跨应用交互:支持应用间的跳转与交互测试
3. TestRunner测试执行器
@ohos.application.testRunner模块提供了框架测试的能力,包括准备单元测试环境、运行测试用例。如果您想实现自己的单元测试框架,必须继承这个类并覆盖它的所有方法。
TestRunner提供了两个核心方法:
-
onPrepare():为运行测试用例准备单元测试环境
-
onRun():运行测试用例
环境搭建与使用流程
环境要求
自动化脚本的编写主要基于DevEco Studio,并建议使用3.1.0.400之后的版本进行脚本编写。脚本执行需要PC连接HarmonyOS设备,如JAD等。
创建测试脚本
在DevEco Studio中新建测试脚本非常简单:
-
在工程目录下打开待测试模块下的ets文件
-
将光标置于代码中任意位置,单击右键 > Show Context Actions > Create Ohos Test或快捷键Alt+enter > Create Ohos Test创建测试类
编写单元测试脚本
单元测试脚本需要包含三个基本元素:
-
依赖导包,以便使用依赖的测试接口
-
测试代码编写,主要编写测试代码的相关逻辑,如接口调用等
-
断言接口调用,设置测试代码中的检查点,如无检查点,则不可认为一个完整的测试脚本
示例代码结构:
typescript
import { describe, it, expect } from '@ohos/hypium';describe('MathTest', () => {it('should add two numbers correctly', 0, () => {const result = 1 + 2;expect(result).assertEqual(3);}); });
编写UI测试脚本
UI测试脚本是在单元测试框架的基础上编写,主要增加了UI测试框架提供的接口调用。以下是一个简单的UI测试示例:
typescript
import { Driver, ON, Component, MatchPattern } from '@ohos.UiTest'; import { describe, it, expect } from '@ohos/hypium';describe('UITest', () => {it('should click button successfully', async () => {const driver = await Driver.create();await driver.delayMs(1000);const button = await driver.findComponent(ON.text('确认'));await button.click();// 验证点击后的效果const text = await driver.findComponent(ON.text('操作成功'));expect(await text.isVisible()).assertTrue();}); });
执行测试与查看结果
执行测试脚本可以直接在DevEco Studio中通过点击按钮执行,当前支持以下执行方式:
-
测试包级别执行:执行测试包内的全部用例
-
测试套级别执行:执行describe方法中定义的全部测试用例
-
测试方法级别执行:执行指定it方法也就是单条测试用例
测试执行完毕后可直接在DevEco Studio中查看测试结果。
与其他测试工具集成
DevEco Testing专项测试
DevEco Testing是用于专项测试的工具,提供了UI Viewer(用于ArkUI控件树查看)、兼容性、稳定性、性能、功耗等测试能力,并提供了测试报告。例如,应用稳定性测试可以通过以下步骤进行:
-
选择应用稳定性测试/应用探索测试
-
选择连接的测试设备
-
选择被测应用(设备已安装或需要新安装的Hap包)
-
设置测试时长等参数
-
创建测试任务开始测试
-
测试完成后生成测试报告
兼容性测试服务
随着HarmonyOS NEXT的全面商用,操作系统的兼容性测试面临新的挑战与机遇。HarmonyOS支持多种设备间的无缝协同,这意味着开发者需要测试应用在不同设备上的表现,确保跨设备的兼容性和一致性。
云测试平台如优测云服务平台提供了HarmonyOS NEXT全系设备的远程测试能力,解决了开发者物理设备采购成本高的问题。这些平台通常提供AI辅助的自动化测试能力,能够将自然语言描述的问题自动转化为可执行的测试脚本。
常见问题与解决方案
单元测试常见问题
-
用例中增加的打印日志在用例结果之后才打印:当被调用的异步接口多于一个时,建议将接口调用封装成Promise方式调用
-
执行用例时报error:fail to start ability:检查测试包中是否包含TestRunner.abc文件,如没有则重新编译打包后再次执行测试
-
执行用例时报用例超时错误:检查用例代码逻辑,确保即使断言失败场景也能走到done函数;或在IDE中修改用例执行超时配置参数
UI测试常见问题
-
失败日志有"Get windows failed/GetRootByWindow failed"错误信息:系统ArkUI开关未开启,执行命令
hdc shell param set persist.ace.testmode.enabled 1
并重启设备 -
失败日志有"uitest-api dose not allow calling concurrently"错误信息:检查用例实现,异步接口增加await语法糖调用;避免多进程执行UI测试用例
-
失败日志有"dose not exist on current UI!"错误信息:在用例中代码查找到目标控件后,设备界面发生了变化,重新执行UI测试用例
测试最佳实践
1. 测试策略制定
在进行测试之前,开发者需要充分了解HarmonyOS NEXT的新特性和应用功能,明确测试需求和目标。根据测试需求制定详细的测试计划,包括测试范围、测试用例、测试环境等。
2. 分层测试实施
-
单元测试:针对核心业务逻辑和工具函数编写单元测试,保证代码基础质量
-
集成测试:验证模块间的接口调用和数据传递是否正确
-
UI测试:覆盖核心用户流程,确保关键路径畅通无阻
-
兼容性测试:针对不同鸿蒙设备类型和系统版本进行测试
3. 持续测试集成
将自动化测试集成到CI/CD流程中,每次代码变更都自动触发测试任务,及时发现问题并快速反馈给开发团队。
结语
鸿蒙Next Test Kit为开发者提供了一站式的自动化测试解决方案,从底层的单元测试到高层的UI自动化,覆盖了应用测试的各个层面。随着鸿蒙生态的不断发展,掌握Test Kit的使用将成为鸿蒙开发者的必备技能。
通过合理利用Test Kit提供的各种工具和能力,开发者可以显著提升应用质量,减少缺陷逃逸,为用户提供更加稳定、流畅的鸿蒙应用体验。在纯血鸿蒙时代,高质量的应用程序将是生态成功的关键因素之一,而Test Kit正是实现这一目标的重要保障。