基于虚拟化容器技术的自动编译测试方法研究

2020-12-25 11:29李建佳石欣漾
中国新技术新产品 2020年19期
关键词:自动测试分支虚拟化

董 昕 梁 艳 李建佳 石欣漾

(成都工业学院计算机工程学院,四川 成都 611730)

0 引言

较大规模和较高复杂度使软件开发、测试及运营维护变得更加困难,严重制约了软件研发效率提升及软件产业的进一步发展具体问题有4类。1)代码提交结果较长时间不可见。2)分析构建失败耗时较多。3)开发及测试的脱节。4)管理层与开发、测试的脱节。

为了解决上述问题,笔者提出一种基于虚拟化容器技术的自动编译测试新方法。该方法在持续集成的环境基础上构建软件全生命周期自动化环境,实现适合大规模软件安装部署的容器技术,并向团队提供测试框架、大数据分析解决方案及基于云的可视化质量管理平台。

1 关键技术

该文提出一种自动编译测试新方法,在持续集成的环境(例如基于Jenkins 或TFS完成全过程的自动调度)的基础上构建软件全生命周期自动化环境(例如基于容器技术平台Kubernetes),向团队提供适合大规模软件安装部署的容器技术、统一的测试自动化框架、大数据分析的解决方案及基于云平台的质量管理平台,使整个软件生命周期软件质量状态(例如质量仪表盘Quality Dashboard)能够一目了然。

1.1 自动编译测试技术

笔者基于自动化原理,首先明确具体自动化的目标,然后制定策略、确定方案、采用技术及工具,提高效率。自动化过程可使开发人员更关心软件的逻辑而不用与复杂的配置打交道。自动化也是提高可测试性、一致性、稳定性、部署频率和达到持续交付核心[1]。经调查,软件企业对自动构建、自动部署、自动监控以及自动测试等方面关注度较高。

自动化是自动编译测试首先要完成的工作,也是效率提升最直接的抓手,需要重点关注构建、测试的自动化[2]。以构建自动化为例,实现自动化的大致步骤如下。构建工具和架构成型→开发人员能方便轻易使用→实现快速构建成功→失败构建逐渐减少→人工构建工作减少→减员增效。

1.2 虚拟容器技术

基于虚拟化的容器技术,能够有效减少大规模软件安装、部署、配置及升级等引入的大量重复性工作。容器是轻量级的虚拟化组件,以隔离的方式运行应用负载。它们运行自己的进程、文件系统和网络栈,这些资源都是由运行在硬件上的操作系统所虚拟化出来的。容器为开发、测试团队提供一致的环境,避免因为环境不统一产生的缺陷误报。开发人员可以很容易的通过容器镜像复现测试人员和客户报来的缺陷[3]。利用容器还可以避免环境污染和批量快速地启动多个测试环境并行测试来提高测试效率。容器能够用新颖的方式验证软件安装。通过自动化解决方案,同时配合容器技术,打通开发、测试团队间的无形壁垒。

2 新方法的实施方案

2.1 新方法技术架构

该文实验的被测体基于网络的应用程序及移动端app。采用的技术架构基于Jenkins为核心搭建,如图1所示。日常工作中访问的Jenkins网站是运行在Master主节点上,当一个项目Job被(自动或手动)触发后,Master主节点根据项目Job的配置实现对项目job的分配调度。该架构利用云与虚拟化技术可同时支持多个被测体的回归测试及升级—回滚测试,并利用虚拟化技术支持多个被测体的冒烟测试[4]。

2.2 自动化技术应用

以自动化构建为例,编译测试构建系统可以实现自动化开发及构建,减少编译时间,增加每天的集成次数和编译次数,创建一个稳定的可以随时发布的应用程序代码库,实现自动化集成并且自动回滚有缺陷的代码[5]。新方法通过Jenkins上运行的自动化编译及测试项目Job实现自动化,表1是自动编译及测试项目Job。

表1 自动编译类项目Job

各项目Job之间无管道Pipeline,各类项目Job间的触发、依赖关系,如图2所示。

为了在任何时间点都可以向客户交付可运行高品质的软件产品,需要建立自动化测试机制[6]。这意味着代码在合成到主干前,系统就可以捕获新代码的编译错误或功能错误,并触发代码自动回滚,其是一套动态并且强大高效机制。代码提交触发冒烟测试后。

采用的自动测试策略,见表2。冒烟测试应用于每一个活跃的开发分支和主干Master分支,每15 min检查一次代码改动,如有更新则运行冒烟测试。冒烟测试用例个数随着新功能的增加而增加[7]。回归测试应用于每一个活跃的开发分支和主干Master分支,每日凌晨运行自动化测试平台上的所有用例。升级—回滚测试应用于每一个活跃的开发分支和主干Master分支,每日凌晨运行。

随着新功能的增加,冒烟测试的范围会逐步扩大,包括所有活跃的开发分支和Master分支都会有运行冒烟测试。回归测试包括所有测试用例和检查点,并逐步实现自动化测试平台所有用例的自动化。升级—回滚测试支持客户版本到最新开发版本的升级—回滚自动化测试。

2.3 基于虚拟化的容器技术应用

容器技术(Docker)是一个集群管理、操作系统和应用的全面解决方案。例如,编排平台Kubernetes,Apache Mesos和 Service Fabric提供集群环境的统一化管理方案,对应用有非常巨大的推动作用。Chef/Puppet/PowerShell等极大地推动自动编译测试环境获取能力的提升。

容器化的ACF构架,如图3所示。构建一个半Docker解决方案,NFS和DHCP服务器是在主机而不是容器中。Docker容器是环境,代码是在版本控制下从主机映射的,配置通过脚本“加载”到容器中。这里选择半Docker解决方案是因为Docker技术还是存在一些限制,例如与内核相关的功能NFS,于是放到虚拟环境外的真机上。而DHCP理论上可以放到Docker内部,但是需要配置2层网络,这样会破坏虚拟化的封装性,权衡利弊决定将其也放到外部真机上。

图1 自动编译测试方法技术架构

表2 自动测试策略

图2 各类项目job的触发依赖关系

图3虚拟容器化的ACF构架图

3 结语

在新时期促进集成电路产业和软件产业高质量发展的大背景下,为了更快更好地交付业务需求,提高效率的软件自动编译测试新方法顺应时代需求应运而生。

通过实验验证,该方法以全覆盖的自动化技术及虚拟化容器技术为基础,实现了全覆盖自动构建、自动部署、自动监控、自动测试。基于虚拟化的容器技术,有效减少了大规模软件安装、部署、配置及升级等引入的大量重复性工作。基于软件质量保障理论,选取合适的测试技术,实现了自动化测试,降低了缺陷及失效概率,提高了软件产品质量,促进了持续质量改进。该方法具有较的广泛适应性,值得推广。

猜你喜欢
自动测试分支虚拟化
巧分支与枝
基于OpenStack虚拟化网络管理平台的设计与实现
JXG-50S型相敏轨道电路接收器自动测试台
可并行测试的电磁兼容自动测试系统的实现
对基于Docker的虚拟化技术的几点探讨
关于某型雷达自动测试系统的几点认识和建议
一类拟齐次多项式中心的极限环分支
虚拟化技术在计算机技术创造中的应用
存储虚拟化还有优势吗?
一种卫星低频接口自动测试系统