APP下载

基于VMware vSphere的分布式协同软件测试平台构建*

2019-11-22董宗然

沈阳工业大学学报 2019年6期
关键词:测试环境脚本软件测试

赵 爽,董宗然

(1.沈阳体育学院 管理与新闻传播学院,沈阳 110102;2.大连外国语大学 软件学院,辽宁 大连 116001)

vSphere是VMware公司开发的新一代基于服务器模式的虚拟化解决方案,为实现和管理大规模的虚拟机架构提供了一个完美平台,利用云操作系统和虚拟数据中心,IT人员可以有效地根据负载需求分配计算资源[1].

在软件开发过程中,基于自动化测试平台可以极大地提高软件测试效率,因此构建自动化测试平台是软件企业基础设施建设的重要组成部分[2].蔡建平[3]、许文瑛[4]、申德玮[5]等着眼于开发具有协同软件测试功能的管理系统,用于解决多个不同软件技术模块协同测试的问题,实现了对软件测试的全程跟踪和实时管理.周梦瑶[6]、王丹[7]等则着眼于利用虚拟机技术构建自动化测试或监控环境,用于解决在软件系统进行网络测试时,搭建真实运行环境所遇到的造价高、耗时长、维护困难等问题.但在实施过程中发现,搭建单一机器或搭建多机器互连但机器间无协作关系的自动化测试环境较易实现,但对于构建多机器互连且需要多机之间具有协同配合能力的自动化测试环境具有一定难度[8].在工业自动化领域,大量用户应用场景基于分布式计算环境,而且用户量大,对软件功能使用全面且复杂,所以要求软件测试平台能够尽可能满足对用户真实使用情形的模拟[9],因此,本文提出一种基于VMware vSphere构建分布式协同软件测试平台的新方法.

1 测试平台技术选型及架构设计

1.1 关键技术选型

vSphere通过虚拟服务器(Server)对虚拟环境进行管理,在虚拟环境中,通过管理程序根据需要创建虚拟客户端(Client),并对每个Client虚拟机进行系统安装和分布式管理.本文分布式拓扑结构由多台网络互连的虚拟机构成,而对虚拟机间的协同监控能力则主要由部署在虚拟机上的软件设施实现.实现软件测试自动化的技术和工具有很多种[10],用户可以根据软件的运行平台、待测软件的属性和类型以及软件测试需求等进行选择.而对软件测试过程中,需要多机协同配合进行测试,现有自动化工具无法满足需求,协同软件测试平台的提出正是为了解决此类难题.

首先要将平台软件和待测软件部署到测试平台的虚拟机上,在测试执行过程中,通过调用测试平台中的方法对指定虚拟机进行控制和状态查询,控制操作包括:上电开机、断电关机、重启、系统关机、挂起、插入网线等;状态查询包括查询指定机器的开关机状态、网络连接状态、服务程序运行状态、脚本执行状态等.

为了实现对vSphere虚拟机环境的自动化监控,调研了4种实现协同测试平台的潜在技术方案:

1)基于Python定制程序实现.Python是当前流行的程序设计语言,具有丰富和强大的库[11],该方案需在各虚拟机上部署定制好的Python程序,通过Python程序完成对虚拟机的控制、查询和协同通信.

2)基于自动化工具操作vSphere UI实现.通过自动化工具抓取vSphere图形界面的UI元素,再基于抓取的控件对象,编写自动化脚本操作虚拟机.

3)基于Jenkins任务实现.Jenkins可用于监控外部调用执行的工作,将虚拟机操作设计成Jenkins任务,在测试中调用相应任务操作虚拟机或执行自动化脚本[12].

4)基于PowerShell定制程序实现.通过VMware官方提供的Windows PowerShell接口PowerCLI实现,用于对vSphere各方面进行自动化管理,相比采用GUI方式操作虚拟机更为稳定.

表1对上述方案的主要优缺点进行了对比.

表1 不同技术方案对比Tab.1 Comparison of different technical solutions

本文测试平台的工况需求主要包括:能够基于vSphere虚拟机平台对目标虚拟机进行完整管控,要求能够覆盖测试虚拟机的各种操作,方案1)最满足该项需求;测试平台配置需要灵活、稳定、易扩展,测试人员能够通过修改平台配置适应新需求,方案1)和4)满足该项需求;平台搭建最好具有较低的前期开发和后期维护成本,方案3)和4)是较好方案;此外,测试平台还需要对内部认证信息进行保护,并且易于与当前已有工具进行集成.综合考虑目标平台的使用工况和各方案的适用场景,协同软件测试平台的关键技术选型确定为PowerShell &PowerCLI.

1.2 测试平台架构设计

测试平台基础架构设计如图1所示,其拓扑中包括网络互连的一个vSphere Server,若干个vSphere Client,一个Jenkins Server,一个或多个资源服务器(可选).其中,vSphere Server是基于vSphere构建测试平台的控制中心,对集群内各虚拟机的管理需要向它发送命令来完成;vSphere Client是部署测试环境和测试平台定制程序的虚拟机,测试用例要求安装的待测软件产品和脚本执行要求的自动化测试环境可根据需要部署到相同或不同的Client虚拟机上.负责协同控制的测试平台程序也要部署到Client虚拟机上,包含部署在一个Client上的Master程序和部署到若干个Client上的Slave程序.Jenkins Server负责测试用例所要求自动化测试环境的部署以及测试用例主流程的控制;资源服务器负责提供部署测试环境所需要的软件安装包、工具安装包和自动化脚本等代码.

图1 测试平台架构Fig.1 Infrastructure of testing platform

2 测试平台关键技术分析

2.1 用户敏感信息保护

自动化测试平台的使用对象是公司内部测试团队,并非公司外部的产品用户,其安全性风险主要体现在高权限账户信息的泄露上,这些信息如果以明文方式被脚本使用,则会产生不必要的风险.

在基于vSphere操控虚拟机的过程中,需要验证身份的地方包括两处,一处是连接vSphere Server,无论通过图形界面登录还是命令行登录,都需要进行vSphere用户认证;另一处是Master程序执行PowerCLI命令远程访问Client虚拟机时,需要提供当前机器和目标机器的操作系统用户认证.登录信息属于用户敏感信息,在安全级别较高的环境中,不能以明文显示、存储和传输[13].PowerCLI命令支持通过证书方式连接vSphere Server和执行远程命令,证书认证可以更好地保护用户敏感信息,在部署阶段输入密码生成加密证书,程序中根据证书和用户名创建内部证书对象,在后续命令中使用证书对象验证,获取程序如下:

read-host-assecurestring |convertfrom-securestring| out-file “path_of_credential_file” (创建证书)

$password=get-content “path_of_credential_file”| convertto-securestring (读取证书、获取密文密码)

$credential=new-object-typename

System.Management.Automation.PSCredential-argumentlist $username,$password (创建证书内部对象)

$server=connect-viserver $ip-credential $credential-port $port (证书连接)

其中,path_of_credential_file为存储密码的证书文件,$username、$ip、$port分别为vSphere用户名、服务器ip地址和端口号.

2.2 Master程序设计

Master程序主要由PowerShell脚本、CMD/BAT脚本以及一个方便用户使用的图形化接口工具构成.PowerShell &PowerCLI脚本程序用于执行对部署Slave程序的Client虚拟机的控制和查询,实现主要功能包括:开机、断电关机、重启、物理连接/断开网络设备、拷贝文件到远程机器、执行远程机器脚本等.Windows系统出于安全考虑,限制PowerShell脚本直接运行,自动化测试为了避开这种限制而又不修改脚本执行权限,通常通过BAT/CMD脚本封装PowerShell脚本.

在BAT/CMD脚本被调用时,内部启动Power-Shell解释器,执行PowerShell脚本,并将传给BAT/CMD的命令参数转发给PowerShell脚本.PowerCLI脚本程序提供了操控vSphere虚拟机的能力,但测试用例中的协同控制逻辑需要借助自动化脚本实现,当自动化脚本需要操作或查询虚拟机时,则调用BAT/CMD封装的PowerCLI程序.自动化脚本调用命令在大多数情况下也很方便,但为了给自动化测试用户、手动测试用户以及虚拟机管理用户提供更好的体验和灵活性,本文开发了一个图形化接口工具,对命令参数及工具的配置可通过配置文件读入,虚拟机操作和结果查看通过图形界面直观完成.图2给出了Master程序的工作流.

图2 Master程序工作流Fig.2 Workflow of Master program

2.3 Slave程序设计

Slave程序负责完成对部署它的Client机器的本地操作,主要由CMD/BAT脚本、PowerShell &PowerCLI脚本以及其它类型程序构成.Slave程序用来执行特定任务,可由Master程序使用Invoke-VMScript命令远程启动,方法如下:

Invoke-vmscript-scripttext “path_of_script_file”

-vm $client-hostcredential $host_cred

-guestcredential $guest_cred

-scripttype Bat-ErrorAction Stop

其中,path_of_script_file为Slave中的脚本程序,$client为部署Slave的虚拟机,$host_cred为当前机器系统用户证书对象,$guest_cred为远程机器系统用户证书对象.

在本文协同测试平台中,Slave程序可以执行的功能包括:使能或禁用NIC网卡,查询Client机器上的dump文件生成情况以及查询特定服务运行状态等.需要指出,在系统中使能或禁用网卡与物理上连接或断开网络设备虽然都能达到控制网络连接的效果,但在软件测试中并非等效的环境设置,因为软件程序对不同情况下断网的处理逻辑很可能不同,同样物理断电关机和系统关机在测试中也不是等效操作,所以本文测试平台要求全面覆盖不同用例情况.

2.4 自动化环境部署

为了提高测试效率,协同测试环境的部署需要自动完成.Jenkins是一个强大的基于开源项目的应用平台,具有功能丰富的插件可供扩展,支持项目的持续集成和交付,广泛应用于软件公司的CI(continuous integration)系统中[14].选择一台性能稳定的机器安装Jenkins服务器,在被Jenkins管理的虚拟机上部署Jenkins客户端,通过Jenkins的Web管理接口在服务器中创建各类任务(Job),用于完成对虚拟机的管理、软件安装以及脚本运行等.本文基于Jenkins部署协同测试环境的流程如图3所示,图3中流程对应完成相应功能的Jenkins任务.

图3 Jenkins任务工作流Fig.3 Workflow of Jenkins task

3 实验及结果讨论

3.1 测试环境搭建

本文主要测试FactoryTalk®View Site Edition (SE)10.0软件的冗余功能.SE软件是分布式人机交互接口(HMI)平台,用于实现对工业生产过程的自动监控,对系统可靠性和鲁棒性要求很高.冗余功能支持对HMI服务器、数据服务器、报警服务器的冗余配置,在Primary Server出现故障的情况下,自动切换到Secondary Server,同时也支持Secondary到Primary的反向切换.本文构建了冗余功能的自动化测试平台,测试环境部署如表2所示.

表2 测试环境配置Tab.2 Configuration of testing environment

3.2 测试效果

冗余功能是SE产品的重要功能之一,在测试中需要构建各种让在线Server失去通信而自动切换到备份Server的用例情形.测试用例除了要验证无故障情况下各种功能正常外,还要验证在物理开关机、系统开关机、系统重启、系统内使能/禁用网卡、物理连接/断开网络等情况下冗余功能是否可按预期工作.在以往没有协同测试环境支持的情况下,主要依靠测试人员直接操作和查看状态,代价大、效率低.本文提出的协同测试平台可以自动测试脚本,实现了冗余功能人工测试的等价模拟.自动测试脚本调用Master图形工具监控虚拟机的接口执行效果图如图4所示.

图4 接口程序执行效果Fig.4 Execution results of interface program

表3给出了SE软件冗余功能手动测试和自动测试的耗时情况对比.考虑到测试过程会受偶然因素影响,为减小测试误差,每种测试情形各执行5次,表3中数据为5次执行时间的平均值.Primary表示主HMI服务器虚拟机,Secondary表示备用HMI服务器虚拟机,每种测试情形下需要执行的用户操作类似,需要检查的验证点基本相同(包括查看系统功能执行情况,以及各服务器的工作和在网状态).

表3 冗余功能手动测试与自动测试耗时对比Tab.3 Comparison of time consumption between manual and automatic tests for redundancy function s

自动测试在界面操作速度和结果验证速度方面快于手动测试,但为了保证软件运行稳定,自动测试往往会在一些步骤之后加入较长的延时等待,以确保关键步骤执行完毕后可继续往下执行,所以在耗时方面自动化测试相比手动测试不一定占优.本文对实验平台自动化测试脚本进行了优化,尽可能采用判断目标出现或消失的方法取代等时操作,所以时间成本降低约13%,本文方案在测试耗时方面可被接受.自动测试的最大优势是可以选定在非工作时段执行,而不受人力分配影响,也解决了人工测试固有的体能问题.

4 结 论

针对复杂分布式软件系统在自动化测试中需要解决多机器协同配合的问题,提出了一种基于vSphere虚拟化平台的、多种技术方案融合的新型解决方法.分别从技术选型、平台体系结构设计、关键技术分析等方面进行了论述,并以FactoryTalk View SE的冗余功能作为测试实例验证了所提方法的可行性和有效性,使原本只能手工执行的测试用例实现了自动化,提升了软件生产效率.此外,所设计的图形化操作接口程序,不仅可被自动化脚本调用,也可为手动测试人员操控虚拟机带来方便,提升人工测试效率.未来研究可根据测试需求,开发出功能更丰富的Slave程序和Master程序组件,灵活实现对协同测试平台的功能扩展.

猜你喜欢

测试环境脚本软件测试
酒驾
全数字仿真测试环境在航天软件测试中的应用研究
安奇奇与小cool 龙(第二回)
基于OBE的软件测试课程教学改革探索
航天软件测试模型构建与应用
雷达航迹处理测试环境构建方法研究
网络设备自动化测试设计与实现
EXCEL和VBA实现软件测试记录管理
快乐假期
小编的新年愿望