李菲,杨君,曹阳,顾问
(三江学院计算机科学与工程学院,南京 210012)
云计算以虚拟化、面向服务的计算和网格计算等成熟技术为基础,以大规模资源共享为目标,采用数量较多的高性能PC或小型服务器等较为便宜的硬件构建分布式服务器集群,提供可用性、可伸缩性都很强的计算服务[1]。客户端根据自身需要,通过浏览器等标准程序访问发布在互联网之上、以服务形式提供的计算能力、软件、存储服务、中间件平台等。云计算的服务方式包括基础设施即服务IaaS、平台即服务PaaS、软件即服务SaaS三类典型的服务方式。
云测试是基于云计算的一种测试方案,有效利用云计算环境资源对其他软件进行测试。一般分为两种:一是利用云端服务器中的测试软件进行测试,使用者通过远程桌面链接到服务器内的虚拟机,直接打开虚拟机内的测试软件和Web浏览器来测试本机或公网上的Web软件;二是利用云端的服务器的环境系统,用于兼容性或国际化测试,例如服务提供商提供手机测试平台,对手机App进行各类操作系统、硬件的兼容测试。这些云测试平台的优点是平台和浏览器覆盖很广,用户按需付费。但商用云测试平台的缺陷也较明显:
(1)云平台的安全性,基于信息安全的考虑,企业产品只会在本地私有云中进行测试,商用云测试平台无法满足要求;
(2)测试中出现的故障,使用商用云平台无法调试,测试中出现的错误可能是测试脚本的错误,也可能是被测系统SUT的错误,不能较好地区分;
(3)基于UI的自动化测试通常会有不稳定的情况,本地编辑好的自动化脚本可能问题较多,无法在商用云平台上正常运行;
(4)商用云测试平台只能做一些共性的测试,针对小型产品特点灵活定制的工作较少,或收费昂贵。敏捷开发要求快速响应,持续集成、持续测试这些关键开发手段必须在云测试平台中体现。
基于上述的问题,应根据产品实际特点选择云测试平台,尽管商用云测试平台兼容性强、覆盖广泛,可以覆盖所有的浏览器和平台,但互联网的公司产品发布较快,实际根据帕累托80/20原则,在各产品测试中只需要覆盖主流浏览器、平台。
随着敏捷实践被越来越多地采用,在每次迭代中重新执行手动测试成为了一种不可持续的模式。没有足够的时间,无法增加更多人力执行手动测试。自动化测试则是相对手动测试而存在的一个概念,通过各类测试工具、测试套件、测试脚本,部署测试环境,具有良好的可操作性、可重复性和高效率等特点,是软件测试不可分割的一部分[2]。测试自动化主要应用在性能测试、兼容性测试、回归测试等方面,贯穿在整个软件测试阶段。云计算环境下的软件测试自动化过程包括:根据测试需求制定测试计划,设计测试脚本;根据云资源部署自动化测试环境并执行测试;分析得到的测试报告并反馈给相关人员。
在性能测试中,测试环境配置要求较高,测试人员在测试前需要花费较长时间搭建一个性能环境,且无法固化测试环境,测试结束后环境即被拆除,下一轮测试前又要重新搭建,因此能快速提供性能测试环境就显得非常重要。借助云资源自动化创建和配置测试环境,可以将测试准备工作从几小时或几天缩短至几分钟,也减少了由于测试环境问题、错误地安装依赖软件,以及其他引入问题的手动流程所导致的虚假错误数量。
在兼容性测试中,测试重点在功能兼容和软件兼容,被测软件与操作系统、Web浏览器或其他操作环境应保持兼容,遵守软件之间的标准和规范,与其他平台进行交互共享信息。兼容性测试需要使用多套测试环境,基于云的自动化测试,可使用云资源迅速搭建多套测试环境,使测试不受限于物理资源的束缚。
基于上述商用云测试平台的优缺点,以及云测试自动化的考虑,可以设计一个云测试平台,它是云计算技术提供测试服务提供的载体,测试提供者将可调用的测试资源部署在服务器上,并向用户提供调用接口,用户通过云测试平台的前端创建测试项目,完成测试计划管理、测试脚本上传、测试用例执行和测试结果展现[3]。云测试平台底层采用虚拟机技术,通过整合物理资源形成虚拟资源池,实现对资源池中虚拟资源的动态调度,在保证资源均衡优化的基础上,测试平台提供给测试人员完成回归测试、性能测试、兼容性测试的自动化工作,同时引入持续测试的思想,利用计划编排工具有效调度测试任务,完成测试工作。
设计的云测试平台共分为5个部分,分别由物理设备、虚拟资源池、云资源管理节点、云测试前台服务器、用户Web操作组成。其中前三者属于IaaS层,提供计算和存储资源管理虚拟云测试服务器;后两者属于PaaS层,使用IaaS资源,面向云测试用户。云测试平台架构如图1所示。
图1 体系结构图
云测试平台的硬件使用两台x86架构的PC Server组成,成本较低,后续随业务发展而动态扩展资源[4]。一台服务器配置做为控制节点,标记为node1,另外一台做计算节点,标记为node2。服务器硬件配置CPU为Intel Xeon,内存16GB,硬盘1TB(可扩展为RAID磁盘),网卡为千兆双网卡。云测试平台配置云计算管理平台、虚拟机、操作系统分别采用OpenStack Essex、KVM 1.0、CentOS 7.2。
基于回归测试、性能测试和兼容性测试的需要,云测试平台采用开源工具。Selenium是目前主流的Web自动化测试工具,可用于功能测试和系统兼容性测试,Selenium IDE可自动录制测试步骤,Selenium Grid支持在多台机器上并行执行测试,测试用例能够同时在多种操作系统的多种浏览器上执行,其中一台主机(Hub)控制测试用例在其他不同主机(Node)不同浏览器下运行[5]。JMeter是开源的性能测试工具代表,可模拟大量并发负载来进行强度测试,分布式环境下的JMeter性能测试会选择一台主机(Controller)控制其他主机(Agent)执行测试脚本。出于上述测试自动化调度需要,本系统采用Jenkins持续集成工具,提供持续、自动的构建及测试软件项目,监控定时执行的任务[6]。
PaaS层的前台服务器使用Struts2和Hibernate框架,采用 Java JDK 1.7、MySQL 6.0、Tomcat 7。前台服务器调用OpenStack的API接口获取IaaS层的消息和运行状态,用户通过Web界面进行开启、关闭虚拟测试服务器等操作实际都是调用API。
云测试平台按功能划分为前台服务器和后台云管理平台,前台服务器提供Web交互界面,测试人员在该界面管理测试脚本、操作测试流程,查看测试结果;后台管理平台调度虚拟机、运行测试脚本、反馈测试报告。
前台服务器的主要功能包括账户管理(注册、登录、注销、修改密码)、测试项目管理(创建测试项目、查询测试项目、删除测试项目)、测试脚本管理(添加测试脚本、删除测试脚本、保存测试脚本、查询测试脚本)、测试结果管理(测试结果查询、测试结果下载)。
后台管理平台将虚拟机分为测试控制机和测试执行机两类角色,控制机用于对测试流程的管理,执行机用于执行测试脚本,由多个虚拟化测试环境组成。自动化测试任务通过Jenkins调度自动进行,因此需要在控制机上安装Jenkins并集成Selenium Grid、JMeter插件,部署 Selenium Hub、JMeter Controller节点;测试执行机上则需要部署Selenium Node和JMeter Agent。当Jenkins中创建的计划任务被触发,后台管理平台上的测试控制机和测试执行机开始工作,协作完成测试任务。
用户根据测试计划和测试场景创建Jenkins相关测试任务,在Web界面创建虚拟机,部署性能测试、回归测试、兼容性测试等测试环境,编写调试测试脚本并上传,后台管理平台处于测试准备就绪阶段,前后台消息交互的时序图如图2所示。
后台测试控制机上设定的Jenkins Job定时时间到达,控制机将测试脚本分发到测试执行机上,如果是性能测试任务,则在测试控制机上运行JMeter Controller节点,通过命令行远程开启测试执行机上的JMeter Agent,进行分布式测试;如果是Web功能测试或兼容性测试,则在控制机上运行Selenium Hub,通过Hub节点下发操作命令给执行机上的Selenium Node节点,执行Selenium脚本进行测试;测试执行机完成测试后将结果返回给测试控制机,再由控制机传递给前台服务器输出给用户。
图2 前后台消息交互时序图
基于以上的流程,在实际Web项目测试中,使用这个云测试平台,可在Jenkins上创建多个性能测试任务、兼容性测试任务、回归测试任务,任务从晚间开始自动执行,测试人员第二天上班从Jenkins上查看测试报告,软件测试流程无人看守,实现了自动测试。
本文研究了基于云计算的软件测试自动化技术,借助OpenStack云计算管理平台和Web服务,采用任务调度工具Jenkins、开源测试工具Selenium和JMeter设计了一个自动化测试平台,能自动化完成测试环境部署、测试脚本执行和测试结果输出,无需人工干预,从而提高开发和测试效率。但从持续集成方面看,还有一些工作未完善,例如可以结合Maven的版本编译和部署功能完成自动化构建、自动化编译和自动化测试,实现基于云计算环境的研发版本持续集成和持续改进;测试平台输出的Selenium、JMeter测试报告可以更规范更具体,形成邮件自动发送,供测试人员查看。