HamronyOS 自动化测试框架使用指南

鸿蒙OS开发实战:【自动化测试框架】使用指南 为支撑HarmonyOS操作系统的自动化测试活动开展,我们提供了支持JS/TS语言的单元及UI测试框架,支持开发者针对应用接口进行单元测试,并且可基于UI操作进行UI自动化脚本的编写。本指南重点介绍自动化测试框架的主要功能,同时介绍编写单元/UI自动化测试脚本的方法以及执行过程。 阅读详情

概述

为支撑 HarmonyOS 操作系统的自动化测试活动开展,我们提供了支持 JS/TS 语言的单元及 UI 测试框架,支持开发者针对应用接口进行单元测试,并且可基于 UI 操作进行 UI 自动化脚本的编写。

本指南重点介绍自动化测试框架的主要功能,同时介绍编写单元/UI 自动化测试脚本的方法以及执行过程。

简介

HarmonyOS 自动化测试框架 arkxtest,作为 HarmonyOS 工具集的重要组成部分,提供了 HarmonyOS 自动化脚本编写和运行的基础能力。编写方面提供了一系列支持测试脚本编写的 API,包括了基础流程 API、断言 API 以及 UI 操作相关的 API,运行方面提供了识别测试脚本、调度执行测试脚本以及汇总测试脚本执行结果的能力。

实现原理

框架重要分为两大部分:单元测试框架和 UI 测试框架。

● 单元测试框架

单元测试框架是测试框架的基础底座,提供了最基本的用例识别、调度、执行及结果汇总的能力。主要功能如下图所示:

单元测试脚本的基础运行流程如下图所示,依赖 aa test 命令作为执行入口,该命令可具体参考。

● UI 测试框架

UI 测试框架主要对外提供了UiTest API供开发人员在对应测试场景调用,而其脚本的运行基础还是上面提到的单元测试框架。

UI 测试框架的主要功能如下图所示:

约束与限制

● UI 测试框架的能力在 HarmonyOS 3.0 release 版本之后方可使用,历史版本不支持使用。

● 单元测试框架的部分能力与其版本有关,具体能力与版本匹配信息可见代码仓中的文档介绍。

环境准备

环境要求

自动化脚本的编写主要基于 DevEco Studio,并建议使用 3.1.0.400 之后的版本进行脚本编写。

脚本执行需要 PC 连接 HarmonyOS 设备,如 JAD 等。

搭建环境

DevEco Studio 可参考其官网介绍进行下载,并进行相关的配置动作。

新建测试脚本

1.  在 DevEco Studio 中新建应用开发工程,其中 ohos 目录即为测试脚本所在的目录。

2.  在工程目录下打开待测试模块下的 ets 文件,将光标置于代码中任意位置,单击右键 > Show Context Actions > Create Ohos Test 或快捷键 Alt+enter > Create Ohos Test 创建测试类,更多指导请参考 DevEco Studio 中指导。

编写单元测试脚本

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");
      //start tested ability
      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);
      //check top display ability
      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));
    }
  })
}

单元测试脚本需要包含如下基本元素:

1、依赖导包,以便使用依赖的测试接口。

2、测试代码编写,主要编写测试代码的相关逻辑,如接口调用等。

3、断言接口调用,设置测试代码中的检查点,如无检查点,则不可认为一个完整的测试脚本。

编写 UI 测试脚本

UI 测试脚本是在单元测试框架的基础上编写,主要就是增加了 UI 测试框架提供的接口调用,实现对应的测试逻辑。

下面的示例代码是在上面的测试脚本基础上增量编写,首先需要增加依赖导包,如下示例代码所示:

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

然后是具体测试代码编写,场景较为简单,就是在启动的应用页面上进行点击操作,然后增加检查点检查用例。

export default function abilityTest() {
  describe('ActsAbilityTest', function () {
    it('testUiExample',0, async function (done) {
      console.info("uitest: TestUiExample begin");
      //start tested ability
      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);
      //check top display ability
      await delegator.getCurrentTopAbility().then((Ability)=>{
        console.info("get top ability");
        expect(Ability.context.abilityInfo.name).assertEqual('MainAbility');
      })
      //ui test code
      //init driver
      var driver = await Driver.create();
      await driver.delayMs(1000);
      //find button by text 'Next'
      var button = await driver.findComponent(ON.text('Next'));
      //click button
      await button.click();
      await driver.delayMs(1000);
      //check text
      await driver.assertComponentExist(ON.text('after click'));
      await driver.pressBack();
      done();
    })

    function sleep(time) {
      return new Promise((resolve) => setTimeout(resolve, time));
    }
  })
}

说明

只支持应用内使用。暂不支持应用外的场景实现自动化,例如与权限弹窗和 SystemUi 上的控件进行交互。

执行测试脚本

执行测试脚本可以直接在 DevEco Studio 中通过点击按钮执行,当前支持以下执行方式:

1、测试包级别执行即执行测试包内的全部用例。

2、测试套级别执行即执行 describe 方法中定义的全部测试用例。

3、测试方法级别执行即执行指定 it 方法也就是单条测试用例。

查看测试结果

测试执行完毕后可直接在 DevEco Studio 中查看测试结果,如下图示例所示:

常见问题

单元测试用例常见问题

1、用例中增加的打印日志在用例结果之后才打印

问题描述

用例中增加的日志打印信息,没有在用例执行过程中出现,而是在用例执行结束之后才出现。

可能原因

此类情况只会存在于用例中有调用异步接口的情况,原则上用例中所有的日志信息均在用例执行结束之前打印。

解决方法

当被调用的异步接口多于一个时,建议将接口调用封装成 Promise 方式调用。

2、执行用例时报 error:fail to start ability

问题描述

执行测试用例时候,用例执行失败,控制台返回错误:fail to start ability。

可能原因

测试包打包过程中出现问题,未将测试框架依赖文件打包在测试包中。

解决方法

检查测试包中是否包含 TestRunner.abc 文件,如没有则重新编译打包后再次执行测试。

3、执行用例时报用例超时错误

问题描述

用例执行结束,控制台提示 execute time XXms 错误,即用例执行超时

可能原因

1.用例执行异步接口,但执行过程中没有执行到 done 函数,导致用例执行一直没有结束,直到超时结束。

2.用例调用函数耗时过长,超过用例执行设置的超时时间。

解决方法

1.检查用例代码逻辑,确保即使断言失败场景认可走到 done 函数,保证用例执行结束。

2.可在 IDE 中 Run/Debug Configurations 中修改用例执行超时配置参数,避免用例执行超时。

UI 测试用例常见问题

1、失败日志有“Get windows failed/GetRootByWindow failed”错误信息

问题描述

UI 测试用例执行失败,查看 hilog 日志发现日志中有“Get windows failed/GetRootByWindow failed”错误信息。

可能原因

系统 ArkUI 开关未开启,导致被测试界面控件树信息未生成。

解决方法

执行如下命令,并重启设备再次执行用例。

hdc shell param set persist.ace.testmode.enabled 1

2、失败日志有“uitest-api dose not allow calling concurrently”错误信息

问题描述

UI 测试用例执行失败,查看 hilog 日志发现日志中有“uitest-api dose not allow calling concurrently”错误信息。

可能原因

1.用例中 UI 测试框架提供异步接口没有增加 await 语法糖调用。

2.多进程执行 UI 测试用例,导致拉起多个 UITest 进程,框架不支持多进程调用。

解决方法

1.检查用例实现,异步接口增加 await 语法糖调用。

2.避免多进程执行 UI 测试用例。

3、失败日志有“dose not exist on current UI! Check if the UI has changed after you got the widget object”错误信息

问题描述

UI 测试用例执行失败,查看 hilog 日志发现日志中有“dose not exist on current UI! Check if the UI has changed after you got the widget object”错误信息。

可能原因

在用例中代码查找到目标控件后,设备界面发生了变化,导致查找到的控件丢失,无法进行下一步的模拟操作。

解决方法

重新执行 UI 测试用例。

鸿蒙开发之如何实现自动化测试用例 自动化测试框架arkxtest支持JS/TS语言的单元测试框架(JsUnit)及UI测试框架(UiTest)。JsUnit提供单元测试用例执行能力,UiTest提供查找和操作界面控件的能力。 阅读详情

相关推荐

鸿蒙5.0开发进阶:自定义性能脚本测试实现案例

DevEco Testing Hypium是HarmonyOS平台上的UI自动化测试框架......

HSMMQAQ的博客 1348

appium+华为鸿蒙手机自动化(环境配置)

appium 的环境搭建以及华为鸿蒙系统的参数设置(以启动csdn app为例)

walent_v的博客 1万+

HamronyOS开发5.0【埋点】总结

脚本埋点,需要首先要能正确的解析源文件结构

2401_82772199的博客 780

兼容Auto.js autojs pro9云控群控系统,支持脚本开发、脚本管理、设备管理、远程投屏

兼容auto.js autojs pro9的云控群控系统都有什么技术优势?能不能取代autojs?

qq_23857415的博客 4791

OpenHarmony实战开发-自动化测试框架使用指导

自动化测试框架arkxtest,作为工具集的重要组成部分,支持JS/TS语言的单元测试框架(JsUnit)及UI测试框架(UiTest)。 JsUnit提供单元测试用例执行能力,提供用例编写基础接口,生成对应报告,用于测试系统或应用接口。 UiTest通过简洁易用的API提供查找和操作界面控件能力,支持用户开发基于界面操作的自动化测试脚本。本指南介绍了测试框架的主要功能、实现原理、环境准备,以及测试脚本编写和执行等内容。

m0_70749039的博客 2459

自动化测试架构设计

 第1章 前言   目前市场上已经有了不少自动测试工具,不过满足自己需求的测试工具却很难找到或者是难以支付其昂贵的费用,对于在Linux/Unix后台运行的软件产品,自己开发一个自动测试工具,不但可以满足软件的测试需求,还可以节省一大笔费用。   这个自动测试系统架构的设计,是基于Linux/Unix后台运行的软件产品,架构的思想,源于主流测试工具与前辈的实践经验。   软件的自动测试

AnndyR的专栏 1000

OpenHarmony 4.0 Release发布,同步升级API 10

OpenHarmony 4.0版本如期而至,开发套件同步升级到API 10。相比3.2 Release版本,新增4000多个API,应用开发能力更加丰富;HDF新增200多个HDI接口,硬件适配更加便捷;我们持续优化图形框架和方舟编译器(ArkCompiler),用户交互体验得到进一步提升;ArkUI组件定制化能力和组件动效能力也得到进一步增强;分布式硬件支持的范围扩大到音频和输入领域;分布式数据为开发者数据分享带来了全新的统一数据管理框架。

xiangzhihong8的专栏 1621

鸿蒙HarmonyOS (开发进阶)自定义性能脚本测试

DevEco Testing Hypium是HarmonyOS平台上的UI自动化测试框架,允许开发者使用Python编写测试脚本,具备原生控件、图像及比例坐标定位功能,支持多窗口及触摸屏、鼠标、键盘的模拟输入,并能实现多设备并行测试。此外,它还配备了提升开发效率的辅助插件,如控件查看和投屏操作,并能自动生成详细的测试报告,包括设备日志和执行步骤的截图,为测试过程提供全面的支持与分析工具。

WEZC156465的博客 1553

如何在鸿蒙中实现应用的自动化测试与脚本编写?

随着应用程序功能的复杂化和开发周期的压缩,手动测试变得越来越难以满足高效、准确的需求。自动化测试是提高软件开发效率、确保软件质量的关键手段,尤其是在持续集成(CI)和持续交付(CD)的开发环境中,自动化测试更是必不可少。通过自动化测试,开发者能够快速验证应用功能、发现潜在问题,从而减少发布过程中的风险。在鸿蒙操作系统(HarmonyOS)中,自动化测试同样扮演着至关重要的角色。鸿蒙提供了灵活的测试框架和工具,使开发者能够高效地进行应用的自动化测试和脚本编写,确保应用质量和稳定性。

欢迎来到菜鸟不学编程的博客 1079

鸿蒙开发进阶(HarmonyOS)自动化测试框架使用指导

自动化测试框架arkxtest,作为工具集的重要组成部分,支持JS/TS语言的单元测试框架(JsUnit)及UI测试框架(UiTest)。

wea22984984的博客 2319

【鸿蒙UI自动化-Hypium】二、实战入门:编写你的第一个Python测试脚本

本文是鸿蒙UI自动化测试框架Hypium的实战入门指南,详细讲解如何在Windows环境下使用Python编写第一个测试脚本。文章通过拆解脚本结构,深入解析定位、操作、断言三大核心步骤,并以计算器应用为例,手把手演示从编写到运行的全过程,帮助读者快速掌握鸿蒙应用自动化测试的基础技能。

p1q2r的博客 823

【HarmonyOS 6.0】模拟点击检测:鸿蒙6.0全面狙击自动化作弊行为

摘要: 鸿蒙6.0的Device Security Kit新增模拟点击检测能力,可识别自动化脚本点击(Automated Clicking)和设备墙(Device Farm)作弊行为。该能力通过系统底层信号分析(如传感器状态、点击事件注入痕迹)判断操作真实性,返回fake(作弊)、likelyReal(真人操作)或unknown三种风险决策,并附带异常标签(如设备篡改、异常点击等)。开发者可在关键业务节点(如营销活动、交易验证)调用接口,结合结果采取拦截或二次验证措施。

枫叶丹4的博客 1648

鸿蒙OS常用的Shell命令:HarmonyOS

无论是浏览文件系统、创建新的目录还是操作文件,Shell命令都是非常有用的工具。在鸿蒙OS中,Shell命令是一种强大的工具,它使开发人员能够与操作系统进行交互并执行各种任务。本文将介绍一些常用的鸿蒙OS Shell命令,并提供相应的源代码示例。请注意,本文提供的示例代码仅用于演示目的,具体的命令和参数可能因鸿蒙OS的版本而有所不同。在实际使用中,请参考鸿蒙OS的官方文档和命令手册以获得准确的信息和语法。chmod命令用于更改文件或目录的权限。通过mkdir命令,开发人员可以在文件系统中创建新的目录。

JfdCoding的博客 2991

HarmonyOS 5.1.3 PC 端完整安装指导:含自动化部署脚本与故障排查代码

HarmonyOS 5.1.3 PC 端仅支持华为自研 Arm 架构的专属机型,可通过硬件校验脚本快速判断兼容性; 启动盘制作、系统安装可通过自动化脚本完成,提升部署效率,适合批量安装场景; 安装后可使用故障排查脚本自动检测并修复驱动、服务、账号激活等常见问题; 所有脚本需以管理员权限运行,且需替换镜像 MD5、华为账号等自定义参数,保证脚本有效性。

m0_59315734的博客 923

基于MobileNet⁃DOA的无人机射频信号识别方法

本文提出了一种基于MobileNet-DOA模型的无人机射频信号识别方法,用于解决低信噪比环境下无人机型号和飞行模式识别率低的问题。该方法首先采用变分模态分解(VMD)进行信号预处理以降低噪声干扰,然后通过短时傅里叶变换(STFT)将信号转换为时频图。在模型设计上,将DOConv卷积融入MobileNetv4模型以增强特征提取能力并提高运算速度,同时引入FA注意力机制提升低信噪比环境下的识别精度。实验结果表明,该方法在-15~15dB信噪比范围内的平均识别准确率达到94.83%,显著优于现有方法,特别在-1

qq_43416206的博客 1349

Polardb训练营-本地部署 PolarDB-X

PolarDB-X是阿里巴巴自主设计研发的高性能云原生分布式数据库产品,为用户提供高吞吐、大存储、低延时、易扩展和超高可用的云时代数据库服务。云原生+MySQL生态PolarDB-X已作为标准云产品在世界范围内的13个地区提供服务。依托云资源和容器化部署能力,PolarDB-X可以在数分钟内完成集群创建和变配,整个过程中用...

yangjunfeng0604的博客 2473

鸿蒙HDC隐藏功能挖掘:用自动化脚本提升开发效率的3种姿势

本文深入挖掘鸿蒙HDC的隐藏功能,通过自动化脚本提升开发效率的3种实用方法。包括多设备协同的批量操作引擎、部署调试全链路自动化以及高级端口转发矩阵,帮助开发者高效管理鸿蒙设备调试流程,大幅减少重复操作时间。

tensorflowjs6的博客 136

西门子1500T系列凸轮同步(CAMIN指令用法)

添加凸轮工艺对象(TO_CAM),也就是凸轮表。开始编程,先写2个轴的使能、回原点与主轴的定位。监控主轴与从轴的位置、速度关系是否满足实验要求。1.添加工艺对象(1个定位轴,1个同步轴)调用CAMIN指令 ,凸轮耦合。主轴为旋转轴且为模数轴。3.调用插补凸轮盘指令。4.仿真、监控、调试。

gyxgyx789的博客 1万+

HarmonyOS自动化测试框架—Hypium

为此,我们研发了一套新的自动化测试框架,它支持以插件形式集成到DevEco Studio中,让开发者在应用开发的过程中可以快速编写和执行测试用例,实现应用的高效验证。如果发生窗口拖拽等窗口移动的情况,开发者所见的界面会有比较大的变化,但是多窗口页面结构没有变化,这种情况下UI界面测试脚本的编写和稳定性都面临很大的挑战。有的开发者小伙伴之前可能使用过UI测试框架提供的Java接口,最近新增的JS/eTS接口定义和语法与Java接口是一致的,开发者们可以无缝切换到JS/eTS语言来使用。...

HarmonyOSDev的博客 5487

美团mtgsig 3.1.0算法还原:从加密入口到d1生成的完整链路拆解

本文详细拆解了美团mtgsig 3.1.0签名算法的完整逆向过程。通过定位加密入口函数eH,理清a6、a5、a8到d1的生成依赖链,并运用插桩技术,在JSVMP混淆环境下逐步还原了核心参数的生成逻辑,为逆向工程实践提供了清晰的纯算还原方法论。

oo7890的博客 777

网络层隧道技术之ICMP隧道(pingTunnel/IcmpTunnel)

目录 ICMP隧道 使用ICMP搭建隧道(PingTunnel) 使用ICMP搭建隧道(Icmptunnel) ICMP隧道 ICMP隧道简单实用,是一个比较特殊的协议。在一般的通信协议里,如果两台设备要进行通信,肯定需要开放端口,而在ICMP协议下就不需要。最常见的ping命令就是利用的ICMP协议,攻击者可以利用命令行得到比回复更多的ICMP请求。在通常情况下,每个ping命令都有相...

谢公子的博客 6696

华为鸿蒙系统app自动化测试环境搭建

DevEco Testing Hypium(以下简称Hypium)是HarmonyOS平台的UI自动化测试框架,支持开发者使用python语言为应用编写UI自动化测试脚本,主要包含以下特性: 1.Hypium提供了原生控件/图像/比例坐标等多种控件定位能力,支持多窗口操作以及触摸屏/鼠标/键盘等多种模拟输入功能,支持多设备并行操作,能够覆盖各类场景和多种形态设备上的自动化用例编写需求。

伤心的辣条 5627

nvidia系列教程-AGX-Orin系统刷机及备份

NVIDIA AGX Orin 是一款高性能的嵌入式计算平台,专为边缘计算和 AI 应用而设计。为了确保系统的稳定性和适应不同的应用场景,用户可能需要对 AGX Orin 进行系统刷机和备份操作。本文将详细介绍如何完成这些操作,帮助您更好地管理和维护 AGX Orin 设备。通过以上步骤,您可以成功地为 NVIDIA AGX Orin 刷写系统并创建备份。这些操作不仅能帮助您保持系统的更新和安全,还能在遇到问题时快速恢复系统。

flypig has a dream! 3328

Hypium纯血鸿蒙系统 HarmonyOS NEXT自动化测试框架

- type: 设备连接方式,usb-hdc表示使用hdc命令控制设备(默认) -->-- ip: 远端设备地址,ip和port为空时使用本地设备,非空时使用远端设备 -->-- port: 远端设备端口号 -->-- sn: 设备SN号列表,SN之间用分号";"分隔,sn字段为空时使用所有本地设备,非空时使用指定的sn设备 -->-- 指定测试用例目录,为空则默认设置为当前项目下的testcase文件夹 -->

铁马冰河入梦来 5865

计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题

计算机组成原理(第三版)唐朔飞-第十章控制单元的设计-课后习题

weixin_45735391的博客 3万+

SAP-ABAP:SAP HANA性能神器FDA:是极速查询的引擎,也是CPU过载的元凶

在SAP S/4HANA的世界里,有一个被ABAP开发者们既爱又怕的特性——Fast Data Access(FDA),它能将性能提升百倍,也能让CPU瞬间飙升。本文将带您全面解剖这一核心机制。

baidu_35680696的博客 849
上一篇: HarmonyOS:Neural Network Runtime 对接 AI 推理框架开发指导
下一篇: 手把手教你使用 ArkTS 中的 canvas 实现签名板功能
「已注销」
博客等级 码龄5年 1045粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值