OpenHarmony开发者论坛
标题:
【TEST测试】OpenHarmony Fuzz用例编写(一)关于HDF驱动层的用例编写
[打印本页]
作者:
诚迈_雨哥
时间:
2024-6-14 17:04
标题:
【TEST测试】OpenHarmony Fuzz用例编写(一)关于HDF驱动层的用例编写
[md]# 阅读提示
本文档适合OpenHarmony HDF 驱动层的fuzz用例开发,采用套件生成的方式搭建测试框架。
如果现有fuzztest目录存在,仅添加新用例时参照本作者另一篇文章,[代码参考链接](
https://gitee.com/openharmony/msdp_device_status/pulls/1674
)。
# 一、Fuzz 简介
模糊测试(fuzzing test)是一种软件测试技术,其核心思想是将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常,如崩溃,断言(assertion)失败,以发现可能的程序错误,比如内存泄漏,访问越界等。
Fuzzing测试框架使用了LLVM编译器框架中的libFuzzer作为Fuzzing引擎进行构建,libFuzzer是一个基于LLVM编译时路径插桩,可以对被测库API进行路径引导测试的Fuzzing引擎。
使用Fuzzing测试框架,需要完成fuzzer测试用例初始化、fuzzer用例编写、fuzzer用例编译和fuzzer用例执行四步。
# 二、 开发前的准备
## 2.1 测试框架基础环境配置
![wps1.png](
https://forums-obs.openharmony.c ... mt2jqijabb11oa9.png
"wps1.png")
## 2.2 组件配置链接
https://gitee.com/openharmony/do ... stguide-envbuild.md
## 2.3 安装环境检查
![wps2.png](
https://forums-obs.openharmony.c ... cx03d1ixm21ci0w.png
"wps2.png")
# 三、 编写测试用例
## 3.1. 配置启动测试测试框架
进入test/developertest目录,执行该目录下的启动脚本 ./start.sh,选择当前的测试产品。
![wps3.png](
https://forums-obs.openharmony.c ... o8re8c2se33ztc8.png
"wps3.png")
## 3.2. Fuzz测试用例生成
执行gen命令生成Fuzzer测试套,包含fuzzer源文件、配置文件和corpus语料库。
![wps4.png](
https://forums-obs.openharmony.c ... 2q1pv6fsqvq6w2q.png
"wps4.png")
## 3.3. 命令参数说明
gen命令 :
```
gen -t TESTTYPE -fn FUZZERNAME -dp DIRECTORYPATH
```
![wps5.png](
https://forums-obs.openharmony.c ... cnay84wsnlrnirn.png
"wps5.png")
## 3.4. 测试套生成
gen命令示例,-t、-fn和-dp均为必选项(黄色标记的是固定格式,不需要修改,绿色标记的需要根据各特性修改,测试套名称小写风格)
```
gen -t FUZZ -fn usbbulktransferwrite_fuzzer -dp drivers/peripheral/usb/test/fuzztest/
```
![wps6.png](
https://forums-obs.openharmony.c ... yzudghzbvzbe28e.png
"wps6.png")
### 测试套创建成功:
![wps7.png](
https://forums-obs.openharmony.c ... trlbl8bdxrotsbt.png
"wps7.png")
### 生成的测试套目录如下
![wps8.png](
https://forums-obs.openharmony.c ... 4b4j4s7w11psdz1.png
"wps8.png")
# 四、测试套框架生成后需要编写的文件
> 1. xxx.cpp和xxx.h文件
> 2. fuzz测试套内的build.gn文件
> 3. fuzztest目录下创建build.gn文件并编写
测试套内的project.xml参数配置根据libFuzzer参数配置进行修改,链接如下:
`
https://llvm.org/docs/LibFuzzer.html#options`
## 4.1 xxx.cpp文件编写需要有前置条件。
![wps9.png](
https://forums-obs.openharmony.c ... iczbp5rntlpi5ib.png
"wps9.png")
## 4.2 Fuzz测试套内的build.gn文件编写:
1. 输出路径为:部件/模块名module_output_path = "hdf/usb"
2. ohos_fuzztest("UsbBulkTransferWriteFuzzTest")中必须FuzzTest结尾,大驼峰命名。
3. fuzz_config_file为当前接口测试套的路径。
4. group名称为默认的fuzztest
![wps10.png](
https://forums-obs.openharmony.c ... 7z7o7rjr3d0fpod.png
"wps10.png")
![wps11.png](
https://forums-obs.openharmony.c ... h4kzzq4rx9zr88a.png
"wps11.png")
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 测试用例
## 方法一:设备上手动执行
> 1. 将生成的测试文件传送到单板的/data/test目录下;(test目录需手动创建)
> 2. 通过工具IPOP或者hdc连接单板,添加测试文件的执行权限chmod +x ***
> 3. 执行测试用例./usb_BulkTransferWrite_fuzzer corpus -max_len=1000 -max_total_time=20 -rss_limit_mb=2048 (执行参数可配置)
![wps12.png](
https://forums-obs.openharmony.c ... 7fdfqf57hr7wjfi.png
"wps12.png")
## 方法二:windows环境脱离源码执行测试
> 1. 保证windows环境的python版本>=3.7.5, python下载链接:`
https://www.python.org/ftp/python/3.8.0/python-3.8.0-amd64.exe`
> 2. 安装xdevice组件:
https://gitee.com/openharmony/test_xdevice
![wps13.png](
https://forums-obs.openharmony.c ... xqptppepofk1xsp.png
"wps13.png")
#### 安装xdevice
打开xdevice安装目录,在控制台执行python setup.py install
#### 安装extension
打开extension安装目录,在控制台执行python setup.py install
#### 下载test_developertest组件
https://gitee.com/openharmony/test_developertest
![wps14.png](
https://forums-obs.openharmony.c ... k2a2z055hkukc0n.png
"wps14.png")
1. 在本地创建test文件夹,将编译后out/rk3568目录下的tests拷贝至新创建的test下。
2. 配置用例路径,test\test_developertest\config\user_config.xml中配置用例归档路径:
![wps15.png](
https://forums-obs.openharmony.c ... 9hi17179y1ietib.png
"wps15.png")
3. 配置好环境后,运行test\test_developertest目录下的start.bat文件,执行测试命令:
`run -t FUZZ`
[/md]
作者:
zhonghuihui
时间:
2024-7-1 15:34
老师下午好!我这边软件绿色联盟的运营,看到您写的这篇文章很不错,想问一下方便转载吗,转载到软件绿色联盟的微信公众号上,绿盟覆盖主体主要是开发者,通过日常发布技术文章赋能开发者,转载文章会备注来源以及作者,期待老师的回复!
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5