概述
随着HarmonyOS生态的不断壮大,自动化测试成为了确保软件质量的关键环节。本文旨在详细介绍HarmonyOS提供的自动化测试框架——arkxtest,它支持JS/TS语言编写单元测试和UI自动化测试脚本,帮助开发者高效地进行应用接口的验证和用户界面的自动化测试。
主要功能
arkxtest框架由两部分组成:单元测试框架和UI测试框架。
- 单元测试框架:提供基本的测试用例识别、调度、执行及结果汇总功能。
- UI测试框架:构建于单元测试框架之上,提供一系列UI操作API,支持基于用户界面的自动化测试。
实现原理
单元测试框架
单元测试框架是测试架构的核心,它负责测试用例的执行流程管理。通过aa test
命令作为执行入口,可以调度并运行测试用例,收集并展示测试结果。
UI测试框架
UI测试框架扩展了单元测试框架的功能,提供了用于UI操作的API,如查找组件、点击事件等。这些操作基于单元测试框架的执行机制,实现了对应用界面的自动化测试。
环境准备
- DevEco Studio:推荐使用3.1.0.400或更高版本。
- HarmonyOS设备:确保PC能够连接HarmonyOS设备(如JAD系列)。
编写测试脚本
单元测试脚本
import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium';
import abilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry';
const delegator = abilityDelegatorRegistry.getAbilityDelegator();
export default function abilityTest() {
describe('ActsAbilityTest', function () {
it('testUiExample', 0, async function (done) {
console.info("uitest: TestUiExample begin");
await delegator.executeShellCommand('aa start -b com.ohos.uitest -a MainAbility')
.then(result => {
console.info('Uitest, start ability finished:' + result);
})
.catch(err => {
console.info('Uitest, start ability failed: ' + err);
});
await sleep(1000);
await delegator.getCurrentTopAbility().then((Ability) => {
console.info("get top ability");
expect(Ability.context.abilityInfo.name).assertEqual('MainAbility');
});
done();
});
function sleep(time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
});
}
UI测试脚本
import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium';
import abilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry';
import {Driver, ON, Component, MatchPattern} from '@ohos.UiTest';
const delegator = abilityDelegatorRegistry.getAbilityDelegator();
export default function abilityTest() {
describe('ActsAbilityTest', function () {
it('testUiExample', 0, async function (done) {
// ... [省略单元测试代码]
//ui test code
const driver = await Driver.create();
await driver.delayMs(1000);
const button = await driver.findComponent(ON.text('Next'));
await button.click();
await driver.delayMs(1000);
await driver.assertComponentExist(ON.text('after click'));
await driver.pressBack();
done();
});
function sleep(time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
});
}
执行测试脚本
在DevEco Studio中,你可以选择不同级别的测试执行方式,包括测试包级别、测试套级别或测试方法级别。
查看测试结果
测试完成后,DevEco Studio会显示测试结果,包括测试用例的状态、执行时间和任何异常信息。
常见问题
单元测试用例常见问题
- 日志延迟打印
- 启动能力失败
- 用例超时
UI测试用例常见问题
- 窗口信息获取失败
- 并发调用API
- 控件不存在
针对这些问题,文章中已提供了解决方案和建议。
通过以上指南,你应该能够熟练地使用HarmonyOS自动化测试框架进行应用的单元测试和UI自动化测试,从而提升开发效率和软件质量。