Freigeben über


虚拟化技术在软件测试的应用

1)什么是虚拟化

虚拟化技术很早就提出来了,但是真正走向市场是从2005年以后,那时候AMD和Intel公司都开始推出支持虚拟化技术的CPU。简单的说,虚拟机就像一个软件容器,可以安装操作系统和应用软件,像一台物理机一样运行,其有如下特点。

  • 操作系统和软件无法辨别其主机是否是虚拟机。
  • 多台虚拟机器像应用程序一样可以运行在主机上

2) 虚拟化技术的优势

2.1) 提高硬件的利用率

      根据调查数据,通常测试实验室的硬件的使用率是很低的,平均只有10%,通过虚拟化技术可以使利用率提高到80%。

diagram_datacenterexpense

* IDC 的数据中心趋势调查,2007 年。

 2.2) 低碳生活
降低数据中心的成本(省电/空间),能源成本降低 80%。大部分机器5-15%时间处于使用状态,而空闲状态耗电量为满负荷60%以上。

 2.3) 高管理性

通过虚拟化技术,计算机的管理(虚拟机)的管理变得更加简单,创建、修改一个计算机的操作可以瞬间内完成。这种高管理型有助于推动基础设施服务化(Infrastructure as Service)的发展。目前,有很多云计算的基础设施都是大规模使用了虚拟技术。

SaaS%20PaaS%20and%20IaaS_2

大家可能对SaaS都比较熟悉,这里我解释一下IaaS和PaaS。
基础设施作为服务(IaaS):计算机资源通过服务的方式提供出来,包括处理能力,存储和网络能力等等。

平台作为服务(PaaS):平台和工具能通过平台或API方式提供出来,提供更加高层次服务,例如数据库存储服务,J2EE服务,.NET平台等。

3. 虚拟化给软件测试带来的好处

通过虚拟化技术,软件测试可以获得很多好处,以下就是一些例子;

3.1)测试实验室(Test Lab)的建立

  • 空间
  • 时间
  • 电力

image

如图所示的一个例子:168 台式机,被12个服务器主机代替。省空间,省电,方便管理,大大降低了测试实验室建设的成本。

大部分的测试环境对测试机器的性能要求都不是很高(性能测试除外),那么对于这种情况,虚拟机是非常适合的解决方案。虚拟机可以用于测试实验室(Test Lab)的构建,支持自动化测试,也可以为远程的测试和开发人员提供机器服务。

举例来说,一个网站的测试,需要10个手工测试人员进行,那么我们可以创建10个虚拟计算机,那么只需要1-2个主机就行了,并且支持远程工作,那么这些手工测试人员可以在家里进行工作。

3.2) 软件快速部署和连续集成

虚拟机的管理是非常方便,这大大促进了快速部署(Fast Deployment)和连续集成(Continual Integration)。举例来说,在连续集成的时候,往往需要大量机器,并且快速恢复到某个系统的初始状态。虚拟化技术的高管理性能够很好满足这些需求,同时成本比物理机器要低很多。

3.3)测试用例失败后的调查
在测试用例失败后,通过保存机器状态,可以方便问题的调查。如果使用物理机器,这些机器就需要被占用,一直到问题调查完毕。而且,调查的状态具有不可恢复性。如果使用虚拟化技术,计算机状态可以被保持到到文件;在需要调查问题时,随时可以把虚拟机文件恢复到虚拟机进行调查;同时机器的状态可以随时保存,随时恢复,这给一些不容易重现的问题提供了有利的调查方法。

3.4)虚拟硬件的使用
虚拟化不仅仅可以模拟软件,也可以模拟硬件,包括网卡,光驱,USB接口等等。特别是USB接口的虚拟化,使得在很多USB设备驱动的测试提供了便利。另外一个例子是虚拟光驱,Vista开发出来后,安装以前的方法要制作DVD光盘来进行最后的验证。按照传统的做法,需要180张DVD光盘,需要花2个星期。而使用虚拟化解决方案,制作ISO 映像,只需要2天时间。

image

4 虚拟化过程中一些好的实践

4.1 仔细设计网络拓扑结构
  对于一些对网络特别要求的实验室,需要仔细设计网络Top结构,特别是IP地址的数量

4.2 选购主机,注意扩展性
主机的选购需要考虑内存的扩展能力,内存大小很容易成为增加虚拟机的一个瓶颈。当机器映像很多的时候,磁盘空间也容易出现紧张。网络速度也是需要考虑。

4.3) 仔细考虑一些特殊需求的测试
a) USB/驱动 b) 3D效果  c)能源管理 d)性能测试结果的分析应该考虑到虚拟的使用的范围和局限性。

4.4) 自动保持闲置的虚拟机
实验室中有长期不用的虚拟机,可以定时自动保存起来,需要时以后可以再恢复。这样可以提高系统的效率,降低能耗。保存和恢复机器都是需要时间的,其性能和网络的存储位置有很大关系。

总结,虚拟化作为一个重要的技术,不仅仅可以节省成本,而且可以帮助我们保护蓝天,何乐而不为呢?