OpenHarmony开发者自测试框架初学指南

OH开发者自测试框架初学指南

      • 前言
      • 前置环境搭建
        • wsl2安装
        • wsl2迁移
        • 源码下载
        • 编译环境
      • 测试框架应用
        • 环境搭建
          • libreadline-dev安装
          • python库安装
          • nfs-kernel-server
          • 验证
        • windows环境准备
          • vscode
          • usbipd
      • 生成测试用例
        • 更改BUILD.gn的配置项
        • 关于fuzz配置编写
        • fuzz用例编译
        • fuzz用例执行
      • 后记

前言

本文是关于开发者自测试框架的初学者使用教程,其中会包括一些笔者在自行搭建测试过程中遇到的一些问题的解决方案。在阅读这篇文章之前,可以先参考以下的两篇文章,这两篇文章里面包含了有关前置环境搭建的全部主流程。

源码下载及编译环境搭建

wsl迁移

本篇也会涉及上面两篇文章中对所涉及到的内容,并对其中可能会遇到的问题提供解决方案。

前置的默认:开发者已经拥有一个安装好OH系统的开发板

前置环境搭建

建议:在使用OH测试框架之前一定要搭建好OH系统的编译环境

wsl2安装

win+R运行appwiz.cpl命令,然后点击启用或关闭Windows功能,选中适用于Linux的Windows子系统虚拟机平台两项启用

在microsoft store当中搜索Ubuntu,选择Ubuntu20.04进行安装。安装后直接打开wsl,对用户名和密码进行设置。

Enter new UNIX username: [yourname]
New password: [yourpassword]

进入ubuntu终端后,重新设置root账户的密码

sudo passwd

然后执行sudo dpkg-reconfigure dash,选择No

Ubuntu已经自带了Python3.8版本所以不需要安装额外的python,只需要安装pip即可。

sudo apt-get -y update
sudo apt-get install python3-pip

随即退出wsl,回到windows当中在cmd当中运行命令(将wsl版本切换至2)

wsl.exe --set-version Ubuntu-20.04 2
wsl2迁移

如果不想C盘在之后wsl运行过程中被占用太多存储空间,需要使用wsl迁移的方式,将wsl迁移至非系统盘。

具体参考wsl迁移

源码下载

再次进入wsl当中,切换软件源。

使用sudo vim /etc/apt/sources.list,将其中的内容清空把下面的内容复制进去使用:wq写入并保存。

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

从vim当中退出来之后,在bash中使用如下命令更新软件数据索引和软件升级。

sudo apt-get update
sudo apt-get upgrade

然后安装git和git-lfs

sudo apt install git-all
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs
git lfs install

配置用户信息

git config --global user.name "yourname"
git config --global user.email "your-email-address"
git config --global credential.helper store

执行如下命令安装repo

mkdir ~/bin
curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o ~/bin/repo 
chmod a+x ~/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests

拉取主干源码,使用如下的方式(个人推荐如下方式比较方便不用配置ssh)

repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
编译环境

使用如下软件安装命令实现编译环境的安装。

sudo apt-get update
sudo apt-get install binutils binutils-dev git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib gcc-arm-linux-gnueabi libc6-dev-i386 libc6-dev-amd64 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby genext2fs device-tree-compiler make libffi-dev e2fsprogs pkg-config perl openssl libssl-dev libelf-dev libdwarf-dev u-boot-tools mtd-utils cpio doxygen liblz4-tool openjdk-8-jre gcc g++ texinfo dosfstools mtools default-jre default-jdk libncurses5 apt-utils wget scons python3.8-distutils tar rsync git-core libxml2-dev lib32z-dev grsync xxd libglib2.0-dev libpixman-1-dev kmod jfsutils reiserfsprogs xfsprogs squashfs-tools pcmciautils quota ppp libtinfo-dev libtinfo5 libncurses5-dev libncursesw5 libstdc++6 gcc-arm-none-eabi vim ssh locales libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev

PS:上述步骤容易在第二步正式安装软件的时候失败,其原因是安装的所有库当中存在的相互依赖的关系,可以分批次安装,然后逐步找到出现问题的依赖包。
比如:

sudo apt-get install binutils binutils-dev git git-lfs gnupg flex bison gperf build-essential zip curl
sudo apt-get install zlib1g-dev gcc-multilib g++-multilib gcc-arm-linux-gnueabi libc6-dev-i386 libc6-dev-amd64 lib32ncurses5-dev
sudo apt-get install x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 
sudo apt-get install bc gnutls-bin python3.8 python3-pip ruby genext2fs device-tree-compiler make libffi-dev
sudo apt-get install e2fsprogs pkg-config perl openssl libssl-dev libelf-dev libdwarf-dev u-boot-tools mtd-utils 
sudo apt-get install cpio doxygen liblz4-tool openjdk-8-jre gcc g++ texinfo dosfstools mtools default-jre 
sudo apt-get install default-jdk libncurses5 apt-utils wget scons python3.8-distutils tar rsync git-core 
sudo apt-get install libxml2-dev lib32z-dev grsync xxd libglib2.0-dev libpixman-1-dev kmod jfsutils 
sudo apt-get install reiserfsprogs xfsprogs squashfs-tools pcmciautils quota ppp libtinfo-dev libtinfo5 
sudo apt-get install libncurses5-dev libncursesw5 libstdc++6 gcc-arm-none-eabi vim ssh locales libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev

PS:如果仍存在问题,则定点找到某一句安装语句,对该语句的安装依赖进行拆分逐步找到出现问题的依赖,最后安装该依赖。我个人的操作经验是libc6-dev-amd64依赖库出了问题,把这个库最后安装就行了
然后去源码目录下找到prebuilts_download.sh并执行

cd build
bash prebuilts_download.sh

然后去安装下载hdc连接工具为后面的操作铺路,从每日构建当中下载

每日构建地址:http://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist

在上述网中下载ohos-sdk,下载之后放到wsl当中,解压之后,把/ohos-sdk/linux/toolchains目录添加到系统变量当中

vim /etc/bashrc
//在/etc/bashrc当中写下(具体的绝对路径按实际情况为准)
export PATH=$PATH:/tmp/ohos-sdk/linux/toolchains

测试框架应用

主流程在社区当中,这里笔者对其中可能出现的问题给出了解决方案

主流程地址

环境搭建
libreadline-dev安装

首先打开wsl,安装Linux拓展组件readline,安装命令如下

sudo apt-get install libreadline-dev
python库安装

使用pip安装setuptools,paramiko,rsa,pyserial

pip3 install setuptools
pip3 install paramiko
pip3 install rsa
pip3 install pyserial

PS:如果在使用pip安装库出现AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK'的错误时,这是由于pip版本与pyopenssl版本不匹配所造成的问题,解决方案如下

# 卸载pip
sudo apt-get remove python3-pip
# 下载pip
wget https://files.pythonhosted.org/packages/4b/30/e15b806597e67057e07a5acdc135216ccbf76a5f1681a324533b61066b0b/pip-22.2.2.tar.gz
# 解压
tar xf pip-22.2.2.tar.gz
# 安装
cd pip-22.2.2
python3 setup.py install
# 查询版本
pip3 --version
pip 22.2.2 from /usr/local/lib/python3.8/dist-packages/pip-22.2.2-py3.8.egg/pip (python 3.8)
#安装匹配的openssl
pip3 install pyOpenSSL --upgrade
nfs-kernel-server

随后安装nfs-kernel-server(如果使用的是标准设备则不需要这一步)

sudo apt install nfs-kernel-server

PS:这里需要初始化nfs-kernel-server,请参考如下步骤

//安装nfs-kernel-server
sudo apt-get install nfs-kernel-server
//创建共享目录
sudo mkdir /nfs_share
sudo chown nobody:nogroup /nfs_share
sudo chmod 777 /nfs_sharevim /etc/exports
编辑/etc/exports文件,添加以下内容:
/nfs_share *(rw,sync,no_subtree_check)//启动nfs服务
service nfs-kernel-server start
验证

进入源码目录下的test/testfwk/developer_test,赋予start.sh执行权限

chmod a+x start.sh

启动测试框架

./start.sh

出现>>>的字样便是成功

windows环境准备

后续步骤回到windows当中进行操作

vscode

使用vscode安装wsl的拓展,并重启。

usbipd

该软件是用于解决wsl无法识别开发板的usb问题

wsl下运行

sudo apt install linux-tools-5.8.0-63-generic
sudo apt install linux-tools-virtual hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip `ls /usr/lib/linux-tools/*/usbip | tail -n1` 20

win下运行,第二个命令的运行结果会列出一系列设备,记录设备名为HDC device的BUSID

winget install usbipd
usbipd wsl list(查看信息)

win下管理员运行,将刚才记录的BUSID添到如下命令当中

usbipd wsl attach --distribution Ubuntu-20.04 --busid [BUSID]

PS:attach当过程中可能会出现断联的情况,可以多试几次,重新插拔usb接口

生成测试用例

回到wsl当中来到OpenHarmony源码目录的test/testfwk/developer_test的子目录下

启动测试框架

./start.sh

向框架的控制台输入

gen -t FUZZ -fn calculator_fuzzer -dp base/account/os_account/test/fuzztest/osaccount

测试用例的生成目录为

/openharmony/OpenHarmony-v4.0-Release/OpenHarmony/base/account/os_account/test/fuzztest/osaccount/calculator_fuzzer

回到Windows当中启动VScode,点击远程资源管理器连接wsl

弹出工作目录选择界面之后选择OpenHarmony/base/account/os_account/目录为主工作目录(具体目录由开发者自己实际开发环境决定)

更改BUILD.gn的配置项

更改工作目录下的test/fuzztest/os_account/calculator_fuzzer/BUILD.gn填写相应的配置项。

#####################hydra-fuzz###################
import("//build/config/features.gni")
import("//build/test.gni")##############################fuzztest##########################################
ohos_fuzztest("CalculatorFuzzTest") {module_out_path = "os_account/os_account"fuzz_config_file = "//base/account/os_account/test/fuzztest/osaccount/calculator_fuzzer"include_dirs = []cflags = ["-g","-O0","-Wno-unused-variable","-fno-omit-frame-pointer"]sources = ["calculator_fuzzer.cpp",]
}
###############################################################################
group("fuzztest") {testonly = truedeps = []deps += [# deps file":CalculatorFuzzTest",]
}
关于fuzz配置编写

更改同一目录下的project.xml文件,可以自行更改max_total_time,让用例运行时间缩短或增长

<fuzz_config><fuzztest><!-- maximum length of a test input --><max_len>1000</max_len><!-- maximum total time in seconds to run the fuzzer --><max_total_time>30</max_total_time><!-- memory usage limit in Mb --><rss_limit_mb>4096</rss_limit_mb></fuzztest>
</fuzz_config>
fuzz用例编译

在os_account/test/fuzztest/osaccount/的BUILD.gn中的最后一行添加

"calculator_fuzzer:fuzztest"如下所示,中间省略了一些其他配置

group("fuzztest") {testonly = truedeps = []deps += [ ..........."calculator_fuzzer:fuzztest" ]
}

回到wsl当中,切换目录到OpenHarmony的源码主目录下,使用ls命令,其显示结果如下

root@DESKTOP-J061R7B:/openharmony# ls
applications  build     commonlibrary  docs     foundation  kernel          prebuilts      test
arkcompiler   build.py  developtools   domains  ide         napi_generator  productdefine  third_party
base          build.sh  device         drivers  interface   out             qemu-run       vendor

使用命令进行编译(需要wsl连接开发板)

./build.sh --product-name rk3568 --build-target CalculatorFuzzTest

PS:–product-name 必须要有,且要和开发者手上的板子型号一致,具体可以看社区介绍https://gitee.com/openharmony

fuzz用例执行

下载https://gitee.com/openharmony/testfwk_developer_test以及https://gitee.com/openharmony/testfwk_xdevice到本机(Windows下)。

创建一个名为test的文件夹(将上面下载的两个文件解压至该目录)并更改这两个文件夹的名字testfwk_developer_test->developer_test,testfwk_xdevice->xdevice。同时创建一个新的目录tests在test文件夹下

从wsl中找到编译好的测试用例文件,在\\wsl.localhost\Ubuntu-20.04\openharmony\out\rk3568\tests目录下(具体目录由开发者的实际情况决定)

将fuzztest和res两个文件夹复制出来,放到test目录下,最终结构如下

test下
2023/12/05  17:57    <DIR>          .
2023/12/05  17:57    <DIR>          ..
2023/12/05  17:57    <DIR>          developer_test
2023/12/05  17:57    <DIR>          tests
2023/12/05  17:57    <DIR>          xdevice
//tests下
2023/12/05  17:57    <DIR>          .
2023/12/05  17:57    <DIR>          ..
2023/12/05  17:57    <DIR>          fuzztest
2023/12/05  17:57    <DIR>          res

回到developer_test,双击start.bat启动测试框架,首先选择运行平台

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

然后在控制台输入如下命令即可运行用例

run -t FUZZ -ts CalculatorFuzzTest

输出的测试报告在developer_test\reports目录下

后记

该生成的测试用例是libfuzzer的基本测试用例,虽然名称是CalculatorFuzzTest但是测试的并不是计算器而是在calculator_fuzzer.cpp里面编写的代码段DoSomethingInterestingWithMyAPI,后续测试需要额外编写真正的测试用例。

namespace OHOS {bool DoSomethingInterestingWithMyAPI(const uint8_t* data, size_t size){bool result = false;if (size >= FUZZ_DATA_LEN) {result = data[FUZZ_FST_DATA] == 'F' &&data[FUZZ_SND_DATA] == 'U' &&data[FUZZ_TRD_DATA] == 'Z' &&data[FUZZ_FTH_DATA] == 'Z';}return result;}
}/* Fuzzer entry point */
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
{/* Run your code on data */OHOS::DoSomethingInterestingWithMyAPI(data, size);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/579792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis在linux集群部署

1.下载redis wget http://download.redis.io/releases/redis-3.2.9.tar.gz 2.解压redis tar -zxvf redis-3.2.9.tar.gz 3.安装redis 在解压redis目录下 make install /usr/soft/redis/ 4.启动redis 在redis的bin目录 执行 ./redis.conf 5.设置redis 端口 密码 集群 vim redis.c…

mongodb聚合_删除_可视化工具

3.5 MongoDB中limit和skip MongoDB Limit() 方法 如果你需要在MongoDB中读取指定数量的数据记录&#xff0c;可以使用MongoDB的Limit方法&#xff0c;limit()方法接受一个数字参数&#xff0c;该参数指定从MongoDB中读取的记录条数。limit()方法基本语法如下所示&#xff1a;…

跟着LearnOpenGL学习12--光照贴图

文章目录 一、前言二、漫反射贴图三、镜面光贴图3.1、采样镜面光贴图 一、前言 在跟着LearnOpenGL学习11–材质中&#xff0c;我们讨论了让每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。这样子能够很容易在一个光照的场景中给每个物体一个独特的外观&#xf…

不浪费原料的汉堡制作方案(LeetCode日记)

LeetCode-1276-不浪费原料的汉堡制作方案 题目信息: 圣诞活动预热开始啦&#xff0c;汉堡店推出了全新的汉堡套餐。为了避免浪费原料&#xff0c;请你帮他们制定合适的制作计划。 给你两个整数 t o m a t o S l i c e s tomatoSlices tomatoSlices 和 c h e e s e S l i c…

【uniapp】Uniapp cli 自动化打包脚本实现

一、前言 通常使用uniapp开发app时&#xff0c;大多数会使用项目的云服务打包&#xff0c;否则的话再借助原生会变得极其复杂&#xff0c;还要去安装对应大内存的环境。如果恰好此时&#xff0c;你有一个需求是&#xff0c;可以随意的更换logo和封面、标题切换成另外一个app&a…

Hadoop集成对象存储和HDFS磁盘文件存储

1.环境配置 1.1 版本说明 组件版本是否必须其他事项Hadoop3.3.0是hadoop3.3.0之后原生支持国内主要对象存储Hive3.1.3否实测没有Hive也可以使用sparksql&#xff0c;使用hive更好的管理HDFS数据spark3.3.1是hive和spark整合后&#xff0c;语法为HSQL&#xff0c;自定义函数按…

深入理解 golang 中的反射机制

目录 什么是反射 反射的使用方法 反射的应用场景 反射的性能考量 反射的最佳实践 小结 反射机制是计算机科学中的一个重要概念&#xff0c;程序通过反射可以在运行时访问、检测和修改自身的状态和行为。Golang 作为静态类型的编译型语言&#xff0c;虽然在设计上倾向于简…

机器学习——决策树(三)

【说明】文章内容来自《机器学习——基于sklearn》&#xff0c;用于学习记录。若有争议联系删除。 1、案例一 决策树用于是否赖床问题。 采用决策树进行分类&#xff0c;要经过数据采集、特征向量化、模型训练和决策树可视化4个步骤。 赖床数据链接&#xff1a;https://pan…

大语言模型激活函数绘图

使用torch中的激活函数&#xff0c;绘制多个激活函数多一个图中对比展示 引入依赖 import torch from torch.nn import functional as F import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [Arial Unicode MS]定义单个曲线图的绘制函数 def draw_single_plot…

解决Pycharm pip安装模块太慢问题,pycharm2022没有manage repositories配置镜像源

解决方案 方法清华阿里云中国科技大学华中理工大学 或者直接-i 加镜像 方法 URL写下面任意一个 清华 https://pypi.tuna.tsinghua.edu.cn/simple阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/华中理工大学 http:/…

钦丰科技(安徽)股份有限公司携卫生级阀门管件盛装亮相2024发酵展

钦丰科技(安徽)股份有限公司携卫生级阀门管件盛装亮相2024济南生物发酵展&#xff01; 展位号&#xff1a;2号馆A65展位 2024第12届国际生物发酵产品与技术装备展览会&#xff08;济南&#xff09;于3月5-7日在山东国际会展中心盛大召开&#xff0c;展会同期将举办30余场高质…

LENOVO联想笔记本小新Pro 14 IRH8 2023款(83AL)电脑原装出厂Win11系统恢复预装OEM系统

链接&#xff1a;https://pan.baidu.com/s/1M1iSFahokiIHF3CppNpL4w?pwdzr8y 提取码&#xff1a;zr8y 联想原厂系统自带所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等自带的预装软件程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件…

django之drf框架(两个视图基类、5个扩展视图类、9个视图子类)

两个视图基类 APIView和GenericAPIView drf提供的最顶层的父类就是APIView&#xff0c;以后所有的类都继承自他 GenericAPIView继承自APIView&#xff0c;他里面封装了一些工能 基于APIViewModelSerializerResposne写5个接口 子路由&#xff1a;app01>>>urls.py …

【C++】开源:fast-cpp-csv-parser数据解析库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍fast-cpp-csv-parser数据解析库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一…

perl使用find函数踩坑

前言 写了一个脚本可以同时检查多个仿真log文件&#xff0c;并生成html表格。按照文件修改时间从新到旧排序。然后一直无法使用stath函数获取ctime。 结论&#xff1a;find函数会改变程序执行的当前目录&#xff0c;find(\&process_files, $dir);函数是在$dir目录下运行的…

【AI】人工智能爆发推进器之生成对抗网络

目录 一、什么是生成对抗网络 二、发展历程 三、应用场景 四、小案例&#xff1a;使用GAN生成手写数字 4.1 问题描述 4.2 代码实现 一、什么是生成对抗网络 生成对抗网络&#xff08;Generative Adversarial Networks&#xff0c;简称GAN&#xff09;是深度学习中的一种…

linux开放tomcat 8080端口

1、查看8080是否开放 firewall-cmd --query-port8080/tcp查看已开启的端口 firewall-cmd --list-ports开启防火墙 systemctl start firewalld2、永久开放8080端口 firewall-cmd --zonepublic --add-port8080/tcp --permanent3、重加载&#xff08;重启防火墙&#xff09; …

UDP信号多个电脑的信息传输测试、配置指南

最近要做一个东西&#xff0c;关于一个软件上得到的信号&#xff0c;如何通过连接的局域网&#xff0c;将数据传输出去。我没做过相关的东西&#xff0c;但是我想应该和软件连接数据库的过程大致是差不多的&#xff0c;就一个ip和一个端口号啥的。 一.问题思路 多个设备同时连…

【宇宙猜想】AR文创入驻今日美术馆、北京天文馆等众多展馆,在AR互动中感受科技魅力!

近日&#xff0c;由「宇宙猜想」推出的AR系列文创产品先后入驻今日美术馆、北京天文馆、国家自然博物馆、上海天文馆、国家海洋馆、中华手工展馆等各大馆场并与其展开相关合作。 「宇宙猜想」致力于创造虚拟空间价值&#xff0c;用AR技术与文创产品碰撞出新的火花&#xff0c;为…

SQL语言之DDL

目录结构 SQL语言之DDLDDL操作数据库查询数据库创建数据库删除数据库使用某个数据库案例 DDL操作表创建表查看表结构查询表修改表添加字段删除字段修改字段的类型修改字段名和字段类型 修改表名删除表案例 SQL语言之DDL ​ DDL&#xff1a;数据定义语言&#xff0c;用来定义数…