用PowerShell和Hyper-V打造自动化测试环境

 
   | |

导读:本文介绍如何利用Hyper-V和PowerShell自动化构造测试环境。

关键词:Hyper-V PowerShell 测试环境

 
正在加载数据...

  Microsoft终于在2008年6月26日发布了自己的又一款虚拟化产品Hyper-V。在Windows 2008中同时作为功能之一发布的Powershell则是Microsoft的新一代命令行Shell和脚本语言。有了这两样产品,对于那些做自动化测试的人员来说可谓是两个重要的好消息。这里我主要想介绍一下如何利用Hyper-V和PowerShell自动化构造测试环境。在使用Virtual Server2005的岁月里,测试人员主要是通过编写Javascript脚本访问它的COM接口来控制虚拟机。而到了Hyper-V时代,我们可以通过Hyper-V WMI(Windows Management Instrumentation)来对虚拟机做想要的操作。

  试想一下我们有这样一个测试需求:

  1.整个测试环境有多台测试机
  2.每次在跑自动化测试用例之前都需要安装要测试的产品
  3.测试产品不断更新,且每次都必须在干净的环境下安装

  为了节省自动化过程的时间,在Hyper-V中,我们可以做多个虚拟机,在做一番基本的配置之后,对每个虚拟机抓一个快照,由此作为起点。下面介绍PowerShell脚本对这些虚拟机的操作,主要做两件事:

  1.让虚拟机回到一个干净的状态,也就是我们之前抓得那个快照的状态。
  2.启动虚拟机

  先介绍两个函数,其中主要是WaitImageToState其功能是等待一台虚拟机变换到指定的状态,比如Hyper-V中虚拟机Running的状态码是2,就等到其状态变为2,当然还得有一个超时的Timeout设置:

function GetImageState
{
 param
 (
  [string]$image = $(throw "param -image is required."),
  [string]$hostServer = $(throw "param -hostserver is required.")
 )
 $virtualMachines = Get-WmiObject -Class "MSVM_ComputerSystem" -Namespace "root\virtualization" -ComputerName $hostServer;
 foreach ($virtualMachine in $virtualMachines)
 {
  if ($image -ieq $virtualMachine.ElementName)
  {
   return $virtualMachine.EnabledState;
  }
 }
 throw "Cannot get the state of image [$image] on host server [$hostServer]";
}
function WaitImageToState
{
 param
 (
  [string]$image = $(throw "param -image is required."),
  [string]$hostServer = $(throw "param -hostserver is required."),
  [int]$state = $(throw "param -$state is required."),
  [int]$timeOut = $(throw "param -$timeOut is required.")
 )
 do
 {
  $timeOut = $timeOut - 5;
  sleep (5);
  $currentState = GetImageState -image:$image -hostserver:$hostServer;
  if ($currentState -eq $state)
  {
   return;
  }
 
  if ($timeOut -le 0)
  {
   throw "Wait for image [$image] to state [$state] time out.";
  } 
 }while($true);
}

  假设我们快照的名字叫Snapshot_StartPoint,托管机的名字叫ServerHasHyperVInstalled,下面的脚本可以恢复虚拟机到指定快照:

$snapshotName = "Snapshot_StartPoint";
$hostServer = "ServerHasHyperVInstalled";
$virtualMachines = Get-WmiObject -Class "MSVM_ComputerSystem" -Namespace "root\virtualization" -ComputerName $hostServer;
$virtualSystemService = Get-WmiObject -Class "Msvm_VirtualSystemManagementService" -Namespace "root\virtualization" -ComputerName $hostServer;
foreach ($virtualMachine in $virtualMachines)
{  
 if($virtualMachine.Caption -like "*Virtual Machine*")
 {
  # get snapshot of the virtual machine
  $queryStr = "SELECT * FROM Msvm_VirtualSystemSettingData WHERE SystemName='" + $virtualMachine.Name + "' and SettingType=5";
  $snapShots = Get-WmiObject -Query $queryStr -Namespace "root\virtualization" -ComputerName $hostServer;
  foreach ($aSnapShot in $snapShots)
  {
   # revert to specified snapshot
   if ($aSnapShot.ElementName -ieq $snapshotName)
   {
    # apply snapshot
    $result = $virtualSystemService.ApplyVirtualSystemSnapShot($virtualMachine.__PATH, $aSnapShot.__PATH);
    if ($result.ReturnValue -ne 0)
    {
     throw "Failed to apply snapshot ["+$snapshotName+"] to VM ["+$image+"]";
    }      
    WaitImageToState -image:$image -hostserver:$hostServer -state:3 -timeOut:120;
    Write-Host "Finished applying snapshot [$snapshotName] to VM [$image]";
   }
  }
 }
}

  下面的代码是启动这些虚拟机:

$hostServer = "ServerHasHyperVInstalled";
$virtualMachines = Get-WmiObject -Class "MSVM_ComputerSystem" -Namespace "root\virtualization" -ComputerName $hostServer;
foreach ($virtualMachine in $virtualMachines)
{
 if($virtualMachine.Caption -like "*Virtual Machine*")
 {
  $result = $virtualMachine.RequestStateChange(2);
  if ($result.ReturnValue -ne 4096)
  {
   throw "Failed to send start request to VM - " + $virtualMachine;
  } 
  WaitImageToState -image:$virtualMachine -hostserver:$hostServer -state:$virtualMachineRun -timeOut:60;
 }
}


Windows PowerShell
 为什么Windows PowerShell是独一无二的?
 分享Windows管理员常用的25个PowerShell命令
 Windows Server 2008 R2中PowerShell介绍
 Windows Server 2008的PowerShell自动化
 如何使用Windows PowerShell管理远程桌面设备?
 如何在Hyper-V里使用PowerShell或VBScript脚本?
 VMware ESX教程之PowerShell脚本:实例分析
 VMware ESX教程之PowerShell脚本:如何使用PowerGUI?(下)
 VMware ESX教程之PowerShell脚本:如何使用PowerGUI?(上)
 VMware ESX教程之PowerShell脚本:安装和使用PowerShell工具
 用PowerShell和Hyper-V打造自动化测试环境
 使用Windows PowerShell实现常见网络命令
 Windows PowerShell中12项酷功能

原文出处:http://blog.ixpub.net/html/83/15069983-270558.html
 
来源:IT168    作者:WS2008:虚拟化    
 
 
 
 
 

新兴虚拟化平台

 
在4月22日,VMware发布了vSphere。VMware vSphere提供哪些版本?在许可方面的改动有哪些?本文将一一为您解答。
 
尽管vSphere的vCenter提供了许多有用的新功能,但是有三个小功能,尤其对于VMware Infrastructure 3来说最需要的……
 
VMware ESX的下一版本只能运行在64位CPU上。因此你可能疑惑你目前的硬件是否是64位CPU,以便你能升级到vSphere。
 
北京时间4月20日晚间,Oracle(甲骨文)宣布以74亿美元收购Sun。不过Oracle收购Sun所产生的影响真正体现在虚拟化市场,由于是对VMware来说。
 
如何创建一台基于Linux内核的虚拟机或者KVM?如何安装Windows和Ubuntu作为KVM虚拟环境里的虚拟操作系统?

热门技术手册排行

 

VMware ESXi是VMware的嵌入式hypervisor。ESXi没有服务控制台,可以说是一个精简版的ESX。对于由于成本和硬件还没有开始实施虚拟化的组织来说,使用免费的VMware ESXi hypervisor不失为着手虚拟化的好方式。在本次虚拟化技术专题中,我们TechTarget中国的虚拟化专家将详细讲解VMware ESXi的安装、配置、管理、迁移等实用技术。

 

什么是VMware vSphere?它主要有哪些新功能?如果升级到vSphere,硬件要求是什么?如何创建VMware vSphere子操作系统?如何确保VMware vSphere的安全?VMware vSphere的亮点究竟在哪里?2009年4月21日,VMware公司宣布推出新一代虚拟化平台VMware vSphere。这是VMware继三年前发布VMware ESX之后的又一重大举措。在本期技术手册中,我们将详细介绍VMware vSphere,从下面几个方面进行探讨……

 

windows server 2008 r2是windows server的最新版本,如今已经交付使用。如微软hyper-v这样的虚拟化功能受到了许多关注。在这一期服务器技术手册中,我们将主要介绍windows server 2008 r2的新功能,分析其中比较重要的功能,以及提供一些实施技巧供大家参考。

 

IT预算是IT管理员的一个烦恼。不过在如今全球经济危机下,相对于减少IT预算和和裁员,更值得考虑使用免费的虚拟化管理工具。在整个2008年,许多公司发布了关于VMware ESX和VMware Infrastructure套件的新应用,包括几个免费的VMware工具。这些工具是免费的,但并不意味着它们竞争不过付费产品。本应用手册将介绍2008十大免费VMware工具。

 

在之前的专题“Hyper-V指南”中,我们探讨了Hyper-V的虚拟架构、系统要求及与其他产品之间的竞争。在本管理手册中,我们将具体描述如何备份与迁移Hyper-V、如何使用PerfMon计数器以及如何进行性能优化与灾难恢复等等技巧。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
登录Email
请输入您的登录Email
密码
下次自动登录