

从5.0.3.403版本开始,新创建的工程/模块的ohosTest目录下默认不创建testability、testrunner和resources目录,历史工程仍保留这些目录,如果新工程需要使用ability或resources能力,需要开发者自行创建。
如果需要使用ability能力,需要同时创建testrunner目录及OpenHarmonyTestRunner.ets文件。
新版本 | 历史版本 |
|
|
图标进行查看。{
"module": {
"name": "entry_test",
"type": "feature",
"description": "$string:module_test_desc",
"mainElement": "TestAbility", // 对应下方abilities中的ability name。
"deviceTypes": [
"phone",
"tablet",
"2in1"
],
"deliveryWithInstall": true,
"installationFree": false,
"pages": "$profile:test_pages", // 对应resources目录 > base目录 > profile目录 > test_pages.json文件。
"abilities": [ // 添加的ability的配置信息。
{
"name": "TestAbility",
"srcEntry": "./ets/testability/TestAbility.ets",
"description": "$string:TestAbility_desc",
"icon": "$media:icon", // 确保引用的资源都存在
"label": "$string:TestAbility_label",
"exported": true,
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background"
}
]
}
} 使用DevEco Studio运行测试用例前,需要将设备与电脑进行连接,将工程编译成带签名信息的HAP,再安装到真机设备或模拟器上运行,具体请参考使用本地真机运行应用或使用模拟器运行应用。


按钮,执行Instrument Test。
执行完测试任务后,查看测试结果。

调试模式相比运行模式增加了断点管理功能。在断点命中时,可以选择单步执行、步入步出、进入下个断点等方式进行调试,另外可以使用线程堆栈可视化、变量和表达式可视化功能,快速定位问题。
以文件级别为例,在添加断点之后,在工程目录中,选中文件,单击右键 > Debug'测试文件名称',以调试模式执行测试任务。

在断点命中时,下方将出现Debug窗口。开发者可在该窗口中进行断点管理与基础调试能力的可视化操作,在断点命中时可查看当前线程的变量和堆栈信息。

断点命中时,在代码编辑器窗口单击右键,在弹出的菜单中将出现调试模式特有功能,如计算表达式、添加变量监视等。

在跳出所有断点后,测试结束,与运行模式相同,在测试窗口查看测试结果。

在Instrument Test运行的基础上支持代码覆盖率统计。
开发者可以自定义参与覆盖率测试的本地文件或远程源码har包,具体配置方法请参考配置覆盖率过滤文件。
可以采用运行工程目录(test)、测试文件(如Ability.test.ets)、测试套件(describe)、测试方法(it)的方式来启动代码覆盖率的统计。
以文件级别为例,有两种方式启动测试:

按钮,执行测试。
启动测试后,进行编译构建,底部将出现Cover窗口,构建结束后自动拉起Cover窗口,测试任务结束后,窗口中会打印测试报告的路径。

点击链接可打开报告,查看ArkTS代码覆盖率详情,关于覆盖率的计算方式请参考查看覆盖率报告。

在Cover窗口中,单击rerun按钮可以按照之前的设置,重新执行覆盖率用例。

默认情况下,测试用例可直接运行,如果需要自定义测试用例运行任务,可通过如下方法进行设置。



,打开Test Args界面,添加测试参数。
例如将测试参数配置为level=1, size=medium

Key | 含义说明 | Value取值范围 |
|---|---|---|
level | 用例级别 | "0","1","2","3","4", 例如:-s level 1 |
size | 用例粒度 | "small","medium","large", 例如:-s size small |
testType | 用例测试类型 | "function","performance","power","reliability","security","global","compatibility","user","standard","safety","resilience", 例如:-s testType function |

点击Run > Edit Configurations,打开Run/Debug Configurations窗口,选择Instrument Test,点击Debugger页签,设置Debug type。

调试类型Debug type默认为Detect Automatically,关于各调试类型的说明如下表所示:
调试类型 | 调试代码 |
|---|---|
Detect Automatically | 自动检测。根据工程模块及其依赖的模块涉及的编程语言,自动启动对应的调试器。 如果检测到是Native模块,出现两个调试窗口(PandaDebugger、Native);如果不是Native模块,只出现PandaDebugger调试窗口。 |
ArkTS/JS | 只调试ArkTS/JS,只出现PandaDebugger调试窗口。 |
Native | 单独调试C++,只出现Native调试窗口。 |
Dual(ArkTS/JS + Native) | 支持ArkTS/JS和C++混合调试,出现两个调试窗口(PandaDebugger、Native)。 |
Instrument Test针对C/C++方法提供ASan检测能力,关于ASan的介绍请参考ASan检测,当前不支持JS语言。



从DevEco Studio 6.0.0 Beta5版本开始,支持对C++代码进行测试,包括运行/调试C++测试代码、对C++代码进行覆盖率统计。
由于C++的测试so无法直接在设备上运行,需要通过Node-API的方式拉起,即通过ArkTS/JS语言拉起C/C++测试用例。
DevEco Studio生成的cpp测试目录中不包含C++测试框架,需要开发者自行选择开源测试框架使用。

// ArkTS测试文件Ability.test.ets
import entryTest from 'libentry_test.so';
export default function abilityTest() {
describe('ActsAbilityTest', () => {
// ...
it('testNative', 0, () => {
hilog.info(0x0000, 'testTag', '%{public}s', 'testNative it begin');
let result = entryTest.runNativeTest();
hilog.info(0x0000, 'testTag', '%{public}s', result)
expect(result).assertContain("ended");
})
})
} 
DevEco Studio默认不收集C++代码覆盖率,需要通过以下方式开启。
// DevEco Studio 6.0.2 Beta1之前版本
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
// DevEco Studio 6.0.2 Beta1及以上版本,OHOS_TEST_COVERAGE在覆盖率模式下为true,在调试/运行模式下为false
if(OHOS_TEST_COVERAGE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-instr-generate -fcoverage-mapping")
endif() 在napi_init.cpp文件的RunNativeTest方法中,调用__llvm_profile_write_file方法,将覆盖率数据保存到设备的/data/storage/el2/base路径下的c++_coverage.profraw文件中,该路径和文件名不可修改,示例代码如下。
extern "C" { void __llvm_profile_set_filename(char *); int __llvm_profile_write_file(void); } static napi_value RunNativeTest(napi_env env, napi_callback_info info) { char filename[256]; snprintf(filename, sizeof(filename), "/data/storage/el2/base/c++_coverage.profraw"); // 覆盖率报告文件路径和文件名,不可修改 __llvm_profile_set_filename(filename); // 开启测试 // ... // 结束测试,保存数据 __llvm_profile_write_file(); // ... }

启动测试后,进行编译构建,底部将出现Cover窗口,构建结束后自动拉起Cover窗口,测试任务结束后,窗口中会打印测试报告的路径。

点击链接可打开报告,查看C++代码覆盖率详情。

hvigorw onDeviceTest -p module={moduleName} -p coverage={true|false} -p scope={suiteName}#{methodName} -p ohos-debug-asan={true|false} -p patch={patchPath} 如果开启了C++代码覆盖率测试,会生成C++代码的覆盖率报告,路径:<module-path>/.test/default/outputs/ohosTest/cpp_reports/index.html
ASan日志路径:<module-path>/.test/default/intermediates/ohosTest/coverage_data
测试结果文件:<module-path>/.test/default/intermediates/ohosTest/coverage_data/test_result.txt