积分1721 / 贡献20

提问18答案被采纳71文章44

作者动态

[经验分享] 使用、开发 FuzzTest 以及使用代码覆盖率工具检查覆盖率指南 原创

深开鸿_王石 显示全部楼层 发表于 2025-12-5 14:10:23

OpenHarmony 使用、开发 FuzzTest 指南

编译FuzzTest

./build.sh --build-target GetAppStatsMahFuzzTest --product-name rk3568 --gn-args battery_statistics_feature_coverage=true

--build-target:对应的fuzztest,本次选的是base/powermgr/battery_statistics/test/fuzztest/getappstatsmah_fuzzer/BUILD.gn里的测试用例;

--product-name:对应测试设备,rk3568(Dayu200)

--gn-args:对应的编译参数,用于打开code_coverage的编译开关,详见coverage_flags的配置项(base/powermgr/battery_statistics/utils/BUILD.gn)

  • 编译结束后可在 查看FuzzTest:
#find  out/rk3568/tests/fuzztest/ -name GetAppStatsMahFuzzTest
out/rk3568/tests/fuzztest/battery_statistics/battery_statistics/GetAppStatsMahFuzzTest
  • 编译结束后可验证CodeCoverage:
#find  out/rk3568/obj/ -name *.gcno
out/rk3568/obj/base/powermgr/battery_statistics/utils/native/src/batterystats_utils/stats_utils.gcno
out/rk3568/obj/base/powermgr/battery_statistics/utils/native/src/batterystats_utils/stats_hisysevent.gcno
out/rk3568/obj/base/powermgr/battery_statistics/utils/native/src/batterystats_utils/stats_helper.gcno
out/rk3568/obj/base/powermgr/battery_statistics/utils/native/src/batterystats_utils/stats_xcollie.gcno
out/rk3568/obj/base/powermgr/battery_statistics/test/fuzztest/stats_utils/GetAppStatsMahFuzzTest/batterystats_fuzzer.gcno
out/rk3568/obj/base/powermgr/battery_statistics/test/fuzztest/getappstatsmah_fuzzer/GetAppStatsMahFuzzTest/getappstatsmah_fuzzer_test.gcno
out/rk3568/obj/base/powermgr/battery_statistics/frameworks/native/src/batterystats_stub/battery_stats_info.gcno
out/rk3568/obj/base/powermgr/battery_statistics/frameworks/native/src/batterystats_client/battery_stats_info.gcno
out/rk3568/obj/base/powermgr/battery_statistics/frameworks/native/src/batterystats_client/battery_stats_client.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/batterystats_service/battery_stats_detector.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/batterystats_service/battery_stats_listener.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/batterystats_service/battery_stats_core.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/batterystats_service/battery_stats_service.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/batterystats_service/battery_stats_subscriber.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/batterystats_service/cpu_time_reader.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/batterystats_service/battery_stats_dumper.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/batterystats_service/battery_stats_parser.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/wifi_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/bluetooth_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/camera_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/battery_stats_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/sensor_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/screen_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/wakelock_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/idle_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/audio_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/alarm_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/phone_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/gnss_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/flashlight_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/cpu_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/user_entity.gcno
out/rk3568/obj/base/powermgr/battery_statistics/services/native/src/entities/batterystats_service/uid_entity.gcno
out/rk3568/obj/out/rk3568/gen/base/powermgr/battery_statistics/services/batterystats_stub/battery_stats_stub.gcno
out/rk3568/obj/out/rk3568/gen/base/powermgr/battery_statistics/services/batterystats_proxy/battery_stats_proxy.gcno

部署测试环境(windows)

1. 准备目录

  • 在d盘建立test目录,里面下载developer_test和xdevice的代码
git clone https://gitcode.com/openharmony/testfwk_developer_test.git
git clone https://gitcode.com/openharmony/testfwk_xdevice.git

testfwk_developer_test:是测试框架代码,主要支持unittest和fuzztest;

testfwk_xdevice:是测试驱动,用来连接测试设备,运行测试用例和记录日志,生成报告;

2. 准备环境

  • 从编译结果里拷贝fuzztest(fuzztest的位于编译输出路径下out/rk3568/tests/fuzztest)到test目录内
  • 从编译结果里拷贝res(res的位于编译输出路径下out/rk3568/tests/res)到test目录内
  • 从编译结果拷贝gen

testsdir.png

注意:如果少拷贝这两个文件都会出现测试时候不能运行的情况,如下:unavailable: 1

[2025-11-03 11:22:12,256] [5092] [ResultReporter] [INFO]
[2025-11-03 11:22:12,256] [5092] [ResultReporter] [INFO] [**************************************************]
[2025-11-03 11:22:12,257] [5092] [ResultReporter] [INFO] [************** Start generate reports ************]
[2025-11-03 11:22:12,257] [5092] [ResultReporter] [INFO] [**************************************************]
[2025-11-03 11:22:12,258] [5092] [ResultReporter] [INFO]
[2025-11-03 11:22:12,259] [5092] [ResultReporter] [INFO] [The total tests of battery_statistics module is 0]
[2025-11-03 11:22:12,262] [5092] [ReporterHelper] [INFO] [Generate data report: D:\test\developer_test\reports\2025-11-03-11-22-08\summary_report.xml]
[2025-11-03 11:22:12,291] [5092] [ResultReporter] [INFO] [Test Summary: modules: 1, repeat: 1, run modules: 0, total: 0, passed: 0, failed: 0, blocked: 0, ignored: 0, unavailable: 1]
[2025-11-03 11:22:12,292] [5092] [ResultReporter] [INFO] [Log path: D:\test\developer_test\reports\2025-11-03-11-22-08]
[2025-11-03 11:22:12,292] [5092] [ResultReporter] [INFO] [Generate test report: file:///D:/test/developer_test/reports/2025-11-03-11-22-08/summary_report.html]
[2025-11-03 11:22:12,294] [5092] [ResultReporter] [INFO] [Generate summary ini: D:\test\developer_test\reports\2025-11-03-11-22-08\summary.ini]
[2025-11-03 11:22:12,296] [5092] [ResultReporter] [INFO] [Copy summary files to C:\Users\ADMINI~1\AppData\Local\Temp\xdevice_data\latest]
[2025-11-03 11:22:12,301] [5092] [ResultReporter] [INFO]
[2025-11-03 11:22:12,301] [5092] [ResultReporter] [INFO] [**************************************************]
[2025-11-03 11:22:12,302] [5092] [ResultReporter] [INFO] [************** Ended generate reports ************]
[2025-11-03 11:22:12,302] [5092] [ResultReporter] [INFO] [**************************************************]
[2025-11-03 11:22:12,303] [5092] [ResultReporter] [INFO]
  • 修改配置文件,developer_test\config\user_config.xml里的配置项
修改testcase路径,注意,必须用此路径,至少目前如此!
<!-- configure test cases path -->
  <test_cases>
    <dir>D:\test\tests</dir>
  </test_cases>

修改测试覆盖率的输出路径
<!-- reserved field, configure output path for coverage -->
  <coverage>
    <outpath>D:\test\out</outpath>
  </coverage>

3. 运行测试

  • 进入test\developer_test,运行start.bat
D:\test\developer_test>start.bat
start time is:
10:52
[2025-10-28 10:52:05,204] [31020] [main] [INFO] [************* Developer Test Framework Starting **************]
[2025-10-28 10:52:05,249] [31020] [ManagerLite] [WARNING] [[Environment-0302033] Ipcamera local com cannot be empty, please check]
+++++++++++++++++++++++++++++++++++++++++++++
Please select the current tested product form:
1. rk3568
2. ipcamera_hispark_aries
3. ipcamera_hispark_taurus
4. wifiiot_hispark_pegasus
default is [1] rk3568
1
rk3568
+++++++++++++++++++++++++++++++++++++++++++++
The environment is ready, please use the run command to test.
{'productform': 'rk3568'}
>>>
xxxxxxxxxx >>> run -t FUZZ -ts GetAppStatsMahFuzzTest
[2025-10-28 11:25:54,243] [10556] [Run] [INFO][2025-10-28 11:25:54,243] [10556] [Run] [INFO] [------------------------------------][2025-10-28 11:25:54,246] [10556] [Run] [INFO] [Input parameter:][2025-10-28 11:25:54,246] [10556] [Run] [INFO] [productform   = rk3568][2025-10-28 11:25:54,246] [10556] [Run] [INFO] [testtype      = ['fuzztest']][2025-10-28 11:25:54,246] [10556] [Run] [INFO] [subsystem     = []][2025-10-28 11:25:54,247] [10556] [Run] [INFO] [testpart      = []][2025-10-28 11:25:54,247] [10556] [Run] [INFO] [testmodule    = ][2025-10-28 11:25:54,247] [10556] [Run] [INFO] [testsuit      = GetAppStatsMahFuzzTest][2025-10-28 11:25:54,247] [10556] [Run] [INFO] [testcase      = ][2025-10-28 11:25:54,247] [10556] [Run] [INFO] [testlevel     = ][2025-10-28 11:25:54,247] [10556] [Run] [INFO] [testargs     = {}][2025-10-28 11:25:54,248] [10556] [Run] [INFO] [repeat     = 0][2025-10-28 11:25:54,249] [10556] [Run] [INFO] [retry         = False][2025-10-28 11:25:54,250] [10556] [Run] [INFO] [historylist   = False][2025-10-28 11:25:54,254] [10556] [Run] [INFO] [runhistory   = 0][2025-10-28 11:25:54,254] [10556] [Run] [INFO] [partname_list = []][2025-10-28 11:25:54,255] [10556] [Run] [INFO] [partdeps = ][2025-10-28 11:25:54,255] [10556] [Run] [INFO] [testcase_file = ][2025-10-28 11:25:54,256] [10556] [Run] [INFO] [------------------------------------][2025-10-28 11:25:54,256] [10556] [Run] [INFO][2025-10-28 11:25:54,257] [10556] [Run] [INFO] [testcase_path=D:\test\tests][2025-10-28 11:25:54,258] [10556] [TestcaseManager] [INFO] [test case path: D:\test\tests][2025-10-28 11:25:54,258] [10556] [TestcaseManager] [INFO] [test type list: ['fuzztest']][2025-10-28 11:25:54,259] [10556] [TestcaseManager] [INFO] [The test case directory: D:\test\tests\fuzztest][2025-10-28 11:25:54,264] [10556] [Run] [INFO] [testcase_path=D:\test\tests][2025-10-28 11:25:54,268] [10556] [Request] [INFO] [Report path: D:\test\developer_test\reports\2025-10-28-11-25-54][2025-10-28 11:25:54,269] [10556] [LifeStage] [WARNING] [No json config file or the json config file is empty!][2025-10-28 11:25:54,277] [10556] [Utils] [WARNING] [[Environment-0101002] File path does not exist, path: testcases/queryStandard][2025-10-28 11:25:54,279] [10556] [Scheduler] [INFO] [[1 / 1] Executing: D:\test\tests\fuzztest\battery_statistics\battery_statistics\GetAppStatsMahFuzzTest, Device: 450100445634303332016bde0a2eba00, Driver: CppTest][2025-10-28 11:25:54,281] [10556] [Scheduler] [INFO] [Driver executing in thread 41680][2025-10-28 11:25:54,282] [10556] [Scheduler] [INFO] [Thread 2025-10-28-11-25-54-280504 execute started][2025-10-28 11:25:54,285] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell date '2025-10-28 11:25:54' with timeout 300.0s][2025-10-28 11:25:54,365] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell hilog -b INFO with timeout 300.0s][2025-10-28 11:25:54,430] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell hilog -w query with timeout 300.0s][2025-10-28 11:25:54,688] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell rm -rf /data/test/ with timeout 300.0s][2025-10-28 11:25:54,769] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell mkdir -p /data/test/ with timeout 300.0s][2025-10-28 11:25:54,844] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell mount -o rw,remount,rw / with timeout 300.0s][2025-10-28 11:25:54,942] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell mkdir -p /data/test/corpus with timeout 300.0s][2025-10-28 11:25:55,023] [41680] [Device] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc file send "D:\test\tests\fuzztest\battery_statistics\battery_statistics\GetAppStatsMahFuzzTest" to "/data/test/"][2025-10-28 11:25:55,079] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell ls "/data/test/" with timeout 300.0s][2025-10-28 11:25:55,158] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell ls "/data/test/" with timeout 300.0s][2025-10-28 11:25:55,236] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell hilog -d /data/test/GetAppStatsMahFuzzTest with timeout 300.0s][2025-10-28 11:25:55,301] [41680] [Device] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc file send "d:\test\tests\res\getappstatsmah_fuzzer\corpus\init" to "/data/test/corpus"][2025-10-28 11:25:55,335] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell ls "/data/test/corpus" with timeout 300.0s][2025-10-28 11:25:55,416] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell ls "/data/test/corpus" with timeout 300.0s][2025-10-28 11:25:55,495] [41680] [ResourceManager] [INFO] [xml_filepath = ][2025-10-28 11:25:55,496] [41680] [config_manager] [INFO] [fuzzer config file :D:\test\tests\res\getappstatsmah_fuzzer\project.xml][2025-10-28 11:25:55,497] [41680] [config_manager] [INFO] [before for][2025-10-28 11:25:55,502] [41680] [Drivers] [INFO] [config list :['1000', '180', '4096']][2025-10-28 11:25:55,503] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell cd /data/test/; rm -rf GetAppStatsMahFuzzTest.xml; chmod +x *; ./GetAppStatsMahFuzzTest corpus -max_len=1000 -max_total_time=180 -rss_limit_mb=4096 with timeout 900.0s][2025-10-28 11:25:55,712] [41680] [Drivers] [INFO] [WARNING: Failed to find function "__sanitizer_acquire_crash_state".][2025-10-28 11:25:55,713] [41680] [Drivers] [INFO] [WARNING: Failed to find function "__sanitizer_print_stack_trace".][2025-10-28 11:25:55,714] [41680] [Drivers] [INFO] [WARNING: Failed to find function "__sanitizer_set_death_callback".][2025-10-28 11:25:55,715] [41680] [Drivers] [INFO] [INFO: Running with entropic power schedule (0xFF, 100).][2025-10-28 11:25:55,717] [41680] [Drivers] [INFO] [INFO: Seed: 2464214708][2025-10-28 11:25:55,749] [41680] [Drivers] [INFO] [INFO: Loaded 1 modules   (50 inline 8-bit counters): 50 [0x543764, 0x543796),][2025-10-28 11:25:55,749] [41680] [Drivers] [INFO] [INFO: Loaded 1 PC tables (50 PCs): 50 [0x543798,0x543928),][2025-10-28 11:25:55,751] [41680] [Drivers] [INFO] [INFO:        1 files found in corpus][2025-10-28 11:25:55,755] [41680] [Drivers] [INFO] [INFO: seed corpus: files: 1 min: 9b max: 9b total: 9b rss: 30Mb][2025-10-28 11:25:55,756] [41680] [Drivers] [INFO] [#2  INITED cov: 9 ft: 10 corp: 1/9b exec/s: 0 rss: 30Mb][2025-10-28 11:25:55,777] [41680] [Drivers] [INFO] [#11 REDUCE cov: 9 ft: 10 corp: 1/6b lim: 9 exec/s: 0 rss: 30Mb L: 6/6 MS: 4 CopyPart-ChangeByte-ChangeBit-EraseBytes-][2025-10-28 11:25:55,795] [41680] [Drivers] [INFO] [#20 REDUCE cov: 9 ft: 10 corp: 1/5b lim: 9 exec/s: 0 rss: 30Mb L: 5/5 MS: 4 CopyPart-CopyPart-ChangeBinInt-EraseBytes-][2025-10-28 11:25:55,807] [41680] [Drivers] [INFO] [#27 REDUCE cov: 9 ft: 10 corp: 1/3b lim: 9 exec/s: 0 rss: 30Mb L: 3/3 MS: 2 ChangeBinInt-EraseBytes-][2025-10-28 11:25:55,826] [41680] [Drivers] [INFO] [#39 REDUCE cov: 9 ft: 10 corp: 1/2b lim: 9 exec/s: 0 rss: 30Mb L: 2/2 MS: 2 ChangeBinInt-EraseBytes-][2025-10-28 11:25:55,919] [41680] [Drivers] [INFO] [#100        REDUCE cov: 9 ft: 10 corp: 1/1b lim: 9 exec/s: 0 rss: 30Mb L: 1/1 MS: 1 EraseBytes-][2025-10-28 11:25:58,711] [41680] [Drivers] [INFO] [#2048       pulse  cov: 9 ft: 10 corp: 1/1b lim: 26 exec/s: 1024 rss: 30Mb][2025-10-28 11:26:01,654] [41680] [Drivers] [INFO] [#4096       pulse  cov: 9 ft: 10 corp: 1/1b lim: 44 exec/s: 819 rss: 30Mb][2025-10-28 11:26:07,502] [41680] [Drivers] [INFO] [#8192       pulse  cov: 9 ft: 10 corp: 1/1b lim: 88 exec/s: 744 rss: 30Mb][2025-10-28 11:26:19,222] [41680] [Drivers] [INFO] [#16384      pulse  cov: 9 ft: 10 corp: 1/1b lim: 165 exec/s: 712 rss: 30Mb][2025-10-28 11:26:42,714] [41680] [Drivers] [INFO] [#32768      pulse  cov: 9 ft: 10 corp: 1/1b lim: 328 exec/s: 712 rss: 30Mb][2025-10-28 11:29:02,579] [41680] [Drivers] [INFO] [#65536      pulse  cov: 9 ft: 10 corp: 1/1b lim: 656 exec/s: 704 rss: 30Mb][2025-10-28 11:29:02,582] [41680] [Drivers] [INFO] [#126625     DONE   cov: 9 ft: 10 corp: 1/1b lim: 1000 exec/s: 699 rss: 30Mb][2025-10-28 11:29:02,583] [41680] [Drivers] [INFO] [Done 126625 runs in 181 second(s)][2025-10-28 11:29:02,588] [41680] [Drivers] [INFO] [result_savepath = D:\test\developer_test\reports\2025-10-28-11-25-54\result\battery_statistics\battery_statistics][2025-10-28 11:29:02,589] [41680] [Drivers] [INFO] [create fuzz test report][2025-10-28 11:29:02,590] [41680] [Drivers] [INFO] [FUZZ TEST PASS][2025-10-28 11:29:02,592] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell cd /data/test/; tar czf GetAppStatsMahFuzzTest_corpus.tar.gz corpus; with timeout 300.0s][2025-10-28 11:29:02,673] [41680] [Drivers] [INFO] [result_savepath = D:\test\developer_test\reports\2025-10-28-11-25-54\result\battery_statistics\battery_statistics][2025-10-28 11:29:02,674] [41680] [Drivers] [INFO] [fuzz_dir = D:\test\developer_test\reports\2025-10-28-11-25-54\result\battery_statistics\battery_statistics][2025-10-28 11:29:02,762] [41680] [Drivers] [INFO] [result_savepath = D:\test\developer_test\reports\2025-10-28-11-25-54\result\battery_statistics\battery_statistics][2025-10-28 11:29:02,763] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell find /data/log/hilog -type f -mtime -3m with timeout 300.0s][2025-10-28 11:29:03,635] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell ls -t /data/log/hilog | grep hilog_dict with timeout 300.0s][2025-10-28 11:29:03,717] [41680] [Device] [WARNING] [hilog_dict does not exist, and it won't be pulled][2025-10-28 11:29:03,717] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell find /data/log/faultlog/temp/cppcrash -type f -mtime -3m with timeout 300.0s][2025-10-28 11:29:03,794] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell find /data/log/faultlog/temp -type f -mtime -3m with timeout 300.0s][2025-10-28 11:29:03,870] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell find /data/log/faultlog/faultlogger -type f -mtime -3m with timeout 300.0s][2025-10-28 11:29:03,946] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell find /data/log/faultlog/SERVICE_BLOCK -type f -mtime -3m with timeout 300.0s][2025-10-28 11:29:04,021] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell find /data/log/faultlog/appfreeze -type f -mtime -3m with timeout 300.0s][2025-10-28 11:29:04,095] [41680] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell find /data/log/faultlog -type f -mtime -3m with timeout 300.0s][2025-10-28 11:29:04,174] [41680] [Concurrent] [INFO] [Executed: D:\test\tests\fuzztest\battery_statistics\battery_statistics\GetAppStatsMahFuzzTest, Execution Time: 3m9s][2025-10-28 11:29:04,179] [41680] [Concurrent] [INFO] [Thread 2025-10-28-11-25-54-280504 end][2025-10-28 11:29:06,316] [10556] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell ps -ef | grep singleness with timeout 300.0s][2025-10-28 11:29:06,499] [10556] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell pidof com.ohos.devicetest with timeout 300.0s][2025-10-28 11:29:06,587] [10556] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell netstat -atn | grep :8011 with timeout 300.0s][2025-10-28 11:29:06,671] [10556] [ResultReporter] [INFO][2025-10-28 11:29:06,671] [10556] [ResultReporter] [INFO] [**************************************************][2025-10-28 11:29:06,672] [10556] [ResultReporter] [INFO] [************** Start generate reports ************][2025-10-28 11:29:06,672] [10556] [ResultReporter] [INFO] [**************************************************][2025-10-28 11:29:06,678] [10556] [ResultReporter] [INFO][2025-10-28 11:29:06,681] [10556] [ReporterHelper] [INFO] [Generate data report: D:\test\developer_test\reports\2025-10-28-11-25-54\summary_report.xml][2025-10-28 11:29:06,713] [10556] [ResultReporter] [INFO] [Test Summary: modules: 1, repeat: 1, run modules: 1, total: 1, passed: 1, failed: 0, blocked: 0, ignored: 0, unavailable: 0][2025-10-28 11:29:06,715] [10556] [ResultReporter] [INFO] [Log path: D:\test\developer_test\reports\2025-10-28-11-25-54][2025-10-28 11:29:06,721] [10556] [ResultReporter] [INFO] [Generate test report: file:///D:/test/developer_test/reports/2025-10-28-11-25-54/summary_report.html][2025-10-28 11:29:06,722] [10556] [ResultReporter] [INFO] [Generate summary ini: D:\test\developer_test\reports\2025-10-28-11-25-54\summary.ini][2025-10-28 11:29:06,730] [10556] [ResultReporter] [INFO] [Copy summary files to C:\Users\ADMINI~1\AppData\Local\Temp\xdevice_data\latest][2025-10-28 11:29:06,736] [10556] [ResultReporter] [INFO][2025-10-28 11:29:06,738] [10556] [ResultReporter] [INFO] [**************************************************][2025-10-28 11:29:06,739] [10556] [ResultReporter] [INFO] [************** Ended generate reports ************][2025-10-28 11:29:06,740] [10556] [ResultReporter] [INFO] [**************************************************][2025-10-28 11:29:06,741] [10556] [ResultReporter] [INFO]
  • 执行Fuzz测试用例代码覆盖率(-cov coverage)
>>> run -t FUZZ -ts GetAppStatsMahFuzzTest -cov coverage
[2025-10-28 11:12:48,141] [10556] [Run] [INFO]
[2025-10-28 11:12:48,142] [10556] [Run] [INFO] [------------------------------------]
[2025-10-28 11:12:48,143] [10556] [Run] [INFO] [Input parameter:]
[2025-10-28 11:12:48,144] [10556] [Run] [INFO] [productform   = rk3568]
[2025-10-28 11:12:48,145] [10556] [Run] [INFO] [testtype      = ['fuzztest']]
[2025-10-28 11:12:48,145] [10556] [Run] [INFO] [subsystem     = []]
[2025-10-28 11:12:48,146] [10556] [Run] [INFO] [testpart      = []]
[2025-10-28 11:12:48,146] [10556] [Run] [INFO] [testmodule    = ]
[2025-10-28 11:12:48,147] [10556] [Run] [INFO] [testsuit      = GetAppStatsMahFuzzTest]
[2025-10-28 11:12:48,148] [10556] [Run] [INFO] [testcase      = ]
[2025-10-28 11:12:48,151] [10556] [Run] [INFO] [testlevel     = ]
[2025-10-28 11:12:48,155] [10556] [Run] [INFO] [testargs     = {}]
[2025-10-28 11:12:48,155] [10556] [Run] [INFO] [repeat     = 0]
[2025-10-28 11:12:48,156] [10556] [Run] [INFO] [retry         = False]
[2025-10-28 11:12:48,156] [10556] [Run] [INFO] [historylist   = False]
[2025-10-28 11:12:48,157] [10556] [Run] [INFO] [runhistory   = 0]
[2025-10-28 11:12:48,158] [10556] [Run] [INFO] [partname_list = []]
[2025-10-28 11:12:48,159] [10556] [Run] [INFO] [partdeps = ]
[2025-10-28 11:12:48,163] [10556] [Run] [INFO] [testcase_file = ]
[2025-10-28 11:12:48,165] [10556] [Run] [INFO] [------------------------------------]
[2025-10-28 11:12:48,165] [10556] [Run] [INFO]
[2025-10-28 11:12:48,166] [10556] [Run] [INFO] [Coverage testing, no need to compile testcases]
[2025-10-28 11:12:48,167] [10556] [Run] [INFO] [testcase_path=D:\test\tests]
[2025-10-28 11:12:48,168] [10556] [TestcaseManager] [INFO] [test case path: D:\test\tests]
[2025-10-28 11:12:48,168] [10556] [TestcaseManager] [INFO] [test type list: ['fuzztest']]
[2025-10-28 11:12:48,173] [10556] [TestcaseManager] [INFO] [The test case directory: D:\test\tests\fuzztest]
[2025-10-28 11:12:48,177] [10556] [Run] [INFO] [testcase_path=D:\test\tests]
[2025-10-28 11:12:48,182] [10556] [Request] [INFO] [Report path: D:\test\developer_test\reports\2025-10-28-11-12-48]
[2025-10-28 11:12:48,188] [10556] [LifeStage] [WARNING] [No json config file or the json config file is empty!]
[2025-10-28 11:12:48,194] [10556] [Utils] [WARNING] [[Environment-0101002] File path does not exist, path: testcases/queryStandard]
[2025-10-28 11:12:48,387] [10556] [Scheduler] [INFO] [[1 / 1] Executing: D:\test\tests\fuzztest\battery_statistics\battery_statistics\GetAppStatsMahFuzzTest, Device: 450100445634303332016bde0a2eba00, Driver: CppTest]
[2025-10-28 11:12:48,389] [10556] [Scheduler] [INFO] [Driver executing in thread 304]
[2025-10-28 11:12:48,390] [10556] [Scheduler] [INFO] [Thread 2025-10-28-11-12-48-388099 execute started]
[2025-10-28 11:12:48,394] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell date '2025-10-28 11:12:48' with timeout 300.0s]
[2025-10-28 11:12:48,471] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell hilog -b INFO with timeout 300.0s]
[2025-10-28 11:12:48,538] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell hilog -w query with timeout 300.0s]
[2025-10-28 11:12:48,783] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell rm -rf /data/test/ with timeout 300.0s]
[2025-10-28 11:12:48,861] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell mkdir -p /data/test/ with timeout 300.0s]
[2025-10-28 11:12:48,938] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell mount -o rw,remount,rw / with timeout 300.0s]
[2025-10-28 11:12:49,038] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell mkdir -p /data/test/corpus with timeout 300.0s]
[2025-10-28 11:12:49,117] [304] [Device] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc file send "D:\test\tests\fuzztest\battery_statistics\battery_statistics\GetAppStatsMahFuzzTest" to "/data/test/"]
[2025-10-28 11:12:49,174] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell ls "/data/test/" with timeout 300.0s]
[2025-10-28 11:12:49,253] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell ls "/data/test/" with timeout 300.0s]
[2025-10-28 11:12:49,332] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell hilog -d /data/test/GetAppStatsMahFuzzTest with timeout 300.0s]
[2025-10-28 11:12:49,398] [304] [Device] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc file send "d:\test\tests\res\getappstatsmah_fuzzer\corpus\init" to "/data/test/corpus"]
[2025-10-28 11:12:49,436] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell ls "/data/test/corpus" with timeout 300.0s]
[2025-10-28 11:12:49,527] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell ls "/data/test/corpus" with timeout 300.0s]
[2025-10-28 11:12:49,607] [304] [ResourceManager] [INFO] [xml_filepath = ]
[2025-10-28 11:12:49,608] [304] [config_manager] [INFO] [fuzzer config file :D:\test\tests\res\getappstatsmah_fuzzer\project.xml]
[2025-10-28 11:12:49,609] [304] [config_manager] [INFO] [before for]
[2025-10-28 11:12:49,613] [304] [Drivers] [INFO] [config list :['1000', '180', '4096']]
[2025-10-28 11:12:49,614] [304] [Drivers] [INFO] [corpus_cov file :D:\test\developer_test\reports\latest_corpus\battery_statistics\battery_statistics\GetAppStatsMahFuzzTest_corpus.tar.gz]
[2025-10-28 11:12:49,615] [304] [Device] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc file send "D:\test\developer_test\reports\latest_corpus\battery_statistics\battery_statistics\GetAppStatsMahFuzzTest_corpus.tar.gz" to "/data/test/"]
[2025-10-28 11:12:49,646] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell ls "/data/test/" with timeout 300.0s]
[2025-10-28 11:12:49,724] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell ls "/data/test/" with timeout 300.0s]
[2025-10-28 11:12:49,805] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell cd /data/test/; tar zxf GetAppStatsMahFuzzTest_corpus.tar.gz;                                         rm -rf GetAppStatsMahFuzzTest.xml; chmod +x *; GCOV_PREFIX=/data/test/;                                         GCOV_PREFIX_STRIP=1 ./GetAppStatsMahFuzzTest corpus -runs=0 -max_len=1000 -max_total_time=180 -rss_limit_mb=4096 with timeout 900.0s]
[2025-10-28 11:12:49,873] [304] [Drivers] [INFO] [tar: GetAppStatsMahFuzzTest_corpus.tar.gz: No such file or directory]
[2025-10-28 11:12:50,045] [304] [Drivers] [INFO] [WARNING: Failed to find function "__sanitizer_acquire_crash_state".]
[2025-10-28 11:12:50,046] [304] [Drivers] [INFO] [WARNING: Failed to find function "__sanitizer_print_stack_trace".]
[2025-10-28 11:12:50,047] [304] [Drivers] [INFO] [WARNING: Failed to find function "__sanitizer_set_death_callback".]
[2025-10-28 11:12:50,048] [304] [Drivers] [INFO] [INFO: Running with entropic power schedule (0xFF, 100).]
[2025-10-28 11:12:50,053] [304] [Drivers] [INFO] [INFO: Seed: 1678441378]
[2025-10-28 11:12:50,083] [304] [Drivers] [INFO] [INFO: Loaded 1 modules   (50 inline 8-bit counters): 50 [0x4a7764, 0x4a7796),]
[2025-10-28 11:12:50,084] [304] [Drivers] [INFO] [INFO: Loaded 1 PC tables (50 PCs): 50 [0x4a7798,0x4a7928),]
[2025-10-28 11:12:50,085] [304] [Drivers] [INFO] [INFO:        1 files found in corpus]
[2025-10-28 11:12:50,087] [304] [Drivers] [INFO] [INFO: seed corpus: files: 1 min: 9b max: 9b total: 9b rss: 30Mb]
[2025-10-28 11:12:50,092] [304] [Drivers] [INFO] [#2    INITED cov: 9 ft: 10 corp: 1/9b exec/s: 0 rss: 30Mb]
[2025-10-28 11:12:50,093] [304] [Drivers] [INFO] [#2    DONE   cov: 9 ft: 10 corp: 1/9b lim: 9 exec/s: 0 rss: 30Mb]
[2025-10-28 11:12:50,094] [304] [Drivers] [INFO] [Done 2 runs in 0 second(s)]
[2025-10-28 11:12:50,137] [304] [Drivers] [INFO] [result_savepath = D:\test\developer_test\reports\2025-10-28-11-12-48\result\battery_statistics\battery_statistics]
[2025-10-28 11:12:50,138] [304] [Drivers] [INFO] [create fuzz test report]
[2025-10-28 11:12:50,140] [304] [Drivers] [INFO] [FUZZ TEST PASS]
[2025-10-28 11:12:50,143] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell "ls -l /data/test/ | grep obj" with timeout 300.0s]
[2025-10-28 11:12:50,228] [304] [Drivers] [INFO] [result_savepath = D:\test\developer_test\reports\2025-10-28-11-12-48\result\battery_statistics\battery_statistics]
[2025-10-28 11:12:50,229] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell find /data/log/hilog -type f -mtime -1s with timeout 300.0s]
[2025-10-28 11:12:50,603] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell ls -t /data/log/hilog | grep hilog_dict with timeout 300.0s]
[2025-10-28 11:12:50,683] [304] [Device] [WARNING] [hilog_dict does not exist, and it won't be pulled]
[2025-10-28 11:12:50,684] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell find /data/log/faultlog/temp/cppcrash -type f -mtime -2s with timeout 300.0s]
[2025-10-28 11:12:50,759] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell find /data/log/faultlog/temp -type f -mtime -2s with timeout 300.0s]
[2025-10-28 11:12:50,835] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell find /data/log/faultlog/faultlogger -type f -mtime -2s with timeout 300.0s]
[2025-10-28 11:12:50,913] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell find /data/log/faultlog/SERVICE_BLOCK -type f -mtime -2s with timeout 300.0s]
[2025-10-28 11:12:50,990] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell find /data/log/faultlog/appfreeze -type f -mtime -2s with timeout 300.0s]
[2025-10-28 11:12:51,067] [304] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell find /data/log/faultlog -type f -mtime -2s with timeout 300.0s]
[2025-10-28 11:12:51,147] [304] [Concurrent] [INFO] [Executed: D:\test\tests\fuzztest\battery_statistics\battery_statistics\GetAppStatsMahFuzzTest, Execution Time: 2s]
[2025-10-28 11:12:51,151] [304] [Concurrent] [INFO] [Thread 2025-10-28-11-12-48-388099 end]
[2025-10-28 11:12:51,394] [10556] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell ps -ef | grep singleness with timeout 300.0s]
[2025-10-28 11:12:51,577] [10556] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell pidof com.ohos.devicetest with timeout 300.0s]
[2025-10-28 11:12:51,667] [10556] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell whoami with timeout 300.0s]
[2025-10-28 11:12:51,743] [10556] [Hdc] [INFO] [450100445634303332016bde0a2eba00 execute command: hdc shell netstat -atn | grep :8011 with timeout 300.0s]
[2025-10-28 11:12:51,828] [10556] [ResultReporter] [INFO]
[2025-10-28 11:12:51,828] [10556] [ResultReporter] [INFO] [**************************************************]
[2025-10-28 11:12:51,830] [10556] [ResultReporter] [INFO] [************** Start generate reports ************]
[2025-10-28 11:12:51,835] [10556] [ResultReporter] [INFO] [**************************************************]
[2025-10-28 11:12:51,836] [10556] [ResultReporter] [INFO]
[2025-10-28 11:12:51,839] [10556] [ReporterHelper] [INFO] [Generate data report: D:\test\developer_test\reports\2025-10-28-11-12-48\summary_report.xml]
[2025-10-28 11:12:51,921] [10556] [ResultReporter] [INFO] [Test Summary: modules: 1, repeat: 1, run modules: 1, total: 1, passed: 1, failed: 0, blocked: 0, ignored: 0, unavailable: 0]
[2025-10-28 11:12:51,922] [10556] [ResultReporter] [INFO] [Log path: D:\test\developer_test\reports\2025-10-28-11-12-48]
[2025-10-28 11:12:51,923] [10556] [ResultReporter] [INFO] [Generate test report: file:///D:/test/developer_test/reports/2025-10-28-11-12-48/summary_report.html]
[2025-10-28 11:12:51,928] [10556] [ResultReporter] [INFO] [Generate summary ini: D:\test\developer_test\reports\2025-10-28-11-12-48\summary.ini]
[2025-10-28 11:12:51,931] [10556] [ResultReporter] [INFO] [Copy summary files to C:\Users\ADMINI~1\AppData\Local\Temp\xdevice_data\latest]
[2025-10-28 11:12:51,937] [10556] [ResultReporter] [INFO]
[2025-10-28 11:12:51,938] [10556] [ResultReporter] [INFO] [**************************************************]
[2025-10-28 11:12:51,940] [10556] [ResultReporter] [INFO] [************** Ended generate reports ************]
[2025-10-28 11:12:51,941] [10556] [ResultReporter] [INFO] [**************************************************]
[2025-10-28 11:12:51,942] [10556] [ResultReporter] [INFO]
  • 结束后检查gcda输出(如果用coverage编译选项输出的二进制,无论是否是“-cov coverage” 运行的都能看到输出,目前社区版本“-cov coverage” 不支持linux下运行
C:\Users\Administrator>hdc -t 450100445634303332016bde0a2eba00 shell find /home/wshi/ -name '*.gcda'
/home/wshi/ohos/60release/src/out/rk3568/obj/base/powermgr/battery_statistics/frameworks/native/src/batterystats_stub/battery_stats_info.gcda
/home/wshi/ohos/60release/src/out/rk3568/obj/base/powermgr/battery_statistics/test/fuzztest/getappstatsmah_fuzzer/GetAppStatsMahFuzzTest/getappstatsmah_fuzzer_test.gcda
/home/wshi/ohos/60release/src/out/rk3568/obj/base/powermgr/battery_statistics/test/fuzztest/stats_utils/GetAppStatsMahFuzzTest/batterystats_fuzzer.gcda
/home/wshi/ohos/60release/src/out/rk3568/obj/out/rk3568/gen/base/powermgr/battery_statistics/services/batterystats_stub/battery_stats_stub.gcda

注意:这就是模拟编译环境生成的目标路径

4. 运行分析工具

  • 执行命令:gen_gcovr.py --gcvr (对测试结果进行覆盖率分析)
    • 运行路径:developer_test\local_coverage/resident_service/gen_gcovr.py
    • 执行参数:-gcvr,对测试结果进行覆盖率检查
    • 执行依赖:
      1. 需要连接有测试结果的开发板;
      2. 需要在developer_test目录里创建outobjs目录:里面保存编译出来的.gcno文件,可以直接把out/rk3568/obj文件夹拷贝至此
      3. 需要在developer_test目录里创建outsrc目录:里面保存源文件或者gen出来的hdf驱动相关的文件(out/rk3568/gen)
PS D:\test\developer_test> python local_coverage/resident_service/gen_gcovr.py --gcvr 
🔍 正在获取设备列表...
发现 2 个设备:
  1. 000000000000000000000000121601ad
  2. 450100445634303332016bde0a2eba00
请选择设备 (1-2): 2
...
==================================================
📊 代码覆盖率统计:
文件名                                 可执行行     覆盖行      覆盖率
-----------------------------------------------------------------
batterystats_fuzzer                 20       20       100.0  %
getappstatsmah_fuzzer_test          5        5        100.0  %
battery_stats_info                  141      43       30.5   %
battery_stats_stub                  155      17       11.0   %
-----------------------------------------------------------------
总计                                  321      85       26.5   %

📈 总体覆盖率: 26.5% (需改进 ⚠️)
==================================================
流程执行总结:
🎉 所有步骤完全成功!覆盖率报告已生成

引用脚本和文档:

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

Copyright   ©2025  OpenHarmony开发者论坛  京ICP备2020036654号-3 | 京公网安备11030102011662号 |技术支持 Discuz!

返回顶部