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