前言:效率觉醒
作为拥有3年HarmonyOS开发经验的工程师,我经历过无数次深夜手动点击屏幕的崩溃时刻。直到DevEco Testing的出现——这款华为官方推出的鸿蒙专属自动化测试工具,彻底将我从重复劳动中解放。本文将以实战视角,带你快速掌握自动化测试核心能力,1小时内完成从环境搭建到首个自动化测试案例执行


一、环境准备:10分钟快速部署

1.1 基础依赖

  • DevEco Studio 3.1+(本文基于4.0版本)

  • HarmonyOS SDK API 9+

  • Java JDK 11

1.2 关键插件安装
在DevEco Studio中一键安装测试核心插件:

File > Settings > Plugins > Marketplace

搜索安装:

  • DevEco Testing

  • HUAWEI TestKit


二、工程配置:开启测试能力

2.1 创建测试模块
右键主工程目录:

New > Module > Testing > UI Test

自动生成 ohosTest 目录,结构如下:

ohosTest
├── src/test/TestRunner.ets   // 测试入口
├── src/main/resources        // 测试资源
└── build-profile.json5       // 测试模块配置

2.2 关键配置项
在 build-profile.json5 中启用测试框架:

{
  "buildMode": "debug",
  "testConfig": {
    "autoTestEnabled": true // 开启自动化测试标志
  }
}

三、录制第一个测试脚本:零编码实战

3.1 启动录制器

  1. 连接真机或启动模拟器

  2. 右键 TestRunner.ets > Run 'TestRunner'

  3. 点击控制台 Record 按钮

3.2 执行交互操作

  • 在设备界面进行操作(点击/滑动/输入)

  • DevEco Studio 自动生成脚本代码

import { Driver, ON, Component } from '@ohos.uitest'

describe('LoginTest', () => {
  it('login_success', async () => {
    const driver = await Driver.create()
    await driver.delayMs(1000)

    // 定位用户名输入框并输入
    const username = await ON.text('用户名').find()
    await username.inputText('admin')

    // 定位密码框并输入
    const password = await ON.type('input').attr('password', 'true').find()
    await password.inputText('123456')

    // 点击登录按钮
    const loginBtn = await ON.text('登录').find()
    await loginBtn.click()
  })
})

四、增强测试:关键断言技巧

4.1 添加结果验证
在登录操作后增加断言:

// 导入断言模块
import { expect } from '@ohos.uitest'

// 在click()后添加:
const welcomeText = await ON.textContains('欢迎回来').find()
expect(await welcomeText.isExist()).assertTrue() // 验证欢迎文本存在

4.2 常用断言方法

方法 说明 示例
assertTrue() 验证条件为真 expect(flag).assertTrue()
assertEqual() 验证值相等 expect(num).assertEqual(10)
assertNotNull() 验证非空 expect(element).assertNotNull()

五、分布式测试:鸿蒙特色能力

5.1 跨设备测试配置
在 TestRunner.ets 中声明分布式能力:

@DistributeTest({
  devices: ["PHONE", "TV"] // 指定测试设备类型
})

5.2 多设备同步操作

it('multi_device_control', async () => {
  const remoteTV = await DeviceManager.getDevice('TV_123')
  await remoteTV.executeShellCommand('input keyevent HOME')
  
  const localPhone = DeviceManager.getLocalDevice()
  await localPhone.executeShellCommand('am start com.example.app')
})

六、测试报告:深度结果分析

6.1 查看测试报告
执行完成后自动生成报告:

项目目录 > build > test > result > report.html

6.2 报告核心指

  • 用例通过率:直观显示成功率

  • 性能数据:FPS、CPU占用率、内存曲线

  • 操作时序图:可视化操作步骤

  • 失败截图:自动保存错误场景截图


七、持续集成:自动化流水线

7.1 命令行执行测试
脱离IDE执行测试(CI/CD关键):

hdc shell aa test -p com.example.app -m ohosTest

7.2 Jenkins集成配置


stage('HarmonyOS Test') {
  steps {
    script {
      sh 'hdc shell aa test -p ${appId} -m ohosTest'
      archiveArtifacts 'build/test/**/*.html' 
    }
  }
}

避坑指南:3年经验总结

  1. 控件定位失败

    • 使用 ON.debugShow() 实时查看控件树

    • 优先选择 id 或 text 定位

    // 最佳实践示例
    await ON.id('submit_btn').find()

  2. 跨版本兼容问题

    • 在 build-profile.json5 中指定API版本

    
    "targetApiVersion": 9 // 与测试设备API一致

  3. 性能测试波动

    • 多次采样取平均值

    • 关闭后台无关进程


结语:测试新范式

通过本文实战,我们完成了:
✅ 环境一键配置
✅ 可视化脚本录制
✅ 分布式设备测试
✅ CI/CD无缝集成

DevEco Testing的价值不仅在于效率提升——它重构了鸿蒙应用的质保体系。随着HarmonyOS NEXT的推进,自动化测试将成为开发者核心竞争力。建议下一步深入探索:

  1. 数据驱动测试(ParameterizedTest)

  2. 异常注入测试(Fault Injection)

  3. 无障碍测试能力

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐