未验证 提交 a6cd79de 编写于 作者: O openharmony_ci 提交者: Gitee

!19465 自动化测试框架内容优化

Merge pull request !19465 from ningning/master
...@@ -3,42 +3,38 @@ ...@@ -3,42 +3,38 @@
## 概述 ## 概述
为支撑OpenHarmony操作系统的自动化测试活动开展,我们提供了支持JS/TS语言的单元及UI测试框架,支持开发者针对应用接口或系统接口进行单元测试,并且可基于UI操作进行UI自动化脚本的编写 OpenHarmony的自动化测试框架arkxtest,作为工具集的重要组成部分,支持JS/TS语言的单元测试框架(JsUnit)及UI测试框架(UiTest)。<br>JsUnit提供单元测试用例执行能力,提供用例编写基础接口,生成对应报告,用于测试系统或应用接口。<br>UiTest通过简洁易用的API提供查找和操作界面控件能力,支持用户开发基于界面操作的自动化测试脚本。本指南介绍了测试框架的主要功能、实现原理、环境准备,以及测试脚本编写和执行等内容
本指南重点介绍自动化测试框架的主要功能,同时介绍编写单元/UI自动化测试脚本的方法以及执行过程。
## 实现原理
### 简介 测试框架分为单元测试框架和UI测试框架。<br>单元测试框架是测试框架的基础底座,提供了最基本的用例识别、调度、执行及结果汇总的能力。<br>UI测试框架主要对外提供了UiTest API供开发人员在对应测试场景调用,而其脚本的运行基础仍是单元测试框架。
OpenHarmony自动化测试框架arkxtest,作为OpenHarmony工具集的重要组成部分,提供了OpenHarmony自动化脚本编写和运行的基础能力。编写方面提供了一系列支持测试脚本编写的API,包括了基础流程API、断言API以及UI操作相关的API,运行方面提供了识别测试脚本、调度执行测试脚本以及汇总测试脚本执行结果的能力。 ### 单元测试框架
图1.单元测试框架主要功能
### 实现原理
框架重要分为两大部分:单元测试框架和UI测试框架。
- 单元测试框架
单元测试框架是测试框架的基础底座,提供了最基本的用例识别、调度、执行及结果汇总的能力。主要功能如下图所示:
![](figures/UnitTest.PNG) ![](figures/UnitTest.PNG)
单元测试脚本的基础运行流程如下图所示,依赖aa test命令作为执行入口。 图2.脚本基础流程运行图
![](figures/TestFlow.PNG) ![](figures/TestFlow.PNG)
- UI测试框架 > **说明:**
>
> 单元测试框架中的函数具体含义请参考[函数定义](https://gitee.com/openharmony/testfwk_arkxtest/blob/master/README_zh.md#%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E)。
UI测试框架主要对外提供了[UiTest API](../reference/apis/js-apis-uitest.md)供开发人员在对应测试场景调用,而其脚本的运行基础还是上面提到的单元测试框架。 ### UI测试框架
UI测试框架的主要功能如下图所示: 图3.UI测试框架主要功能
![](figures/Uitest.PNG) ![](figures/Uitest.PNG)
### 约束与限制 ## 约束与限制
- UI测试框架的能力在OpenHarmony 3.1 release版本之后方可使用,历史版本不支持使用。 - UI测试框架的能力在OpenHarmony 3.1 release版本之后方可使用,历史版本不支持使用。
- 单元测试框架的部分能力与其版本有关,具体能力与版本匹配信息可见代码仓中的[文档介绍](https://gitee.com/openharmony/testfwk_arkxtest/blob/master/README_zh.md) - 单元测试框架的部分能力与其版本有关,具体能力与版本匹配信息可见代码仓中的[文档介绍](https://gitee.com/openharmony/testfwk_arkxtest/blob/master/README_zh.md)
...@@ -62,6 +58,18 @@ DevEco Studio可参考其官网介绍进行[下载](https://developer.harmonyos. ...@@ -62,6 +58,18 @@ DevEco Studio可参考其官网介绍进行[下载](https://developer.harmonyos.
## 编写单元测试脚本 ## 编写单元测试脚本
本章节主要描述单元测试框架支持能力,以及能力的使用方法。
在单元测试框架,测试脚本需要包含如下基本元素:
1、依赖导包,以便使用依赖的测试接口。
2、测试代码编写,主要编写测试代码的相关逻辑,如接口调用等。
3、断言接口调用,设置测试代码中的检查点,如无检查点,则不可认为一个完整的测试脚本。
如下示例代码实现的场景是:启动测试页面,检查设备当前显示的页面是否为预期页面。
```TS ```TS
import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium';
import abilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry'; import abilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry';
...@@ -93,25 +101,17 @@ export default function abilityTest() { ...@@ -93,25 +101,17 @@ export default function abilityTest() {
} }
``` ```
单元测试脚本需要包含如下基本元素:
1、依赖导包,以便使用依赖的测试接口。
2、测试代码编写,主要编写测试代码的相关逻辑,如接口调用等。
3、断言接口调用,设置测试代码中的检查点,如无检查点,则不可认为一个完整的测试脚本。
## 编写UI测试脚本 ## 编写UI测试脚本
UI测试脚本是在单元测试框架的基础上编写,主要就是增加了UI测试框架提供的接口调用,实现对应的测试逻辑 本章节主要介绍UI测试框架支持能力,以及对应能力API的使用方法。<br>UI测试基于单元测试,UI测试脚本在单元测试脚本上增加了对UiTest接口(提供链接)调用,进而完成对应的测试活动。<br>如下的示例代码是在上面的单元测试脚本基础上增量编写,实现的是在启动的应用页面上进行点击操作,然后检测当前页面变化是否为预期变化
下面的示例代码是在上面的测试脚本基础上增量编写,首先需要增加依赖导包,如下示例代码所示: 1.增加依赖导包。
```js ```js
import {Driver,ON,Component,MatchPattern} from '@ohos.uitest' import {Driver,ON,Component,MatchPattern} from '@ohos.uitest'
``` ```
然后是具体测试代码编写,场景较为简单,就是在启动的应用页面上进行点击操作,然后增加检查点检查用例 2.编写具体测试代码
```js ```js
export default function abilityTest() { export default function abilityTest() {
...@@ -158,11 +158,11 @@ export default function abilityTest() { ...@@ -158,11 +158,11 @@ export default function abilityTest() {
通过点击按钮执行,当前支持以下执行方式: 通过点击按钮执行,当前支持以下执行方式:
1、测试包级别执行即执行测试包内的全部用例。 1、测试包级别执行即执行测试包内的全部用例。
2、测试套级别执行即执行describe方法中定义的全部测试用例。 2、测试套级别执行即执行describe方法中定义的全部测试用例。
3、测试方法级别执行即执行指定it方法也就是单条测试用例。 3、测试方法级别执行即执行指定it方法也就是单条测试用例。
![](figures/Execute.PNG) ![](figures/Execute.PNG)
...@@ -172,9 +172,17 @@ export default function abilityTest() { ...@@ -172,9 +172,17 @@ export default function abilityTest() {
![](figures/TestResult.PNG) ![](figures/TestResult.PNG)
**查看测试用例覆盖率**
执行完测试用例后可以查看测试用例覆盖率,具体操作请参考[OpenHarmony Test代码覆盖率统计](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/harmonyos_jnit_jsunit-0000001092459608-V3?catalogVersion=V3#section1989615417457)
### CMD执行 ### CMD执行
通过在cmd窗口中输入aa命令执行触发用例执行,并通过设置执行参数触发不同功能。 将应用测试包安装到测试设备上,在cmd窗口中执行aa命令,完成对用例测试。
> **说明:**
>
> 使用cmd的方式,需要配置好hdc相关的环境变量。
**aa test命令执行配置参数** **aa test命令执行配置参数**
...@@ -201,74 +209,72 @@ export default function abilityTest() { ...@@ -201,74 +209,72 @@ export default function abilityTest() {
| size | 指定要执行用例的用例规模 | small,medium,large | -s size small | size | 指定要执行用例的用例规模 | small,medium,large | -s size small
| stress | 指定要执行用例的执行次数 | 正整数 | -s stress 1000 | | stress | 指定要执行用例的执行次数 | 正整数 | -s stress 1000 |
**通过在cmd窗口直接执行命令。** **cmd窗口执行test命令**
> 使用cmd的方式,需要配置好hdc相关的环境变量
- 打开cmd窗口 - 打开cmd窗口
- 执行 aa test 命令 - 执行 aa test 命令
**示例代码1**:执行所有测试用例。 示例代码1:执行所有测试用例。
```shell ```shell
hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner
``` ```
**示例代码2**:执行指定的describe测试套用例,指定多个需用逗号隔开。 示例代码2:执行指定的describe测试套用例,指定多个需用逗号隔开。
```shell ```shell
hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s class s1,s2 hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s class s1,s2
``` ```
**示例代码3**:执行指定测试套中指定的用例,指定多个需用逗号隔开。 示例代码3:执行指定测试套中指定的用例,指定多个需用逗号隔开。
```shell ```shell
hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s class testStop#stop_1,testStop1#stop_0 hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s class testStop#stop_1,testStop1#stop_0
``` ```
**示例代码4**:执行指定除配置以外的所有的用例,设置不执行多个测试套需用逗号隔开。 示例代码4:执行指定除配置以外的所有的用例,设置不执行多个测试套需用逗号隔开。
```shell ```shell
hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s notClass testStop hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s notClass testStop
``` ```
**示例代码5**:执行指定it名称的所有用例,指定多个需用逗号隔开。 示例代码5:执行指定it名称的所有用例,指定多个需用逗号隔开。
```shell ```shell
hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s itName stop_0 hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s itName stop_0
``` ```
**示例代码6**:用例执行超时时长配置。 示例代码6:用例执行超时时长配置。
```shell ```shell
hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s timeout 15000 hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s timeout 15000
``` ```
**示例代码7**:用例以breakOnError模式执行用例。 示例代码7:用例以breakOnError模式执行用例。
```shell ```shell
hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s breakOnError true hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s breakOnError true
``` ```
**示例代码8**:执行测试类型匹配的测试用例。 示例代码8:执行测试类型匹配的测试用例。
```shell ```shell
hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s testType function hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s testType function
``` ```
**示例代码9**:执行测试级别匹配的测试用例。 示例代码9:执行测试级别匹配的测试用例。
```shell ```shell
hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s level 0 hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s level 0
``` ```
**示例代码10**:执行测试规模匹配的测试用例。 示例代码10:执行测试规模匹配的测试用例。
```shell ```shell
hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s size small hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s size small
``` ```
**示例代码11**:执行测试用例指定次数。 示例代码11:执行测试用例指定次数。
```shell ```shell
hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s stress 1000 hdc shell aa test -b xxx -p xxx -s unittest OpenHarmonyTestRunner -s stress 1000
...@@ -299,14 +305,14 @@ OHOS_REPORT_STATUS: consuming=4 ...@@ -299,14 +305,14 @@ OHOS_REPORT_STATUS: consuming=4
| 日志输出字段 | 日志输出字段含义 | | 日志输出字段 | 日志输出字段含义 |
| ------- | -------------------------| | ------- | -------------------------|
| OHOS_REPORT_SUM | 当前测试套用例总数 | | OHOS_REPORT_SUM | 当前测试套用例总数 |
| OHOS_REPORT_STATUS: class | 当前执行用例测试套名称| | OHOS_REPORT_STATUS: class | 当前执行用例测试套名称|
| OHOS_REPORT_STATUS: id | 用例执行语言,默认JS | | OHOS_REPORT_STATUS: id | 用例执行语言,默认JS |
| OHOS_REPORT_STATUS: numtests | 测试包中测试用例总数 | | OHOS_REPORT_STATUS: numtests | 测试包中测试用例总数 |
| OHOS_REPORT_STATUS: stream | 当前用例发生错误时,记录错误信息 | | OHOS_REPORT_STATUS: stream | 当前用例发生错误时,记录错误信息 |
| OHOS_REPORT_STATUS: test| 当前用例执行的it name | | OHOS_REPORT_STATUS: test| 当前用例执行的it name |
| OHOS_REPORT_STATUS_CODE | 当前用例执行结果状态 0 (pass) 1(error) 2(fail) | | OHOS_REPORT_STATUS_CODE | 当前用例执行结果状态。0表示通过,1表示错误,2表示失败。|
| OHOS_REPORT_STATUS: consuming | 当前用例执行消耗的时长 | | OHOS_REPORT_STATUS: consuming | 当前用例执行消耗的时长(ms)。 |
- cmd执行完成后,会打印如下相关日志信息。 - cmd执行完成后,会打印如下相关日志信息。
...@@ -320,14 +326,70 @@ OHOS_REPORT_STATUS: taskconsuming=16029 ...@@ -320,14 +326,70 @@ OHOS_REPORT_STATUS: taskconsuming=16029
``` ```
| 日志输出字段 | 日志输出字段含义 | | 日志输出字段 | 日志输出字段含义 |
| ------------------| -------------------------| | ------------------| -------------------------|
| run | 当前测试包用例总数 | | run | 当前测试包用例总数。 |
| Failure | 当前测试失败用例个数 | | Failure | 当前测试失败用例个数。 |
| Error | 当前执行用例发生错误用例个数 | | Error | 当前执行用例发生错误用例个数。 |
| Pass | 当前执行用例通过用例个数 | | Pass | 当前执行用例通过用例个数 。|
| Ignore | 当前未执行用例个数 | | Ignore | 当前未执行用例个数。 |
| taskconsuming| 执行当前测试用例总耗时 | | taskconsuming| 执行当前测试用例总耗时(ms)。 |
> 当处于breakOnError模式,用例发生错误时,注意查看Ignore以及中断说明。
## 相关实例
### 单元测试脚本实例
#### 单元测试断言功能使用实例
介绍单元测试框架中支持的断言能力如何使用,具体代码请查看[断言能力示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/jsunit/entry/src/ohosTest/ets/test/assertExampleTest/assertExample.test.ets)
#### 单元测试测试套定义使用实例
介绍单元测试框架测试套嵌如何定义,包括嵌套定义能力,具体代码请参考[测试套嵌套示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/jsunit/entry/src/ohosTest/ets/test/coverExampleTest/coverExample.test.ets)
#### 单元测试测试应用自定义函数使用实例
介绍针对应用内自定义函数如何使用框架能力进行测试,具体代码请参考[应用自定义函数测试示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/jsunit/entry/src/ohosTest/ets/test/customExampleTest/customExample.test.ets)
#### 单元测试数据驱动能力使用实例
介绍测试框架数据驱动能力、脚本重复执行配置功能,具体代码请参考[数据驱动能力示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/jsunit/entry/src/ohosTest/ets/test/paramExampleTest/paramExample.test.ets)
### UI测试脚本实例(控件类)
#### 查找指定控件能力实例
介绍通过设置控件属性作为查找条件,在应用界面上查找组件对象,具体代码请参考[控件查找示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/uitest/entry/src/ohosTest/ets/test/findCommentExampleTest/Component/findCommentExample.test.ets)
#### 模拟点击操作事件能力实例
介绍模拟用户在应用界面上进行点击,长按,双击等事件,具体代码请参考[点击事件示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/uitest/entry/src/ohosTest/ets/test/operationExampleTest/ui/clickEvent.test.ets)
> 当处于breakOnError模式,用例发生错误时,注意查看Ignore以及中断说明 #### 模拟鼠标操作能力实例
介绍模拟鼠标左击、右击、滑轮事件,具体代码请参考[鼠标操作事件示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/uitest/entry/src/ohosTest/ets/test/operationExampleTest/ui/MouseEvent.test.ets)
#### 模拟文本输入能力实例
介绍模拟输入中文、英文文本内容,使用前提是针对可以输入文本的组件类似文本框等组件进行操作,具体代码请参考[文本输入能力示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/uitest/entry/src/ohosTest/ets/test/operationExampleTest/ui/InputEvent.test.ets)
#### 截图能力实例
介绍屏幕截图功能,包括指定区域截图能力,具体代码请参考[截图能力示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/uitest/entry/src/ohosTest/ets/test/operationExampleTest/ui/ScreenCapEvent.test.ets)
#### 模拟快滑操作能力实例
介绍模拟快滑操作能力,即在可滑动页面上进行滑动,滑动后手指离开屏幕,具体代码请参考[模拟快滑操作能力示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/uitest/entry/src/ohosTest/ets/test/operationExampleTest/ui/FlingEvent.test.ets)
#### 模拟慢滑操作能力实例
介绍模拟慢滑操作能力,即在可滑动页面上进行滑动,滑动后手指仍停留在屏幕,具体代码请参考[模拟慢滑操作能力示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/uitest/entry/src/ohosTest/ets/test/operationExampleTest/ui/SwipeEvent.test.ets)
#### 模拟缩放操作能力实例
介绍模拟缩放能力,即在支持放大缩小的图片上,模拟双指缩放操作的能力,具体代码请参考[模拟缩放操作能力示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/uitest/entry/src/ohosTest/ets/test/operationExampleTest/ui/PinchEvent.test.ets)
#### 模拟滚动到组件顶端或底端能力实例
介绍模拟针对滑动类组件,可以模拟操作直接滚动到组件顶端或底端,具体代码请参考[模拟滚动到组件顶端或底端示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/uitest/entry/src/ohosTest/ets/test/operationExampleTest/ui/ScrollerEvent.test.ets)
### UI测试脚本实例(窗口类)
#### 查找指定窗口能力实例
介绍通过应用报名查找应用窗口,具体代码请参考[查找指定窗口能力示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/uitest/entry/src/ohosTest/ets/test/findCommentExampleTest/window/findWindowExample.test.ets)
#### 模拟窗口移动能力实例
介绍模拟移动窗口到指定位置能力,具体代码请参考[模拟窗口移动示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/uitest/entry/src/ohosTest/ets/test/operationExampleTest/window/MoveToEvent.test.ets)
#### 模拟调整窗口大小能力实例
介绍模拟调整窗口大小能力,并可指定调整的具体方向,具体代码请参考[模拟调整窗口大小能力示例](https://gitee.com/openharmony/applications_app_samples/blob/master/code/Project/Test/uitest/entry/src/ohosTest/ets/test/operationExampleTest/window/ReSizeWindow.test.ets)
## 常见问题 ## 常见问题
...@@ -422,7 +484,7 @@ UI测试用例执行失败,查看hilog日志发现日志中有“uitest-api do ...@@ -422,7 +484,7 @@ UI测试用例执行失败,查看hilog日志发现日志中有“uitest-api do
**3、失败日志有“does not exist on current UI! Check if the UI has changed after you got the widget object”错误信息** **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测试用例执行失败,查看hilog日志发现日志中有“does not exist on current UI! Check if the UI has changed after you got the widget object”错误信息。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册