OpenHarmony UiTest测试用例开发实践

系统 OpenHarmony
本文只是对UiTest接口做一个简单的实践,旨在让开发者了解UiTest测试用例的开发流程以及部分接口介绍。

想了解更多关于开源的内容,请访问:

51CTO 开源基础软件社区

https://ost.51cto.com

前言

这篇文章主要对UiTest测试用例的开发做一个简单的开发实践。

概述

UiTest提供模拟UI操作的能力,供开发者在测试场景使用,主要支持如点击、双击、长按、滑动等UI操作能力。

UiTest主要包含以下几个关键、常用的类:

  • On:提供控件特征描述能力,用于控件筛选匹配查找。
  • Component:代表UI界面上的指定控件,提供控件属性获取,控件点击,滑动查找,文本注入等能力。
  • Driver:入口类,提供控件匹配/查找,按键注入,坐标点击/滑动,截图等能力。
  • UiWindow:入口类,提供窗口属性获取,窗口拖动、调整窗口大小等能力。

开发步骤

打开应用

了解OpenHarmony应用工程结构的同学应该知道,每个模块最终都会编译成一个hap,例如我们最熟悉的entry模块,而ohosTest模块最终也会编译成一个hap,并安装在桌面上。

【小源笔记】第十期 | OpenHarmony UiTest测试用例开发实践-开源基础软件社区

读过上篇文章或者了解OpenHarmony应用开发的同学也知道,这个hap默认打开的是TestAbility中指定的页面,而开发者如果想测试的是其他hap(例如笔者这里测试的是entry模块编译的hap),首先需要使用startAbility的方式进行拉起。

it(BUNDLE + 'StartAbility_001', 0, async function (done) {
  console.info(TAG, BUNDLE + 'StartAbility_001 begin')
  try {
    await abilityDelegator.startAbility({
      bundleName: 'com.example.myapplication',
      abilityName: 'EntryAbility'
    })
    done()
  } catch (exception) {
    console.info(TAG, `StartAbility_001 exception = ${JSON.stringify(exception)}`)
    expect().assertFail()
  }
  console.info(TAG, BUNDLE + 'StartAbility_001 end')
})

创建Driver对象

Driver类作为UiTest测试框架的总入口,在使用控件匹配/查找,按键注入,坐标点击/滑动,截图等能力之前,需要使用Driver.create()方法创建一个Driver对象。

let driver = Driver.create()

控件匹配、操作

On类提供了丰富的控件特征描述,可以指定某个控件的id、类型、文本内容等条件进行匹配,例如笔者这里分别给TextInput和Button组件设置了id,然后就可以使用ON.id()进行条件匹配。

【小源笔记】第十期 | OpenHarmony UiTest测试用例开发实践-开源基础软件社区

也可以同时指定目标控制的id和type,例如:

ON.id('button').type('Button')

在查找目标控件之前,可以使用断言API断言当前界面是否存在满足给出的目标属性的控件,如不满足则会报错退出。

await driver.assertComponentExist(ON.id('textInput'))

在使用On类指定条件后,可以使用driver.findComponent()方法进行控件匹配,匹配成功后返回符合条件的Component对象,然后就可以使用Component类提供的方法进行点击、滑动、注入文本等操作。

let textInput = await driver.findComponent(ON.id('textInput'))
await textInput.inputText('OpenHarmony');

运行效果

【小源笔记】第十期 | OpenHarmony UiTest测试用例开发实践-开源基础软件社区

完整代码

import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'
import AbilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry'
import { Driver, ON } from '@ohos.UiTest'

const TAG = '[Sample_MyApplication]'
const BUNDLE = 'myApplication_'

const DELAY_TIME = 1000;

export default function abilityTest() {
  let driver = Driver.create()
  let abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator()
  describe('ActsAbilityTest', function () {
    /**
     * 打开应用
     */
    it(BUNDLE + 'StartAbility_001', 0, async function (done) {
      console.info(TAG, BUNDLE + 'StartAbility_001 begin')
      try {
        await abilityDelegator.startAbility({
          bundleName: 'com.example.myapplication',
          abilityName: 'EntryAbility'
        })
        done()
      } catch (exception) {
        console.info(TAG, `StartAbility_001 exception = ${JSON.stringify(exception)}`)
        expect().assertFail()
      }
      console.info(TAG, BUNDLE + 'StartAbility_001 end')
    })

    it(BUNDLE + 'function_001', 0, async function () {
      console.info(TAG, BUNDLE + 'function_001 begin')
      await driver.delayMs(DELAY_TIME)
      // 向文本框控件中输入文本
      await driver.assertComponentExist(ON.id('textInput'))
      let textInput = await driver.findComponent(ON.id('textInput'))
      await textInput.inputText('OpenHarmony');
      await driver.delayMs(DELAY_TIME)
      // 点击按钮
      await driver.assertComponentExist(ON.id('button'))
      let btn = await driver.findComponent(ON.id('button'))
      await btn.click();
      await driver.delayMs(DELAY_TIME)
      // 清空文本框控件的文本信息
      await textInput.clearText();
      console.info(TAG, BUNDLE + 'function_001 end')
    })
  })
}

常见问题

1、失败日志有“execute timeout 15000ms”错误信息

问题分析

默认测试执行时长为15000ms,当测试用例执行超时就会自动退出并报该错误。

解决方法

在如下位置修改执行超时时长。

【小源笔记】第十期 | OpenHarmony UiTest测试用例开发实践-开源基础软件社区

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

问题分析

可能为报错位置前面调用的异步接口没有使用await调用,或者并行执行多个测试用例,导致前面的API没有执行完,就调用了新的API。

解决方法

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

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

结语

本文只是对UiTest接口做一个简单的实践,旨在让开发者了解UiTest测试用例的开发流程以及部分接口介绍。UiTest除此之外还提供更加强大、更加复杂的能力,大家可以自行探索。

想了解更多关于开源的内容,请访问:

51CTO 开源基础软件社区

https://ost.51cto.com

责任编辑:jianghua 来源: 51CTO 开源基础软件社区
相关推荐

2021-12-22 10:19:47

鸿蒙HarmonyOS应用

2021-03-04 15:43:29

前端测试工具开发

2011-06-08 17:23:12

测试用例

2011-05-16 15:18:18

测试用例

2011-05-16 15:09:20

测试用例

2022-05-10 14:54:13

验收标准测试用例

2011-04-18 10:46:39

接口测试

2011-12-23 17:03:29

性能测试用例设计

2011-07-04 18:06:52

测试用例

2011-05-16 14:54:12

测试用例

2020-08-25 08:03:59

测试Sharness结构

2022-01-19 17:48:57

测试用例开发

2011-09-01 10:05:24

PhoneGap应用程序测试

2022-06-13 09:00:00

Selenium测试Web

2011-06-03 16:58:03

测试用例

2021-11-07 14:33:48

算法Pairwise功能

2011-11-02 09:54:37

测试

2024-09-29 15:26:53

MySQLPython

2023-09-04 17:48:06

2011-06-14 14:04:11

测试用例
点赞
收藏

51CTO技术栈公众号