diff --git a/README_zh.md b/README_zh.md index a0fa6ce0155891ce7fee14835d7ca1cb5192512c..780a978bbfb8f5cdcd9d7a90a098e472897a2ab9 100755 --- a/README_zh.md +++ b/README_zh.md @@ -447,7 +447,7 @@ OpenHarmony支持如下几种系统类型: sources = [ "src/TestDemo.cpp" ] - + include_dirs = [ "src", ... @@ -457,7 +457,7 @@ OpenHarmony支持如下几种系统类型: ] cflags = [ "-Wno-error" ] } - + ``` 4. acts目录下增加编译选项(BUILD.gn)样例: @@ -581,55 +581,91 @@ OpenHarmony支持如下几种系统类型: 用例编写语法采用 jasmine 的标准语法,格式支持ES6格式。 -1. 规范用例目录:测试用例存储到entry/src/main/js/test目录。 +**以FA 模式为例:** + +1. 规范用例目录:测试用例存储到 src/main/js/test目录。 ``` - ├── BUILD.gn - │ └──entry - │ │ └──src - │ │ │ └──main - │ │ │ │ └──js - │ │ │ │ │ └──default - │ │ │ │ │ │ └──pages - │ │ │ │ │ │ │ └──index - │ │ │ │ │ │ │ │ └──index.js # 入口文件 - │ │ │ │ │ └──test # 测试代码存放目录 - │ │ │ └── resources # hap资源存放目录 - │ │ │ └── config.json # hap配置文件 + ├── BUILD.gn + ├── Test.json # 资源依赖hap不需要Test.json文件 + ├── signature + │ └──openharmony_sx.p7b # 签名工具 + └──src + │ └──main + │ │ └──js + │ │ │ └──MainAbility + │ │ │ │ └──app.js + │ │ │ │ └──pages + │ │ │ │ │ └──index + │ │ │ │ │ │ └──index.js + │ │ │ └──test # 测试代码存放目录 + │ │ │ │ │ └──List.test.js + │ │ │ │ │ └──Ability.test.js + │ │ │ └──TestAbility # 测试框架入口模板文件,添加后无需修改 + │ │ │ │ └──app.js + │ │ │ │ └──pages + │ │ │ │ │ └──index + │ │ │ │ │ │ └──index.js + │ │ │ └──TestRunner # 测试框架入口模板文件,添加后无需修改 + │ │ │ │ └──OpenHarmonyTestRunner.js + │ └── resources # hap资源存放目录 + │ └── config.json # hap配置文件 ``` -2. index.js示例 +2. OpenHarmonyTestRunner.js 示例 + + ``` + //加载js 测试框架 + import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + + ... + + export default { + ... + onRun() { + console.log('OpenHarmonyTestRunner onRun run') + var abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + + var testAbilityName = abilityDelegatorArguments.parameters['-p'] + '.MainAbility' + + var cmd = 'aa start -d 0 -a ' + testAbilityName + ' -b ' + abilityDelegatorArguments.bundleName + ... + } + }; + ``` + +3. index.js示例 ``` - // 拉起js测试框架,加载测试用例 - import {Core, ExpectExtend} from 'deccjsunit/index' - export default { - data: { - title: "" - }, - onInit() { - this.title = this.$t('strings.world'); - }, + ... onShow() { - console.info('onShow finish') - const core = Core.getInstance() - const expectExtend = new ExpectExtend({ - 'id': 'extend' - }) - core.addService('expect', expectExtend) - core.init() - const configService = core.getDefaultService('config') - configService.setConfig(this) - require('../../../test/List.test') - core.execute() - }, - onReady() { + console.info('onShow finish!') }, + ... } ``` -3. 单元测试用例示例 +4. app.js示例 + + ``` + //加载测试用例 + import { Hypium } from '@ohos/hypium' + import testsuite from '../test/List.test' + export default { + onCreate() { + console.info('TestApplication onCreate'); + var abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + }, + ... + }; + ``` + +5. 单元测试用例示例 ``` // Example1: 使用HJSUnit进行单元测试 @@ -643,6 +679,210 @@ OpenHarmony支持如下几种系统类型: ``` +FA_JS 模式测试模块下用例配置文件(BUILD.gn)样例: + +``` +import("//test/xts/tools/build/suite.gni") + +ohos_js_hap_suite("ActsDemoTest") { + hap_profile = "./src/main/config.json" + deps = [ + ":hjs_demo_js_assets", + ":hjs_demo_resources", + ] + certificate_profile = "./signature/openharmony_sx.p7b" //签名文件 + hap_name = "ActsDemoTest" //测试套件,以Acts开头,以Test结尾,采用驼峰式命名 + part_name = "..." //部件 + subsystem_name = "..." //子系统 +} +ohos_js_assets("hjs_demo_js_assets") { + js2abc = true + hap_profile = "./src/main/config.json" + source_dir = "./src/main/js" +} +ohos_resources("hjs_demo_resources") { + sources = [ "./src/main/resources" ] + hap_profile = "./src/main/config.json" +} +``` + +FA_TS 模式测试模块下用例配置文件(BUILD.gn)样例: + +``` +import("//test/xts/tools/build/suite.gni") + +ohos_js_hap_suite("ActsDemoTest") { + hap_profile = "./src/main/config.json" + deps = [ + ":ace_demo_ets_assets", + ":ace_demo_ets_resources", + ":ace_demo_ets_test_assets", + ] + ets2abc = true + certificate_profile = "./signature/openharmony_sx.p7b" //签名文件 + hap_name = "ActsDemoTest" //测试套件,以Acts开头,以Test结尾,采用驼峰式命名 + part_name = "..." //部件 + subsystem_name = "..." //子系统 +} +ohos_js_assets("ace_demo_ets_assets") { + source_dir = "./src/main/ets/MainAbility" +} +ohos_js_assets("ace_demo_ets_test_assets") { + source_dir = "./src/main/ets/TestAbility" +} +ohos_resources("ace_demo_ets_resources") { + sources = [ "./src/main/resources" ] + hap_profile = "./src/main/config.json" +} +``` + +以Stage 模式为例** + +1. 规范用例目录:测试用例存储到 src/main/js/test目录。 + + ``` + ├── BUILD.gn # 配置文件 + ├── Test.json # 资源依赖hap不需要Test.json文件 + ├── signature + │ └──openharmony_sx.p7b # 签名工具 + ├── AppScope + │ └──resource + │ └──app.json + ├── entry + │ └──src + │ │ └──main + │ │ │ └──ets + │ │ │ │ └──test # 测试代码存放目录 + │ │ │ │ │ └──List.test.ets + │ │ │ │ │ └──Ability.test.ets + │ │ │ │ └──MainAbility + │ │ │ │ │ └──MainAbility.ts + │ │ │ │ │ └──pages + │ │ │ │ │ │ └──index + │ │ │ │ │ │ │ └──index.ets + │ │ │ │ └──TestAbility + │ │ │ │ │ └──TestAbility.ts # 测试用例启动入口 ability + │ │ │ │ │ └──pages + │ │ │ │ │ │ └──index.ets + │ │ │ │ └──Application + │ │ │ │ │ └──AbilityStage.ts + │ │ │ │ └──TestRunner # 测试框架入口模板文件,添加后无需修改 + │ │ │ │ │ └──OpenHarmonyTestRunner.js + │ │ └── resources # hap资源存放目录 + │ │ └── module.json # hap配置文件 + ``` + +2. OpenHarmonyTestRunner.ts 示例 + + 【注】在TestRunner目录下的 OpenHarmonyTestRunner.ts 文件中的 async onRun() 方法下存在拉起测试套入口xxxAbility的cmd 命令: + + 例如: + + var cmd = 'aa start -d 0 -a TestAbility' + ' -b ' + abilityDelegatorArguments.bundleName + + 需与module.json中 "abilities" 下的 "name" 字段保持一致,保证拉起的是我们需要的测试入口。 + + ``` + import TestRunner from '@ohos.application.testRunner' + import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + + ... + + export default class OpenHarmonyTestRunner implements TestRunner { + ... + async onRun() { + console.log('OpenHarmonyTestRunner onRun run') + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var testAbilityName = abilityDelegatorArguments.bundleName + '.TestAbility' + let lMonitor = { + abilityName: testAbilityName, + onAbilityCreate: onAbilityCreateCallback, + }; + abilityDelegator.addAbilityMonitor(lMonitor, addAbilityMonitorCallback) + var cmd = 'aa start -d 0 -a TestAbility' + ' -b ' + abilityDelegatorArguments.bundleName + ... + } + }; + ``` + +3. index.ets示例 + + ``` + import router from '@ohos.router'; + + @Entry + @Component + struct Index { + + aboutToAppear(){ + console.info("start run testcase!!!!") + } + + build() { + ... + } + } + ``` + +4. app.js示例 + + ``` + //加载测试用例 + import Ability from '@ohos.application.Ability' + import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry' + import { Hypium } from '@ohos/hypium' + import testsuite from '../test/List.test' + + export default class TestAbility extends Ability { + onCreate(want, launchParam) { + console.log('TestAbility onCreate') + var abilityDelegator: any + abilityDelegator = AbilityDelegatorRegistry.getAbilityDelegator() + var abilityDelegatorArguments: any + abilityDelegatorArguments = AbilityDelegatorRegistry.getArguments() + console.info('start run testcase!!!') + Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite) + } + ... + }; + ``` + +Stage 模式测试模块下用例配置文件(BUILD.gn)样例: + +``` +import("//test/xts/tools/build/suite.gni") + +ohos_js_hap_suite("ActsDemoTest") { + hap_profile = "/src/main/module.json" + js_build_mode = "debug" + deps = [ + ":edm_js_assets", + ":edm_resources", + ] + ets2abc = true + certificate_profile = "signature/openharmony_sx.p7b" //签名文件 + hap_name = "ActsDemoTest" //测试套件,以Acts开头,以Test结尾,采用驼峰式命名 + subsystem_name = "customization" //子系统 + part_name = "enterprise_device_management" //部件 +} + +ohos_app_scope("edm_app_profile") { + app_profile = "AppScope/app.json" + sources = [ "AppScope/resources" ] +} + +ohos_js_assets("edm_js_assets") { + source_dir = "/src/main/ets" +} + +ohos_resources("edm_resources") { + sources = [ "/src/main/resources" ] + deps = [ ":edm_app_profile" ] + hap_profile = "/src/main/module.json" +} +``` + ### JS语言用例编译打包指导(适用于标准系统) hap包编译请参考 [标准系统 JS用例源码编译Hap包指导](https://gitee.com/openharmony/xts_acts/wikis/%E6%A0%87%E5%87%86%E7%B3%BB%E7%BB%9F%20JS%E7%94%A8%E4%BE%8B%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91Hap%E5%8C%85%E6%8C%87%E5%AF%BC%20?sort_id=4427112)。 @@ -650,12 +890,26 @@ hap包编译请参考 [标准系统 JS用例源码编译Hap包指导](https://gi ### 全量编译指导(适用于标准系统) 1. 全量编译 -test/xts/acts目录下执行编译命令: + test/xts/acts目录下执行编译命令: ```./build.sh suite=acts system_size=standard ``` - 测试用例输出目录:out/release/suites/acts/testcases +2. 单个子系统编译 - 测试框架&用例整体输出目录:out/release/suites/acts(编译用例时会同步编译测试套执行框架) + test/xts/acts目录下执行编译命令: + ```./build.sh suite=acts system_size=standard target_subsystem=×××× ``` + +3. 单模块编译 + + test/xts/acts目录下执行编译命令: + + ```./build.sh suite=acts system_size=standard target_subsystem=×××× + ./build.sh suite=acts system_size=standard suite=xxx + suite 后面添加的是BUILD.gn 中ohos_js_hap_suite模板的命名 + ``` + + 测试用例输出目录:out/rk3568/suites/acts/testcases + + 测试框架&用例整体输出目录:out/rk3568/suites/acts(编译用例时会同步编译测试套执行框架) ### 全量用例执行指导(适用于小型系统、标准系统) @@ -673,14 +927,27 @@ Windows工作台下安装python3.7及以上版本,确保工作台和测试设 用例执行 1. 在Windows工作台上,找到从Linux服务器上拷贝下来的测试套件用例目录,在Windows命令窗口进入对应目录,直接执行acts\run.bat。 + 2. 界面启动后,输入用例执行指令。 全量执行:```run acts ``` 模块执行(具体模块可以查看\acts\testcases\):```run –l ActsSamgrTest ``` + 单包执行(具体模块可以查看\acts\testcases\):(适用于OH驱动) + + ``` + run -l uitestActs -ta class:UiTestCase#testChecked + + uitestActs: 测试hap + UiTestCase: testsuite + testChecked: testcase + ``` + + ​ + 3. 查看测试报告。 -进入acts\reports\,获取当前的执行记录,打开“summary_report.html”可以获取到测试报告。 + 进入acts\reports\,获取当前的执行记录,打开“summary_report.html”可以获取到测试报告。 ## 相关仓