阅读提示
本文档适合OpenHarmony HDF 驱动层的fuzz用例开发,采用套件生成的方式搭建测试框架。
如果现有fuzztest目录存在,仅添加新用例时参照本作者另一篇文章,代码参考链接。
一、Fuzz 简介
模糊测试(fuzzing test)是一种软件测试技术,其核心思想是将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常,如崩溃,断言(assertion)失败,以发现可能的程序错误,比如内存泄漏,访问越界等。
Fuzzing测试框架使用了LLVM编译器框架中的libFuzzer作为Fuzzing引擎进行构建,libFuzzer是一个基于LLVM编译时路径插桩,可以对被测库API进行路径引导测试的Fuzzing引擎。
使用Fuzzing测试框架,需要完成fuzzer测试用例初始化、fuzzer用例编写、fuzzer用例编译和fuzzer用例执行四步。
二、 开发前的准备
2.1 测试框架基础环境配置

2.2 组件配置链接
https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-testguide-envbuild.md
2.3 安装环境检查

三、 编写测试用例
3.1. 配置启动测试测试框架
进入test/developertest目录,执行该目录下的启动脚本 ./start.sh,选择当前的测试产品。

3.2. Fuzz测试用例生成
执行gen命令生成Fuzzer测试套,包含fuzzer源文件、配置文件和corpus语料库。

3.3. 命令参数说明
gen命令 :
gen -t TESTTYPE -fn FUZZERNAME -dp DIRECTORYPATH

3.4. 测试套生成
gen命令示例,-t、-fn和-dp均为必选项(黄色标记的是固定格式,不需要修改,绿色标记的需要根据各特性修改,测试套名称小写风格)
gen -t FUZZ -fn usbbulktransferwrite_fuzzer -dp drivers/peripheral/usb/test/fuzztest/

测试套创建成功:

生成的测试套目录如下

四、测试套框架生成后需要编写的文件
- xxx.cpp和xxx.h文件
- fuzz测试套内的build.gn文件
- fuzztest目录下创建build.gn文件并编写
测试套内的project.xml参数配置根据libFuzzer参数配置进行修改,链接如下:
https://llvm.org/docs/LibFuzzer.html#options
4.1 xxx.cpp文件编写需要有前置条件。

4.2 Fuzz测试套内的build.gn文件编写:
- 输出路径为:部件/模块名module_output_path = "hdf/usb"
- ohos_fuzztest("UsbBulkTransferWriteFuzzTest")中必须FuzzTest结尾,大驼峰命名。
- fuzz_config_file为当前接口测试套的路径。
- group名称为默认的fuzztest


fuzz测试套同级目录下的build.gn中group命名为hdf_usb_fuzztest
文件补充完后,开始编译......
五、编译测试用例
./build.sh --product-name Hi3516DV300 --build-target hdf_usb_fuzztest
./build.sh --product-name rk3568 --build-target hdf_usb_fuzztest
测试用例生成目录为:out\rk3568\tests\fuzztest\hdf\usb
./build.sh --product-name rk3568 --build-target camera_hal_standard_unittest
./build.sh --product-name rk3568 --build-target camera_hal_fuzztest
./build.sh --product-name rk3568 --build-target camera_hal_fuzztest --target-cpu arm64
六、执行Fuzz 测试用例
方法一:设备上手动执行
- 将生成的测试文件传送到单板的/data/test目录下;(test目录需手动创建)
- 通过工具IPOP或者hdc连接单板,添加测试文件的执行权限chmod +x ***
- 执行测试用例./usb_BulkTransferWrite_fuzzer corpus -max_len=1000 -max_total_time=20 -rss_limit_mb=2048 (执行参数可配置)

方法二:windows环境脱离源码执行测试
- 保证windows环境的python版本>=3.7.5, python下载链接:
https://www.python.org/ftp/python/3.8.0/python-3.8.0-amd64.exe
- 安装xdevice组件: https://gitee.com/openharmony/test_xdevice

安装xdevice
打开xdevice安装目录,在控制台执行python setup.py install
安装extension
打开extension安装目录,在控制台执行python setup.py install
下载test_developertest组件
https://gitee.com/openharmony/test_developertest

-
在本地创建test文件夹,将编译后out/rk3568目录下的tests拷贝至新创建的test下。
-
配置用例路径,test\test_developertest\config\user_config.xml中配置用例归档路径:

-
配置好环境后,运行test\test_developertest目录下的start.bat文件,执行测试命令:
run -t FUZZ