概述

随着HarmonyOS生态的不断壮大,自动化测试成为了确保软件质量的关键环节。本文旨在详细介绍HarmonyOS提供的自动化测试框架——arkxtest,它支持JS/TS语言编写单元测试和UI自动化测试脚本,帮助开发者高效地进行应用接口的验证和用户界面的自动化测试。

主要功能

arkxtest框架由两部分组成:单元测试框架和UI测试框架。

  • 单元测试框架:提供基本的测试用例识别、调度、执行及结果汇总功能。
  • UI测试框架:构建于单元测试框架之上,提供一系列UI操作API,支持基于用户界面的自动化测试。

实现原理

单元测试框架

HarmonyOS入门之自动化测试_自动化测试

单元测试框架是测试架构的核心,它负责测试用例的执行流程管理。通过aa test命令作为执行入口,可以调度并运行测试用例,收集并展示测试结果。

UI测试框架

HarmonyOS入门之自动化测试_单元测试_02

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自动化测试,从而提升开发效率和软件质量。