纯血鸿蒙系统 HarmonyOS NEXT自动化测试实践

1、测试框架选择

  • hdc:类似 android 系统的 adb 命令,提供设备信息查询,包管理,调试相关的命令
  • @ohos.UiTest:鸿蒙 sdk 的一部分,类似 android sdk 里的uiautomator,基于 Accessibility 服务,提供模拟 UI 操作的能力。但是需要用arkTS语言来写自动化 case,并且用例需要打包到被测 app 里面
  • hypium:鸿蒙官方的自动化框架,功能比较完善,可以基于 python 编写自动化 case
  • hmdriver2 一个鸿蒙自动化测试py库,安装方便,语法简洁

鸿蒙自动化测试的 文档中心

文档中心hmdriver2 文档:https://github.com/codematrixer/hmdriver2

查看了文档后,发现hypium是官方的自动化框架,但是安装环境比较复杂,并且他是一整套的测试框架,包括了用例套件的管理与执行等,算是比较重量级的。

hmdriver2是一个轻量级的库,流程等都不复杂,先体验一下这个

2、环境配置

  1. 配置鸿蒙HDC环境(等价于 android 端的 adb)

    1. 下载 Command Line Tools 并解压
    2. hdc文件在command-line-tools/sdk/HarmonyOS-NEXT-DB2/openharmony/toolchains目录下
    3. 配置环境变量,macOS 为例,在~/.bash_profile 或者 ~/.zshrc 文件中添加

    export HM_SDK_HOME="/Users/develop/command-line-tools/sdk/HarmonyOS-NEXT-DB2" //请以sdk实际安装目录为准
    export PATH=PATH:HM_SDK_HOME/hms/toolchains:$HM_SDK_HOME/openharmony/toolchains
    export HDC_SERVER_PORT=7035

电脑插上手机,开启 USB 调试,确保执行hdc list targets 可以看到设备序列号

hdc常用命令 文档中心

2、安装hmdirver2 基础库

复制代码
pip3 install -U hmdriver2

如果需要使用屏幕录屏 功能,则需要安装额外依赖opencv-python

复制代码
pip3 install -U "hmdriver2[opencv-python]"
// 由于`opencv-python`比较大,因此没有写入到主依赖中,按需安装

3、代码编写

导入包后就可以连接设备,启动app,当前以安居客发布为例

python 复制代码
from hmdriver2.driver import Driver

d = Driver("FMR0223C13000076")
d.start_app("com.anjuke.home", "EntryAbility")

然后就可以进行元素定位和操作

元素定位支持

  • 控件查找(联合查找,模糊查找,相对查找)
  • 控件信息获取
  • 控件点击,长按,拖拽,缩放
  • 文本输入,清除
  • 获取控件树

控件查找支持这些by属性

  • id
  • key
  • text
  • type
  • description
  • clickable
  • longClickable
  • scrollable
  • enabled
  • focused
  • selected
  • checked
  • checkable
  • isBefore
  • isAfter

定位方式包括普通定位,模糊定位,相当定位

复制代码
d(text="tab_recrod")

d(id="drag")

# 定位所有`type`为Button的元素,选中第0个
d(type="Button", index=0)

# 定位`type`为Button且`text`为tab_recrod的元素
d(type="Button", text="tab_recrod")

# 定位`text`为showToast的元素的前面一个元素
d(text="showToast", isAfter=True) 

# 定位`id`为drag的元素的后面一个元素
d(id="drag", isBefore=True)

元素操作与信息获取

复制代码
d(text="tab_recrod").info

# output:
{
    "id": "",
    "key": "",
    "type": "Button",
    "text": "tab_recrod",
    "description": "",
    "isSelected": False,
    "isChecked": False,
    "isEnabled": True,
    "isFocused": False,
    "isCheckable": False,
    "isClickable": True,
    "isLongClickable": False,
    "isScrollable": False,
    "bounds": {
        "left": 539,
        "top": 1282,
        "right": 832,
        "bottom": 1412
    },
    "boundsCenter": {
        "x": 685,
        "y": 1347
    }
}

d(text="tab_recrod").click()
d(type="Button", text="tab_recrod").click()

d(text="tab_recrod").click_if_exists()

d(text="tab_recrod").double_click()
d(text="tab_recrod").long_click()

# 控件拖拽
componentB: ComponentData = d(type="ListItem", index=1).find_component()
d(type="ListItem").drag_to(componentB)  # 将元素拖动到元素B上

# 控件缩放
d(text="tab_recrod").pinch_in(scale=0.5)
d(text="tab_recrod").pinch_out(scale=2)

更多操作请看详细文档https://github.com/codematrixer/hmdriver2hmdriver2 发布:开启鸿蒙 NEXT 自动化新时代 · 测试之家

另外元素查找可使用 uiviewer工具

安装 pip3 install -U uiviewer

启动 python3 -m uiviewer

打开页面,选择设备,点击connect,连接设备

可查看ui树,定位元素,复制xpath或者rect(元素在屏幕位置)

点击dump hierarchy刷新页面

小demo

python 复制代码
from hmdriver2.driver import Driver

d = Driver("FMR0223C13000076")
d.start_app("com.anjuke.home", "EntryAbility")
d(text="租房", index=0).click()
for i in range(5):
    d.swipe(0.5, 0.7, 0.5, 0.5, speed=2000)
d.go_home()

实际可以结合pytest等框架进行用例管理,报告输出等

鸿蒙自动化视频

相关推荐
遇到困难睡大觉哈哈5 小时前
HarmonyOS —— Remote Communication Kit 拦截器(Interceptor)高阶定制能力笔记
笔记·华为·harmonyos
遇到困难睡大觉哈哈6 小时前
HarmonyOS —— Remote Communication Kit 定制处理行为(ProcessingConfiguration)速记笔记
笔记·华为·harmonyos
氤氲息6 小时前
鸿蒙 ArkTs 的WebView如何与JS交互
javascript·交互·harmonyos
遇到困难睡大觉哈哈7 小时前
HarmonyOS支付接入证书准备与生成指南
华为·harmonyos
赵浩生7 小时前
鸿蒙技术干货10:鸿蒙图形渲染基础,Canvas绘图与自定义组件实战
harmonyos
赵浩生7 小时前
鸿蒙技术干货9:deviceInfo 设备信息获取与位置提醒 APP 整合
harmonyos
BlackWolfSky7 小时前
鸿蒙暂未归类知识记录
华为·harmonyos
L、2189 小时前
Flutter 与开源鸿蒙(OpenHarmony):跨平台开发的新未来
flutter·华为·开源·harmonyos
L、21810 小时前
Flutter 与 OpenHarmony 深度融合实践:打造跨生态高性能应用(进阶篇)
javascript·flutter·华为·智能手机·harmonyos