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

打印 上一主题 下一主题

主题 880|帖子 880|积分 2640

 鸿蒙NEXT开发实战往期必看文章:
一分钟相识”纯血版!鸿蒙HarmonyOS Next应用开发!
“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零底子入门到精通)
HarmonyOS NEXT应用开发案例实践总结合(一连更新......)
HarmonyOS NEXT应用开发性能优化实践总结(一连更新......)

概述

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

测试框架分为单位测试框架和UI测试框架。
单位测试框架是测试框架的底子底座,提供了最根本的用例辨认、调理、执行及效果汇总的本领。
UI测试框架紧张对外提供了UiTest API供开发人员在对应测试场景调用,而其脚本的运行底子还是单位测试框架。
单位测试框架

图1.单位测试框架紧张功能

图2.脚本底子流程运行图

UI测试框架

图3.UI测试框架紧张功能

约束与限定



  • UI测试框架的本领在OpenHarmony 3.1 release版本之后方可使用,历史版本不支持使用。
环境准备

环境要求



  • 自动化脚本的编写紧张基于DevEco Studio,并发起使用3.0之后的版本举行脚本编写。
  • 脚本执行必要PC连接硬件装备,如开发板等。
搭建环境

DevEco Studio可参考其官网先容举行下载,并举行相关的设置动作。
新建和编写测试脚本

新建测试脚本


  • 在DevEco Studio中新建应用开发工程,其中ohos目录即为测试脚本地点的目录。
  • 在工程目录下打开待测试模块下的ets文件,将光标置于代码中恣意位置,单击右键 > Show Context Actions > Create Ohos Test或快捷键Alt+enter > Create Ohos Test创建测试类,更多指导请参考DevEco Studio中指导。
编写单位测试脚本

本章节紧张描述单位测试框架支持本领,以及本领的使用方法, 详细请参考单位测试框架功能特性。
在单位测试框架,测试脚本必要包含如下根本元素:
1、依赖导包,以便使用依赖的测试接口。
2、测试代码编写,紧张编写测试代码的相关逻辑,如接口调用等。
3、断言接口调用,设置测试代码中的检查点,如无检查点,则不可认为一个完整的测试脚本。
如下示例代码实现的场景是:启动测试页面,检查装备当前显示的页面是否为预期页面。
  1. import { describe, it, expect } from '@ohos/hypium';
  2. import { abilityDelegatorRegistry } from '@kit.TestKit';
  3. import { UIAbility, Want } from '@kit.AbilityKit';
  4. const delegator = abilityDelegatorRegistry.getAbilityDelegator()
  5. const bundleName = abilityDelegatorRegistry.getArguments().bundleName;
  6. function sleep(time: number) {
  7.   return new Promise<void>((resolve: Function) => setTimeout(resolve, time));
  8. }
  9. export default function abilityTest() {
  10.   describe('ActsAbilityTest', () =>{
  11.     it('testUiExample',0, async (done: Function) => {
  12.       console.info("uitest: TestUiExample begin");
  13.       //start tested ability
  14.       const want: Want = {
  15.         bundleName: bundleName,
  16.         abilityName: 'EntryAbility'
  17.       }
  18.       await delegator.startAbility(want);
  19.       await sleep(1000);
  20.       //check top display ability
  21.       await delegator.getCurrentTopAbility().then((Ability: UIAbility)=>{
  22.         console.info("get top ability");
  23.         expect(Ability.context.abilityInfo.name).assertEqual('EntryAbility');
  24.       })
  25.       done();
  26.     })
  27.   })
  28. }
  29. <strong>ts</strong>
复制代码
编写UI测试脚本

本章节紧张先容UI测试框架支持本领,以及对应本领API的使用方法。
UI测试基于单位测试,UI测试脚本在单位测试脚本上增加了对UiTest接口,详细请参考API文档。
如下的示例代码是在上面的单位测试脚本底子上增量编写,实现的是在启动的应用页面上举行点击操纵,然后检测当前页面变化是否为预期变化。
1.编写Index.ets页面代码, 作为被测示例demo。
  1. @Entry
  2. @Component
  3. struct Index {
  4.   @State message: string = 'Hello World'
  5.   build() {
  6.     Row() {
  7.       Column() {
  8.         Text(this.message)
  9.           .fontSize(50)
  10.           .fontWeight(FontWeight.Bold)
  11.         Text("Next")
  12.           .fontSize(50)
  13.           .margin({top:20})
  14.           .fontWeight(FontWeight.Bold)
  15.         Text("after click")
  16.           .fontSize(50)
  17.           .margin({top:20})
  18.           .fontWeight(FontWeight.Bold)
  19.       }
  20.       .width('100%')
  21.     }
  22.     .height('100%')
  23.   }
  24. }
  25. <strong>ts</strong>
复制代码
2.在ohosTest > ets > test文件夹下.test.ets文件中编写详细测试代码。
  1. import { describe, it, expect } from '@ohos/hypium';
  2. // 导入测试依赖kit
  3. import { abilityDelegatorRegistry, Driver, ON } from '@kit.TestKit';
  4. import { UIAbility, Want } from '@kit.AbilityKit';
  5. const delegator: abilityDelegatorRegistry.AbilityDelegator = abilityDelegatorRegistry.getAbilityDelegator()
  6. const bundleName = abilityDelegatorRegistry.getArguments().bundleName;
  7. function sleep(time: number) {
  8.   return new Promise<void>((resolve: Function) => setTimeout(resolve, time));
  9. }
  10. export default function abilityTest() {
  11.   describe('ActsAbilityTest', () => {
  12.     it('testUiExample',0, async (done: Function) => {
  13.       console.info("uitest: TestUiExample begin");
  14.       //start tested ability
  15.       const want: Want = {
  16.         bundleName: bundleName,
  17.         abilityName: 'EntryAbility'
  18.       }
  19.       await delegator.startAbility(want);
  20.       await sleep(1000);
  21.       //check top display ability
  22.       await delegator.getCurrentTopAbility().then((Ability: UIAbility)=>{
  23.         console.info("get top ability");
  24.         expect(Ability.context.abilityInfo.name).assertEqual('EntryAbility');
  25.       })
  26.       //ui test code
  27.       //init driver
  28.       let driver = Driver.create();
  29.       await driver.delayMs(1000);
  30.       //find button on text 'Next'
  31.       let button = await driver.findComponent(ON.text('Next'));
  32.       //click button
  33.       await button.click();
  34.       await driver.delayMs(1000);
  35.       //check text
  36.       await driver.assertComponentExist(ON.text('after click'));
  37.       await driver.pressBack();
  38.       done();
  39.     })
  40.   })
  41. }
  42. <strong>ts</strong>
复制代码
执行测试脚本

DevEco Studio执行

通过点击按钮执行,当前支持以下执行方式:
1、测试包级别执行,即执行测试包内的全部用例。
2、测试套级别执行,即执行describe方法中界说的全部测试用例。
3、测试方法级别执行,即执行指定it方法也就是单条测试用例。

检察测试效果
测试执行完毕后可直接在DevEco Studio中检察测试效果,如下图示例所示:

检察测试用例覆盖率
执行完测试用例后可以检察测试用例覆盖率,详细操纵请参考Test代码覆盖率统计
CMD执行

将应用测试包安装到测试装备上,在cmd窗口中执行aa下令,完成对用例测试。
   说明:
  使用cmd的方式,必要设置好hdc相关的环境变量。
  aa test下令执行设置参数
执行参数全写执行参数缩写执行参数含义执行参数示例–bundleName-b应用Bundle名称- b com.test.example–packageName-p应用模块名,适用于FA模子应用- p com.test.example.entry–moduleName-m应用模块名,适用于STAGE模子应用-m entryNA-s特定参数,以<key, value>键值对方式传入- s unittest /ets/testrunner/OpenHarmonyTestRunner 框架当前支持多种用例执行方式,通过上表中的-s参数后的设置键值对参数传入触发,如下表所示。
设置参数名设置参数含义设置参数取值设置参数示例unittest用例执行所使用OpenHarmonyTestRunner对象OpenHarmonyTestRunner或用户自界说runner名称- s unittest OpenHarmonyTestRunnerclass指定要执行的测试套或测试用例{describeName}#{itName},{describeName}-s class attributeTest#testAttributeItnotClass指定不必要执行的测试套或测试用例{describeName}#{itName},{describeName}-s notClass attributeTest#testAttributeItitName指定要执行的测试用例{itName}-s itName testAttributeIttimeout测试用例执行的超时时间正整数(单位ms),如不设置默认为 5000-s timeout 15000breakOnError遇错即停模式,当执行用例断言失败大概发生错误时,退出测试执行流程true/false(默认值)-s breakOnError truerandom测试用例随机次序执行true/false(默认值)-s random truetestType指定要执行用例的用例类型function,performance,power,reliability, security,global,compatibility,user,standard,safety,resilience’-s testType functionlevel指定要执行用例的用例级别0,1,2,3,4-s level 0size指定要执行用例的用例规模small,medium,large-s size smallstress指定要执行用例的执行次数正整数-s stress 1000 cmd窗口执行test下令


  • 参数设置和下令基于Stage模子
  • 打开cmd窗口
  • 执行 aa test 下令
示例代码1:执行所有测试用例。
  1. hdc shell aa test -b xxx -m xxx -s unittest OpenHarmonyTestRunner
  2. <strong>shell</strong>
复制代码
示例代码2:执行指定的describe测试套用例,指定多个需用逗号隔开。
  1.   hdc shell aa test -b xxx -m xxx -s unittest OpenHarmonyTestRunner -s class s1,s2
  2. <strong>shell</strong>
复制代码
示例代码3:执行指定测试套中指定的用例,指定多个需用逗号隔开。
  1.   hdc shell aa test -b xxx -m xxx -s unittest OpenHarmonyTestRunner -s class testStop#stop_1,testStop1#stop_0
  2. <strong>shell</strong>
复制代码
示例代码4:执行指定除设置以外的所有的用例,设置不执行多个测试套需用逗号隔开。
  1.   hdc shell aa test -b xxx -m xxx -s unittest OpenHarmonyTestRunner -s notClass testStop
  2. <strong>shell</strong>
复制代码
示例代码5:执行指定it名称的所有用例,指定多个需用逗号隔开。
  1.   hdc shell aa test -b xxx -m xxx -s unittest OpenHarmonyTestRunner -s itName stop_0
  2. <strong>shell</strong>
复制代码
示例代码6:用例执行超时时长设置。
  1.   hdc shell aa test -b xxx -m xxx -s unittest OpenHarmonyTestRunner -s timeout 15000
  2. <strong>shell</strong>
复制代码
示例代码7:用例以breakOnError模式执行用例。
  1.   hdc shell aa test -b xxx -m xxx -s unittest OpenHarmonyTestRunner -s breakOnError true
  2. <strong>shell</strong>
复制代码
示例代码8:执行测试类型匹配的测试用例。
  1.   hdc shell aa test -b xxx -m xxx -s unittest OpenHarmonyTestRunner -s testType function
  2. <strong>shell</strong>
复制代码
示例代码9:执行测试级别匹配的测试用例。
  1.   hdc shell aa test -b xxx -m xxx -s unittest OpenHarmonyTestRunner -s level 0
  2. <strong>shell</strong>
复制代码
示例代码10:执行测试规模匹配的测试用例。
  1.   hdc shell aa test -b xxx -m xxx -s unittest OpenHarmonyTestRunner -s size small
  2. <strong>shell</strong>
复制代码
示例代码11:执行测试用例指定次数。
  1.   hdc shell aa test -b xxx -m xxx -s unittest OpenHarmonyTestRunner -s stress 1000
  2. <strong>shell</strong>
复制代码
检察测试效果


  • cmd模式执行过程,会打印如下相关日志信息。
  1. OHOS_REPORT_STATUS: class=testStop
  2. OHOS_REPORT_STATUS: current=1
  3. OHOS_REPORT_STATUS: id=JS
  4. OHOS_REPORT_STATUS: numtests=447
  5. OHOS_REPORT_STATUS: stream=
  6. OHOS_REPORT_STATUS: test=stop_0
  7. OHOS_REPORT_STATUS_CODE: 1
  8. OHOS_REPORT_STATUS: class=testStop
  9. OHOS_REPORT_STATUS: current=1
  10. OHOS_REPORT_STATUS: id=JS
  11. OHOS_REPORT_STATUS: numtests=447
  12. OHOS_REPORT_STATUS: stream=
  13. OHOS_REPORT_STATUS: test=stop_0
  14. OHOS_REPORT_STATUS_CODE: 0
  15. OHOS_REPORT_STATUS: consuming=4
复制代码
日志输出字段日志输出字段含义OHOS_REPORT_SUM当前测试套用例总数。OHOS_REPORT_STATUS: class当前执行用例测试套名称。OHOS_REPORT_STATUS: id用例执行语言,默认JS。OHOS_REPORT_STATUS: numtests测试包中测试用例总数 。OHOS_REPORT_STATUS: stream当前用例发生错误时,记录错误信息。OHOS_REPORT_STATUS: test当前用例执行的it name。OHOS_REPORT_STATUS_CODE当前用例执行效果状态。0表示通过,1表示错误,2表示失败。OHOS_REPORT_STATUS: consuming当前用例执行消耗的时长(ms)。

  • cmd执行完成后,会打印如下相关日志信息。
  1. OHOS_REPORT_RESULT: stream=Tests run: 447, Failure: 0, Error: 1, Pass: 201, Ignore: 245
  2. OHOS_REPORT_CODE: 0
  3. OHOS_REPORT_RESULT: breakOnError model, Stopping whole test suite if one specific test case failed or error
  4. OHOS_REPORT_STATUS: taskconsuming=16029
复制代码
日志输出字段日志输出字段含义run当前测试包用例总数。Failure当前测试失败用例个数。Error当前执行用例发生错误用例个数。Pass当前执行用例通过用例个数 。Ignore当前未执行用例个数。taskconsuming执行当前测试用例总耗时(ms)。   当处于breakOnError模式,用例发生错误时,注意检察Ignore以及中断说明。
  录制用户操纵

使用录制功能

   将当前界面操纵记录到/data/local/tmp/layout/record.csv,结束录制操纵使用Ctrl+C结束录制
  1. hdc shell uitest uiRecord record
  2. <strong>shell</strong>
复制代码
检察录制数据

支持两种方式检察数据。
下令读取并打印录制数据

  1. hdc shell uitest uiRecord read
  2. <strong>shell</strong>
复制代码
下令导出 record.csv文件检察录制数据

  1. hdc file recv /data/local/tmp/layout/record.csv D:\tool  # D:\tool 为本地存储路径,用户可自定义
  2. <strong>shell</strong>
复制代码


  • record 数据字段含义请参考如下示例数据。
  1. {
  2.         "ABILITY": "com.ohos.launcher.MainAbility", // 前台应用界面
  3.         "BUNDLE": "com.ohos.launcher", // 操作应用
  4.         "CENTER_X": "", // 预留字段,暂未使用
  5.         "CENTER_Y": "", // 预留字段,暂未使用
  6.         "EVENT_TYPE": "pointer", //  
  7.         "LENGTH": "0", // 总体步长
  8.         "OP_TYPE": "click", //事件类型,当前支持点击、双击、长按、拖拽、滑动、抛滑动作录制
  9.         "VELO": "0.000000", // 离手速度
  10.         "direction.X": "0.000000",// 总体移动X方向
  11.         "direction.Y": "0.000000", // 总体移动Y方向
  12.         "duration": 33885000.0, // 手势操作持续时间
  13.         "fingerList": [{
  14.                 "LENGTH": "0", // 总体步长
  15.                 "MAX_VEL": "40000", // 最大速度
  16.                 "VELO": "0.000000", // 离手速度
  17.                 "W1_BOUNDS": "{"bottom":361,"left":37,"right":118,"top":280}", // 起点控件bounds
  18.                 "W1_HIER": "ROOT,3,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0", // 起点控件hierarchy
  19.                 "W1_ID": "", // 起点控件id
  20.                 "W1_Text": "", // 起点控件text
  21.                 "W1_Type": "Image", // 起点控件类型
  22.                 "W2_BOUNDS": "{"bottom":361,"left":37,"right":118,"top":280}", // 终点控件bounds
  23.                 "W2_HIER": "ROOT,3,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0", // 终点控件hierarchy
  24.                 "W2_ID": "", // 终点控件id
  25.                 "W2_Text": "", // 终点控件text
  26.                 "W2_Type": "Image", // 终点控件类型
  27.                 "X2_POSI": "47", // 终点X
  28.                 "X_POSI": "47", // 起点X
  29.                 "Y2_POSI": "301", // 终点Y
  30.                 "Y_POSI": "301", // 起点Y
  31.                 "direction.X": "0.000000", // x方向移动量
  32.                 "direction.Y": "0.000000" // Y方向移动量
  33.         }],
  34.         "fingerNumber": "1" //手指数量
  35. }
复制代码
shell下令方式注入UI模拟操纵

   支持操纵类型:点击 双击 长按 慢滑 快滑 拖拽 输入文字 KeyEvent。
  设置参数名设置参数含义设置参数取值示例click模拟单击操纵point_x (必选参数,点击x坐标点)
point_y (必选参数,点击y坐标点)hdc shell uitest uiInput click point_x point_ydoubleClick模拟双击操纵point_x (必选参数,双击x坐标点)
point_y (必选参数,双击y坐标点)hdc shell uitest uiInput doubleClick point_x point_ylongClick模拟长按操纵point_x (必选参数,长按x坐标点)
point_y (必选参数,长按y坐标点)hdc shell uitest uiInput longClick point_x point_yfling模拟快滑操纵from_x (必选参数,滑动起点x坐标)
from_y(必选参数,滑动起点y坐标)
to_x(必选参数,滑动尽头x坐标)
to_y(必选参数,滑动尽头y坐标)
swipeVelocityPps_ (可选参数,滑动速率,取值范围: 200-40000, 默认值: 600, 单位: px/s)
stepLength(可选参数,滑动步长,默认值:滑动间隔/50, 单位: px)hdc shell uitest uiInput fling from_x from_y to_x to_y swipeVelocityPps_ stepLengthswipe模拟慢滑操纵from_x (必选参数,滑动起点x坐标)
from_y(必选参数,滑动起点y坐标)
to_x(必选参数,滑动尽头x坐标)
to_y(必选参数,滑动尽头y坐标)
swipeVelocityPps_ (可选参数,滑动速率,取值范围: 200-40000, 默认值: 600, 单位: px/s))hdc shell uitest uiInput swipe from_x from_y to_x to_y swipeVelocityPps_drag模拟拖拽操纵from_x (必选参数,拖拽起点x坐标)
from_y(必选参数,拖拽起点y坐标)
to_x(必选参数,拖拽尽头x坐标)
to_y(必选参数,拖拽尽头y坐标)
swipeVelocityPps_ (可选参数,滑动速率,取值范围: 200-40000, 默认值: 600, 单位: px/s))hdc shell uitest uiInput drag from_x from_y to_x to_y swipeVelocityPps_dircFling模拟指定方向滑动操纵direction (可选参数,滑动方向,可选值: [0,1,2,3], 滑动方向: [左,右,上,下],默认值: 0)
swipeVelocityPps_ (可选参数,滑动速率,取值范围: 200-40000, 默认值: 600, 单位: px/s)
stepLength(可选参数,滑动步长,默认值:滑动间隔/50, 单位: px)hdc shell uitest uiInput dircFling direction swipeVelocityPps_ stepLengthinputText模拟输入框输入文本操纵point_x (必选参数,输入框x坐标点)
point_y (必选参数,输入框y坐标点)
input(输入文本)hdc shell uitest uiInput inputText point_x point_y textkeyEvent模拟实体按键变乱(如:键盘,电源键,返回上一级,返回桌面等),以及组合按键操纵keyID (必选参数,实体按键对应ID)
keyID2 (可选参数,实体按键对应ID)hdc shell uitest uiInput keyEvent keyID 示例代码1:执行点击变乱。
  1. hdc shell uitest uiInput click 100 100
  2. <strong>shell</strong>
复制代码
示例代码2:执行双击变乱。
  1. hdc shell uitest uiInput doubleClick 100 100
  2. <strong>shell</strong>
复制代码
示例代码3:执行长按变乱。
  1. hdc shell uitest uiInput longClick 100 100
  2. <strong>shell</strong>
复制代码
示例代码4:执行快滑操纵。
  1. hdc shell uitest uiInput fling 10 10 200 200 500
  2. <strong>shell</strong>
复制代码
示例代码5:执行慢滑操纵。
  1. hdc shell uitest uiInput swipe 10 10 200 200 500
  2. <strong>shell</strong>
复制代码
示例代码6:执行拖拽操纵。
  1. hdc shell uitest uiInput drag 10 10 100 100 500
  2. <strong>shell</strong>
复制代码
示例代码7:执行向左滑动操纵。
  1. hdc shell uitest uiInput dircFling 0 500
  2. <strong>shell</strong>
复制代码
示例代码8:执行向右滑动操纵。
  1. hdc shell uitest uiInput dircFling 1 600
  2. <strong>shell</strong>
复制代码
示例代码9:执行向上滑动操纵。
  1. hdc shell uitest uiInput dircFling 2
  2. <strong>shell</strong>
复制代码
示例代码10:执行向下滑动操纵。
  1. hdc shell uitest uiInput dircFling 3
  2. <strong>shell</strong>
复制代码
示例代码11:执行输入框输入操纵。
  1. hdc shell uitest uiInput inputText 100 100 hello
  2. <strong>shell</strong>
复制代码
示例代码12:执行返回主页操纵。
  1. hdc shell uitest uiInput keyEvent Home
  2. <strong>shell</strong>
复制代码
示例代码13:执行返回上一步操纵。
  1. hdc shell uitest uiInput keyEvent Back
  2. <strong>shell</strong>
复制代码
示例代码14:执行组合键粘贴操纵。
  1. hdc shell uitest uiInput keyEvent 2072 2038
  2. <strong>shell</strong>
复制代码
相关实例

单位测试脚本实例

单位测试断言功能使用实例

先容单位测试框架中支持的断言本领如何使用,详细代码请检察断言本领示例
单位测试测试套界说使用实例

先容单位测试框架测试套嵌如何界说,包括嵌套界说本领,详细代码请参考测试套嵌套示例
单位测试测试应用自界说函数使用实例

先容针对应用内自界说函数如何使用框架本领举行测试,详细代码请参考应用自界说函数测试示例
单位测试数据驱动本领使用实例

先容测试框架数据驱动本领、脚本重复执行设置功能,详细代码请参考数据驱动本领示例
UI测试脚本实例(控件类)

查找指定控件本领实例

先容通过设置控件属性作为查找条件,在应用界面上查找组件对象,详细代码请参考控件查找示例
模拟点击操纵变乱本领实例

先容模拟用户在应用界面上举行点击,长按,双击等变乱,详细代码请参考点击变乱示例
模拟鼠标操纵本领实例

先容模拟鼠标左击、右击、滑轮变乱,详细代码请参考鼠标操纵变乱示例
模拟文本输入本领实例

先容模拟输入中文、英文文本内容,使用条件是针对可以输入文本的组件类似文本框等组件举行操纵,详细代码请参考文本输入本领示例
截图本领实例

先容屏幕截图功能,包括指定地区截图本领,详细代码请参考截图本领示例
模拟快滑操纵本领实例

先容模拟快滑操纵本领,即在可滑动页面上举行滑动,滑动后手指离开屏幕,详细代码请参考模拟快滑操纵本领示例
模拟慢滑操纵本领实例

先容模拟慢滑操纵本领,即在可滑动页面上举行滑动,滑动后手指仍停留在屏幕,详细代码请参考模拟慢滑操纵本领示例
模拟缩放操纵本领实例

先容模拟缩放本领,即在支持放大缩小的图片上,模拟双指缩放操纵的本领,详细代码请参考模拟缩放操纵本领示例
模拟滚动到组件顶端或底端本领实例

先容模拟针对滑动类组件,可以模拟操纵直接滚动到组件顶端或底端,详细代码请参考模拟滚动到组件顶端或底端示例
UI测试脚本实例(窗口类)

查找指定窗口本领实例

先容通过应用报名查找应用窗口,详细代码请参考查找指定窗口本领示例
模拟窗口移动本领实例

先容模拟移动窗口到指定位置本领,详细代码请参考模拟窗口移动示例
模拟调解窗口巨细本领实例

先容模拟调解窗口巨细本领,并可指定调解的详细方向,详细代码请参考模拟调解窗口巨细本领示例
常见问题

单位测试用例常见问题

1、用例中增加的打印日志在用例效果之后才打印
问题描述
用例中增加的日志打印信息,没有在用例执行过程中出现,而是在用例执行结束之后才出现。
可能原因
此类情况只会存在于用例中有调用异步接口的情况,原则上用例中所有的日志信息均在用例执行结束之前打印。
解决方法
当被调用的异步接口多于一个时,发起将接口调用封装成Promise方式调用。
2、执行用例时报error:fail to start ability
问题描述
执行测试用例时候,用例执行失败,控制台返回错误:fail to start ability。
可能原因
测试包打包过程中出现问题,未将测试框架依赖文件打包在测试包中。
解决方法
检查测试包中是否包含OpenHarmonyTestRunner.abc文件,如没有则重新编译打包后再次执行测试。
3、执行用例时报用例超时错误
问题描述
用例执行结束,控制台提示execute time XXms错误,即用例执行超时。
可能原因
1.用例执行异步接口,但执行过程中没有执行到done函数,导致用例执行不停没有结束,直到超时结束。
2.用例调用函数耗时过长,超过用例执行设置的超时时间。
3.用例调用函数中断言失败,抛出失败异常,导致用例执行不停没有结束,直到超时结束。
解决方法
1.检查用例代码逻辑,确保即使断言失败场景认可走到done函数,保证用例执行结束。
2.可在IDE中Run/Debug Configurations中修改用例执行超时设置参数,制止用例执行超时。
3.检查用例代码逻辑,断言效果,确保断言Pass。
UI测试用例常见问题

1、失败日志有“Get windows failed/GetRootByWindow failed”错误信息
问题描述
UI测试用例执行失败,检察hilog日志发现日志中有“Get windows failed/GetRootByWindow failed”错误信息。
可能原因
系统ArkUI开关未开启,导致被测试界面控件树信息未天生。
解决方法
执行如下下令,并重启装备再次执行用例。
  1. hdc shell param set persist.ace.testmode.enabled 1
  2. <strong>shell</strong>
复制代码
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、失败日志有“does not exist on current UI! Check if the UI has changed after you got the widget object”错误信息
问题描述
UI测试用例执行失败,检察hilog日志发现日志中有“does not exist on current UI! Check if the UI has changed after you got the widget object”错误信息。
可能原因
在用例中代码查找到目的控件后,装备界面发生了变化,导致查找到的控件丢失,无法举行下一步的模拟操纵。
解决方法
重新执行UI测试用例。
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表