1# 测试框架使用指导 2 3## 概述 4Delegator测试框架是OpenHarmony提供的一套开发者应用自测试框架,旨在为开发者提供针对应用的自测试环境。开发者可以通过Delegator类启动对应Ability,并通过Delegator类提供的能力对Ability进行生命周期切换和监听,同时支持shellCMD输入和测试结果打印显示等功能。 5 6## 约束与限制 7 8测试框架相关接口只能在测试hap包中使用,只有通过`aa test`命令或者DevEco Studio启动测试环境后相关接口才能生效。 9 10 11## 测试框架启动 12 13测试框架启动有两种方式: 14 15- 方式一:通过`aa test`命令启动。 16- 方式二:通过DevEco Studio启动。 17 18### aa test启动 19 20开发者可通过 `aa test` 命令启动测试框架,开发者可以自行指定使用的TestRunner以及TestRunner所在hap包的package name或module name,具体命令示例如下: 21 22**FA模型:** 23 24```javascript 25aa test -b BundleName -p com.example.myapplicationfaets -s unittest OpenHarmonyTestRunner -s class ActsAbilityTest -w 20 26``` 27 28**Stage模型:** 29```javascript 30aa test -b BundleName -m com.example.myapplicationfaets -s unittest OpenHarmonyTestRunner -s class ActsAbilityTest -w 20 31``` 32| 参数 | 是否必选 | 参数说明 | 33| --------------- | -------- | ------------------------------------------------------------ | 34| -b | 是 | TestRunner所在hap包的bundle name。 | 35| -p | 是 | TestRunner所在hap包的package name,FA模型使用。 | 36| -m | 是 | TestRunner所在hap包的module name,Stage模型使用。 | 37| -s unittest | 是 | 启用的TestRunner名称,TestRunner名称和文件名需要保持一致。 | 38| -w | 否 | 测试用例超时时间,单位为秒,如果未指定或指定小于等于0的整数,测试框架会一直等待测试代码调用finishTest才退出。 | 39| -s \<key>\<value> | 否 | 支持以key-value的方式输入任何参数,输入的参数可通过AbilityDelegatorArgs.parameters以key-value的方式获取。示例:-s classname myTest,key为"-s classname",value为"myTest"。 | 40| -D | 否 | 以Debug模式启动被测试应用。 | 41| -h | 否 | 输出帮助信息。 | 42 43### DevEco Studio启动 44 45DevEco Studio启动相关介绍见 [OpenHarmony测试框架](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-openharmony-test-framework-0000001263160453#section1034420367508)。 46 47## TestRunner介绍 48 49TestRunner是测试框架测试流程入口类。当测试流程启动时,系统会调用TestRunner内相关接口,开发者需要派生该类,并重写onPrepare、onRun方法。DevEco Studio在创建应用模板时会初始化一个默认TestRunner,并在onRun方法启动默认的TestAbility。开发者也可以修改TestAbility测试代码内容,也可以修改默认的TestRunner内onPrepare、onRun方法,自行实现测试代码。具体详细内容请参考TestRunnerAPI接口说明[TestRunner](../reference/apis/js-apis-application-testRunner.md)。 50 51## AbilityDelegatorRegistry介绍 52 53AbilityDelegatorRegistry是测试框架提供的AbilityDelegator仓库类。开发者可以使用AbilityDelegatorRegistry获取AbilityDelegator实例以及执行此次测试时传入和生成的相关参数AbilityDelegatorArgs。开发者可以使用AbilityDelegator调用测试框架提供的函数集进行测试验证。具体详细内容请参考AbilityDelegatorRegistry API接口说明[AbilityDelegatorRegistry](../reference/apis/js-apis-application-abilityDelegatorRegistry.md)。 54 55## AbilityDelegatorArgs介绍 56 57AbilityDelegatorArgs是测试框架提供的测试参数类。开发者可以使用AbilityDelegatorArgs获取执行此次测试时传入和生成的相关参数。具体详细内容请参考AbilityDelegatorArgs API接口说明[AbilityDelegatorArgs](../reference/apis/js-apis-inner-application-abilityDelegatorArgs.md)。 58 59## AbilityMonitor介绍 60 61AbilityMonitor是测试框架提供用来绑定并监听Ability类。开发者可以使用AbilityMonitor绑定Ability,并将AbilityMonitor添加到监听列表。绑定后Ability的创建、生命周期变化等会触发AbilityMonitor内相关回调函数,开发者可以在对应回调函数内进行测试验证。具体详细内容请参考AbilityMonitor API接口说明[AbilityMonitor](../reference/apis/js-apis-inner-application-abilityMonitor.md)。 62 63**示例** 64 65```javascript 66import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' 67 68function onAbilityCreateCallback(data) { 69 console.info("onAbilityCreateCallback"); 70} 71 72var monitor = { 73 abilityName: "abilityname", 74 onAbilityCreate: onAbilityCreateCallback 75} 76 77var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); 78abilityDelegator.addAbilityMonitor(monitor).then(() => { 79 console.info("addAbilityMonitor promise"); 80}); 81``` 82 83## AbilityDelegator介绍 84 85AbilityDelegator是测试框架主要功能类,提供了启动Ability、获取Ability示例、调度Ability生命周期、对Ability生命周期进行监听、打印测试结果等功能。 86 87**导入模块** 88 89```javascript 90import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' 91``` 92 93```javascript 94var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() 95``` 96 97### 启动Ability并监听Ability状态变化 98 99配合AbilityMonitor使用,可以实现对Ability启动、Ability实例获取、监听状态变化功能。 100 101**示例:** 102 103```javascript 104var abilityDelegator; 105var ability; 106var timeout = 100; 107 108function onAbilityCreateCallback(data) { 109 console.info("onAbilityCreateCallback"); 110} 111 112var monitor = { 113 abilityName: "abilityname", 114 onAbilityCreate: onAbilityCreateCallback 115} 116 117abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); 118abilityDelegator.waitAbilityMonitor(monitor, timeout, (err, data) => { 119 ability = data; 120 console.info("waitAbilityMonitor callback"); 121}); 122 123var want = { 124 bundleName: "bundleName", 125 abilityName: "abilityName" 126}; 127abilityDelegator.startAbility(want, (err, data) => { 128 console.info("startAbility callback"); 129}); 130``` 131 132### 调度Ability生命周期 133 134AbilityDelegator提供对Ability生命周期进行显示调度的能力,支持Foreground、Background,配合AbilityMonitor中对Ability生命周期监听方法,可以完整的测试Ability生命周期变化。具体详细内容请参考AbilityDelegator API接口说明[AbilityDelegator](../reference/apis/js-apis-inner-application-abilityDelegator.md)。 135 136### 执行shellCMD命令 137 138AbilityDelegator提供执行shellCMD命令功能,开发者可以在测试代码中执行shell命令,该功能仅在测试环境中生效,非测试环境该接口调用无效果。 139 140**示例:** 141 142```javascript 143var abilityDelegator; 144var cmd = "cmd"; 145abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); 146abilityDelegator.executeShellCommand(cmd, (err, data) => { 147 console.info("executeShellCommand callback"); 148}); 149``` 150 151### 打印日志信息 152 153AbilityDelegator提供打印日志信息功能,开发者可以在测试代码中输出过程日志信息到终端控制台。 154 155**示例:** 156 157```javascript 158var abilityDelegator; 159var msg = "msg"; 160 161abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); 162abilityDelegator.print(msg, (err) => { 163 console.info("print callback"); 164}); 165``` 166 167### 结束测试并打印日志信息 168 169AbilityDelegator提供主动结束测试的功能,开发者可以在测试代码中主动结束测试过程并输出日志码及信息到终端控制台。 170 171**示例:** 172 173```javascript 174var abilityDelegator; 175var msg = "msg"; 176 177abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator(); 178abilityDelegator.finishTest(msg, 0, (err) => { 179 console.info("finishTest callback"); 180}); 181```