[经验分享] 【TEST测试】OpenHarmony Fuzz用例编写(一)关于HDF驱动层的用例编写 原创

诚迈_雨哥 显示全部楼层 发表于 2024-6-14 17:04:44

阅读提示

本文档适合OpenHarmony HDF 驱动层的fuzz用例开发,采用套件生成的方式搭建测试框架。

如果现有fuzztest目录存在,仅添加新用例时参照本作者另一篇文章,代码参考链接

一、Fuzz 简介

模糊测试(fuzzing test)是一种软件测试技术,其核心思想是将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常,如崩溃,断言(assertion)失败,以发现可能的程序错误,比如内存泄漏,访问越界等。

Fuzzing测试框架使用了LLVM编译器框架中的libFuzzer作为Fuzzing引擎进行构建,libFuzzer是一个基于LLVM编译时路径插桩,可以对被测库API进行路径引导测试的Fuzzing引擎。

使用Fuzzing测试框架,需要完成fuzzer测试用例初始化、fuzzer用例编写、fuzzer用例编译和fuzzer用例执行四步。

二、 开发前的准备

2.1 测试框架基础环境配置

wps1.png

2.2 组件配置链接

https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/subsystems/subsys-testguide-envbuild.md

2.3 安装环境检查

wps2.png

三、 编写测试用例

3.1. 配置启动测试测试框架

进入test/developertest目录,执行该目录下的启动脚本 ./start.sh,选择当前的测试产品。

wps3.png

3.2. Fuzz测试用例生成

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

wps4.png

3.3. 命令参数说明

gen命令 :

gen -t TESTTYPE -fn FUZZERNAME -dp DIRECTORYPATH

wps5.png

3.4. 测试套生成

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

gen -t FUZZ -fn usbbulktransferwrite_fuzzer -dp drivers/peripheral/usb/test/fuzztest/ 

wps6.png

测试套创建成功:

wps7.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

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

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

方法二: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

安装xdevice

打开xdevice安装目录,在控制台执行python setup.py install

安装extension

打开extension安装目录,在控制台执行python setup.py install

下载test_developertest组件

https://gitee.com/openharmony/test_developertest

wps14.png

  1. 在本地创建test文件夹,将编译后out/rk3568目录下的tests拷贝至新创建的test下。

  2. 配置用例路径,test\test_developertest\config\user_config.xml中配置用例归档路径:

    wps15.png

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

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

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

精彩评论1

zhonghuihui

沙发 发表于 2024-7-1 15:34:46
老师下午好!我这边软件绿色联盟的运营,看到您写的这篇文章很不错,想问一下方便转载吗,转载到软件绿色联盟的微信公众号上,绿盟覆盖主体主要是开发者,通过日常发布技术文章赋能开发者,转载文章会备注来源以及作者,期待老师的回复!

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部