目录
一、Hydropper简介
hydropper是一个基于pytest的轻量级测试框架,在其基础上封装了虚拟化的相关测试原子,用于stratovirt的黑盒测试。当前hydropper已经提供了一些测试用例,可以帮助开发人员发现和定位stratovirt的问题。
二、环境配置
1、安装Stratovirt
hydropper是运行在stratovirt虚拟化平台上的测试框架,所以使用hydropper前需要保证stratovirt已经存在。本文将使用openEuler-stratovirt官方仓库源。
关于stratovirt的安装,可以参考下面这个博客:
Stratovirt的安装及环境搭建
2、安装python3
hydropper测试框架是使用python语言编写的,所以需要确保openEuler系统中已经安装python3。
如果没有python3可以试用以下命令进行安装
$ yum install python3
3、安装hydropper依赖包
在hydropper目录下的requirements.txt中包含了hydropper的依赖包:
- pytest>5.0.0
- aexpect>1.5.0
- retrying
pytest是一个非常成熟的Python测试框架,能够参数化支持单元测试和功能测试,为hydropper提供了大量接口使用。
aexpect是一个类似于pexpect库的软件包,能够为hydropper生成和控制诸如ssh、sftp等交互应用程序
retrying提供了不断试错的功能,增强了hydropper的测试能力
通过以下命令可以完成对于这三个依赖包的安装
$ pip3 install -r requirements.txt
4、安装网络依赖包
为了支持用例执行,需要用以下命令安装网络依赖包
$ yum install nmap
$ yum install iperf3
5、网络配置
brctl addbr <virbr_name> //name the br
ifconfig <virbr_name> up //open the br
ifconfig <virbr_name> <br_ip> //set ip for br
6、构建测试镜像
虚拟光驱的镜像。简单点说,就是把一张光盘,做成一个文件(后缀名一般是iso或者mdf),当你用某些程序打开这个文件之后,里面的内容是和原来的光盘完全相同的(这里指的完全相同是指数据排列方式相同,比如盘里有加密内容一类的东西也可以复制下来。和简单的复制文件–粘贴是不一样的)。这个文件就可以叫这个光盘的一个镜像。
构建测试镜像,利用镜像文件对stratovirt软件进行测试。
6.1、下载kernel镜像和rootfs镜像
$ wget https://repo.openeuler.org/openEuler-21.03/stratovirt_img/x86_64/openEuler-21.03-stratovirt-x86_64.img.xz //rootfs镜像
$ wget https://repo.openeuler.org/openEuler-21.03/stratovirt_img/x86_64/vmlinux.bin //kernel镜像
6.2、扩容镜像
- 创建一个2G大小的空镜像文件extend.img
dd if=/dev/zero of=extend.img bs=50M count=40
可以看到生成了一个2.0G大小的extend.img文件
- 扩容stratovirt_img
cat extend.img >> openEuler-21.03-stratovirt-x86_64.img
发现文件系统镜像大小改变
- 3)调整文件系统大小
e2fsck -f openEuler-21.03-stratovirt-x86_64.img && resize2fs openEuler-21.03-stratovirt-x86_64.img
看到如下图反馈便说明完成了文件系统镜像扩容
6.3、添加依赖包
- 挂载镜像
$ mount openEuler-21.03-stratovirt-x86_64.img /mnt
- 配置在线yum源
cp ./openEuler.repo /mnt/etc/yum.repos.d
- 进入镜像挂载目录,通过yum命令安装依赖包
cd /mnt
chroot .
yum -y install openSSH
- 离开当前目录后,使用umount命令卸载镜像。
exit
umount /mnt
三、 参数配置
请在config目录下的config.ini里配置参数和对应路径,通常的用例都需要配置好kernel和rootfs:
[env.params]
...
VM_USERNAME = <usrname>
VM_PASSWORD = <passwd>
...
[stratovirt.params]
...
STRATOVIRT_VMLINUX = /path/to/kernel
STRATOVIRT_ROOTFS = /path/to/rootfs
...
注意:相关参数均有初始化填充,需要根据自己的实际情况进行相应改动
请在config.ini中配置好IP_PREFIX和IP_3RD,这两项表示虚拟机IPv4地址的前24位, 最后8位会由hydropper来自动配置。请注意虚拟机需要和主机在同一网段。
[network.params]
# such as 'IP_PREFIX.xxx.xxx'
IP_PREFIX = 1.1
# such as 'xxx.xxx.IP_3RD.xxx'
IP_3RD = 1
四、运行测试用例
你可以在hydropper目录下通过以下的命令来执行用例:
# 执行所有用例
$ pytest
# 执行所有带有关键字microvm的用例
$ pytest -k microvm
# 执行test_microvm_cmdline中的全部用例
$ pytest testcases/microvm/functional/test_microvm_cmdline.py
# 执行test_microvm_with_json用例
$ pytest testcases/microvm/functional/test_microvm_cmdline.py::test_microvm_with_json
五、添加测试用例
在testcases目录下的microvm目录里来增加自定义的用例。你可以新增一个python文件或者是在已存在的python文件里新增一个新的函数,文件名和函数名都必须形如test_*:
test_microvm_xxx.py
def test_microvm_xxx()
已经预置了一些虚拟机对象,用户可以通过生成它们的实例来对虚拟机测试:
def test_microvm_xxx(microvm):
test_vm = microvm
test_vm.launch()
另外,Fixture也可以帮助我们来更好的编写用例,用户可以参照以下方式来使用Fixture:
# 标记该函数为system用例
@pytest.mark.system
def test_microvm_xxx(microvm):
test_vm = microvm
test_vm.launch()
现在你可以使用pytest -m system来执行所有的“system”用例了。
用户可以使用basic_config()函数,来配置一些虚拟机的参数:
# 设置虚拟机配置4个VCPU和4G内存
def test_microvm_xxx(microvm):
test_vm = microvm
test_vm.basic_config(vcpu_count=4, mem_size='4G')
test_vm.launch()
六、日志
- pytest默认日志路径:/var/log/pytest.log
- stratovirt默认日志路径:/var/log/stratovirt