测试开发之系统篇-按需创建测试虚拟机

原创
aaronchen2k
2021-06-21 13:09:07
3289

首先,我们来了解一下KVM虚拟机有关的几个概念和工具。

  • kvm:基于内核的虚拟机(引擎)
  • qemu:用于模拟虚拟机IO设备
  • qemu-img:虚拟机磁盘管理工具
  • libvirt:虚拟化服务的API接口
  • virsh:基于libvirt实现的命令行工具
  • qemu-manager:图形化管理工具

新建KVM虚拟机时,可以指定另一磁盘文件作为BackingFile。BackingFile是一个只读的虚拟磁盘基础映像,可以在多个虚拟机间进行共享。基于BackingFile创建和运行虚拟机时,只会在自己的磁盘文件中增量地写入文件,从而提高效率、节省磁盘和维护成本。

虚拟机快照保存了虚拟机在某个指定时间点的状态,当我们在自动化测试过程中遭遇问题或错误时,可以利用快照保存、并恢复到执行中的某个时间点。借助BackingFile机制,虚拟机支持形如以下的多层依赖的快照链。

base image <-- vm01 <-- snap 1 <-- snap 2 <-- vm02(active)

可使用以下命令,将处于快照链中的某个虚机,导出形成一个独立的磁盘映像文件,其不再依赖其它映像。

qemu-img convert -O qcow2 vm02.qcow2 vm-templ.img

假设我们在用户的工作目录中,建立了以下目录。

kvm        根目录
  iso       存放光盘镜像
  base      存放BackingFile
  share     存放共享磁盘镜像,用户存储测试工具、驱动等
  image     存放测试机的磁盘镜像 xml 存放导出的虚拟机XML配置文件

下面用一个例子,给大家介绍下快速创建测试虚拟机的方法。

  • 按照上一篇文章中的步骤,创建一个Win10虚拟机;
  • 在虚拟机中,安装好工作中用到的测试软件;
  • 使用以下命令,新建一个共享工具磁盘;
qemu-img create -f qcow2 -o cluster_size=2M kvm/share/tools.qcow2 10G
  • 挂载共享磁盘到虚拟机,复制工具和文件到该盘中;
  • 移除该虚拟机,确认对话框中,请选择不删除相关磁盘文件;
  • 移动原虚机主磁盘文件到基础镜像目录,如kvm/base/windows/win10/x64-pro-zh_cn.qcow2。
  • 执行以下命令,以上述基础镜像作为BackingFile,创建新的虚拟机磁盘;
qemu-img create -f qcow2 -o cluster_size=2M,backing_file=kvm/base/windows/win10/x64-pro-zh_cn.qcow2 kvm/image/test-win10-x64-pro-zh_cn-01.qcow2 40G
  • 图形界面中,新建测试虚拟机,挂在新建的虚拟机和共享磁盘。

除了使用图形界面的qemu-manager软件,这里也提供一种命令行的方法,大家可用于测试平台的代码中。

  • 导出虚拟机XML配置文件
virsh dumpxml test-win10-x64-pro-zh > kvm/xml/test-win10-x64-pro-zh.xml
  • 修改XML配置文件中的以下字段:
name
uuid
vcpu
memory和currentMemory
mac address
第1块disk的source file
  • 在第1块disk的Elemnt中,加入以下BackingFile有关的内容:
<backingStore type="file" index="2">
  <format type="qcow2"/>
  <source file="/home/aaron/kvm/base/windows/win10/x64-pro-zh_cn.qcow2"/>
<backingStore/>
  • 如需要用页面VNC访问虚拟机桌面,找到XML的graphics元素,修改成以下内容。

<graphics type="vnc" port="-1" autoport="yes" listen="0.0.0.0" passwd="P2ssw0rd">
  <listen type="address" address="0.0.0.0"/>
</graphics>
  • 使用以下命令定义虚拟机。

virsh define kvm/xml/test-win10-x64-pro-zh.xml
  • 使用以下命令启动虚拟机。

virsh start test-win10-x64-pro-zh
  • 使用以下命令获取虚拟机的VNC端口编号,在VNC软件中使用”5900+该数字“的端口,访问虚拟机远程桌面。

virsh vncdisplay test-win10-x64-pro-zh

本人已实现了基于libvirt接口的虚拟机管理有关代码,详情请参照网址https://github.com/easysoft/zagent


常用命令:

# 查看虚拟机信息
qemu-img info --backing-chain kvm/image/test-win10-x64-pro-zh_cn-01.qcow2
# 修改虚拟机磁盘大小
qemu-img resize x64-pro-zh_cn.qcow2 +10G
# 查看虚拟机里列表
virsh list --all
# 查看虚拟机VNC端口
virsh vncdisplay win10-test
# 导出虚拟机XML配置文件
virsh dumpxml win10-test > win10-test.xml
# 创建虚拟机磁盘镜像
qemu-img create -f qcow2 -o cluster_size=2M,backing_file=base.qcow2 win10-test.qcow2 40G
# 定义、取消定义,启动、停止虚拟机
virsh define win10-test.xml
virsh start win10-test
virsh destroy win10-test
virsh undefine win10-test


Q: 什么是KVM虚拟机的BackingFile?

A: BackingFile是一个只读的虚拟磁盘基础映像,可以在多个虚拟机间共享,帮助提高效率并节省磁盘成本。


Q: 如何在禅道中结合KVM虚拟机进行敏捷开发管理?

A: 使用KVM虚拟机可以创建和管理测试环境,禅道可用于项目管理和Bug跟踪,二者结合提升敏捷开发效率。


Q: 怎样通过命令行启动创建好的KVM测试虚拟机?

A: 使用命令`virsh start [虚拟机名称]`可以启动已经定义好的KVM测试虚拟机。

  • canned-phone-box-cable-funny-7bb4fc094223d4e4273774d2ac425723.jpg
评论列表
🌳
气势凌人的太阳2025-11-20 09:21:07回复
这个创建虚拟机的方法很详细,确实很实用。

推荐阅读

测试开发之网络篇-网络路由

本文展示了一个简化的办公网络,帮助你简单了解交换网络和路由网络不同的工作方式。
aaronchen2k 2021-05-25

测试开发之安全篇-使用禅道ZTF执行OWASP安全扫描

开放Web应用程序安全项目(OWASP,Open Web Application Security Project)是一个开源、非盈利、全球性的安全组织,致力于应用软件的安全性方面的研究。
陈琦 2023-05-29

测试开发之网络篇-常用命令

ipconfigWindows系统下,ipconfig加上/all参数,可查看本机的IP地址、掩码、默认网关、DHCP和DNS服务器等信息。Linux或mac系统下,请使用ifconfig命令代替。 C:\Users\admin>ipconfig /all Windows IP Configuration Ethernet adapter Ethernet0:   ...
aaronchen2k 2021-05-25

测试开发之前端篇-JavaScript脚本语言

由于是测试有关的文章,我们不会详细介绍JavaScript开发技术的方方面面,而是从软件测试的角度,给大家分享一下JavaScript(下称JS)的相关内容。 不同于PHP、JSP等传统Web技术,会在服务器端生成网页,现今流行的前后端分离架构下,大家浏览网站时看到的页面,是由下载到浏览器里的JS代码(包括脚本和编译成了JS形式的模板),在客户端的电脑中渲染而成的。以上是一个简化了的示意图,...
aaronchen2k 2021-10-19
返回顶部
客服头像
丁芝
高级客户经理
客服微信
17663906485
1481227768
统一服务热线 4006-8899-23
我要提问提问有任何问题,您都可以在这里提问。问题反馈反馈点击这里,让我们聆听您的建议与反馈。