APP下载

基于Kubernetes的并行计算测试平台设计及其在水务系统测试中的应用

2022-08-29齐飞许诺周含笑马刚

现代信息科技 2022年12期
关键词:测试用例用例进程

齐飞,许诺,周含笑,马刚

(哈尔滨航天恒星数据系统科技有限公司,黑龙江 哈尔滨 150028)

0 引 言

水务系统集成了物联网、云计算、大数据、空间地理信息等新一代信息技术,能够实时感知城镇地下供排水运行状态,对水务信息进行及时的分析、处理,提供辅助决策支持。随着大数据、物联网、移动互联等技术的蓬勃发展,对水务系统数据并行接入能力和大数据处理能力提出了更高的要求。因此,如何验证系统的数据并行接入能力、大数据处理能力,提高系统的测试效率,成为水务系统测试的重点和难点。若要解决上述问题,一方面要考虑批量生成各类传感器模拟数据,另一方面要利用自动化手段来提高测试效率。近年来众多学者在数据生成技术和自动化测试技术领域提出一系列优化方案。其中,刘宇等人提出基于用例分析法的数据生成技术,该技术可依据业务数据的基本属性生成模拟数据,且模拟数据的业务覆盖度得到了有效提升。但并没有考虑实际应用场景中的诸多情况,不适用于物联网相关的系统测试。在自动化测试方面,现有文献中对界面和接口两方面的研究偏多,但对专业语言与开源测试框架相结合的技术研究还比较少。本文提出一种基于Kubernetes 的并行计算测试平台,用以解决物联网测试过程中模拟数据不具备物理属性且测试周期长的问题。经实践验证,本平台批量生成的具备物理属性的测试数据可以有效发现被测系统数据接入、处理能力的瓶颈,同时可基于专业领域语言测试框架有效提升测试效率。

1 平台设计

1.1 Kubernetes 技术概述

Kubernetes 是Google 开源的容器集群管理生态系统,它可以对容器化的应用服务提供资源监控、调度、负载均衡、扩容等管理功能,已成为平台管理的主流技术。Kubernetesk 可以按照预先设计的管理规则自动对平台各Docker 容器进行激活、撤销、重启等监控和调度,本文利用该技术设计管理规则,对实现测试平台并发性和可靠性设计起到至关重要的作用。

1.2 平台设计

将数据生成组件按照传感器数据类型划分为Ⅰ型、Ⅱ型…N 型,组件以容器方式运行,多个容器节点构建数据生成模块。数据生成模块的运行架构是基于多节点分布式和多线程并行计算的双层并行架构,利用Kubernetes 技术实时监控节点吞吐量和资源使用量,将数据代入基于Kubernetes 的资源利用率函数自适应调整数据生成组件的数量,模拟数据的并发量随着数据生成组件的增加而增加,并通过时间轮进程调度方式协调多组件服务活动,使批量生产的模拟数据具备接近实时数据的物理属性,构建物联网测试的仿真数据环境。同时设计测试用例专用语言,优化专业领域语言和开源测试框架之间的数据层通道,合并测试用例设计环节和自动化测试编码环节,即设计测试用例后无须手动编码,测试用例可自动提供测试服务并给出测试结论。综上,所设计的平台全面提升了自动化程度,有效保障了软件的测试效率。并行计算测试平台架构如图1所示。

图1 并行计算测试平台架构图

1.2.1 数据生成模块

为有效提升平台的并发能力,本文采用双层次并行计算架构作为平台核心架构。本平台根据传感器类型划分不同的组件,组件以Docker 镜像的形式独立运行。Docker 容器技术属于新型虚拟化技术,作为一种轻量化的服务载体,具有快速启停、快速部署、消耗系统资源小等优点。Docker容器技术保证平台可在任意时间点挂载或撤销节点容器,实现性能稳定可靠的分布式系统。不同的组件可生成不同类型的数据,每个组件包含多个数据生成进程,初始状态下组件只运行一个数据生成进程,平台自动激活备用数据生成进程满足模拟数据实时性的要求。数据生成组件通过消息队列的方式实现模拟数据的分布式通信,将模拟数据反向注入被测系统。双层次并行计算架构图如图2所示。

图2 双层次并行计算架构图

吞吐量和CPU 资源使用量之间存在线性关系,经线性拟合可推导出二者的函数关系式()。由于CPU 资源使用量和资源利用率采样点总体分布符合正太分布,构建基于Kubernetes 的资源利用率函数。根据测试需要试验得到理想的期望和方差,()函数是以吞吐量为自变量,CPU资源利用率为因变量的函数关系式,CPU 资源利用率函数公式为:

设定三级启动阈值控制数据生成进程启动数量,Kubernetes 中Kubelet 代理技术实时监控组件的吞吐量,将吞吐量代入公式()中得到资源使用量,通过公式()计算得到资源利用率。资源利用率达到阈值时平台自动激活备用数据生成进程,平台吞吐量随平台数据生成进程的增多而增大;资源利用率超过最高级别阈值后CPU 利用率会保持在一定范围内活动,平台吞吐量也会保持在稳定状态;资源利用率超过最高级别阈值后且平台保持稳定状态一段时间后,平台会自动关闭一定数量的数据生成进程,平台吞吐量随平台数据生成进程的减少而降低。通过动态激活和撤销数据生成进程模拟实时数据高速、低速的动态特征。

数据生成服务以进程的方式运行,从理论上来说,随着进程数量的增加,系统的数据处理能力也会随之提升,但实际情况是多进程同时运行会增加硬件资源的消耗,导致数据处理能力下降。本文考虑多组件同时运行会出现上述资源竞争的情况,设计一种基于时间轮进程的调度方式,以此保障平台的数据处理能力。假设平台存在个数据生成组件,每个组件内包含若干个数据生成进程,将进程由高到低设置为不同的优先级。系统中存在一个公共定时器,定时器周期性启动不同进程并控制每个进程的执行时间。当定时器归零启动时,定时器则开启当前优先级的进程运行,当定时器到达规定时间为时,定时器终止当前进程,保存过程数据,然后开启下一级的进程。如果在进程运行结束时定时器未到达截止时间,则在进程产生一个实时信号触发开启下一级进程运行,此模型应根据生成单个数据时间重点设计定时器间隔时间,同时还需考虑CPU 核心数与进程的分配关系,进程级并行计算架构如图3所示。

图3 进程级并行计算架构图

1.2.2 用例设计模块

用例设计模块主要设计理念:采用领域专用语言作为测试用例的描述语言,平台自动将用例信息转化、融入自动化测试业务中,摒弃使用自然语言设计测试用例,通过硬编码的方式将测试用例信息编译到测试脚本的流程,采用基于领域的专用语言测试框架可有效提升平台的自动化程度。

用例设计模块的设计方案采用内、外部领域专用语言相结合的方式,专用语言可以有效降低自然语言转换为编程语言的门槛,简化测试流程,提升设计测试用例的效率。外部领域专用语言(External DSL)主要是以XML 语言描述测试用例,其关键字包含被测对象、配置参数、表单信息、预期值等信息。内部领域专用语言(Internal DSL)以Python 作为宿主语言构建用于分析测试过程的解释器。平台通过解释器对外部领域专用语言进行分析、重构,之后将测试数据传递至自动化测试模块中。

平台将独立的用例自动组合成树型用例集,利用搜索算法遍历执行用例集中的每个测试用例。被测系统中同级别功能模块的测试用例形成同层级的用例结构,子模块的测试用例在上级用例基础上延展形成子层用例结构,以此模式发展最终形成多点位多层级有向树结构。例如平台首页功能作为树的根节点,子模块功能作为下级有序节点,测试任务从用例树根节点开始执行,以深度优先搜索算法(DFS)为遍历核心算法,对用例树每条分支上的每个节点进行遍历,当某一节点被访问时,则代表该测试用例被执行,用例树全部节点均被访问后,即整个测试任务执行完毕。测试用例自动化执行流程图如图4所示。

图4 测试用例自动化执行流程

1.2.3 自动化测试模块

在自动化开源测试框架的基础上开发用例信息的数据处理服务,通过数据处理服务对解释器传递来的数据进行处理,开辟专业语言与开源框架之间的数据通道,增加针对测试异常结论的分析功能,提升平台中测试结论的自动化分析水平。本文提出关于自动化测试框架Unittest 两个方面的优化措施:(1)引入数据驱动设计模式,形成独立的数据层,自动化测试框架的数据层与业务执行层剥离,提升数据层与测试业务执行层之间的数据交互效率;(2)设计用例异常结果分析引擎,采用SQLite 数据库作为B/S 架构的知识库,加强测试结论对异常结果分析的能力。

以Unittest 框架为基础,基于AOP 设计理念开发Parameter 类,包括装饰器set 函数、path、read 等方法,以及数据驱动模式下测试数据文件的解析方法。根据测试框架接口需求重构结构化数据体TestCase 对象,构建测试数据层与接口控制层之间的数据通道;构建异常测试结论分析服务,其中包括异常结论分析引擎和专家知识库,异常结论分析引擎实现对测试服务异常返回值的监听、捕获、解析、发送等服务,专家知识库以Web 研发团队的经验为主体,提供测试异常现象的分析结论。

1.2.4 可靠性模块

并行计算测试平台在执行测试任务时需要多个数据生成组件协同配合,数据层处于高速数据通信状态,此业务场景下需要考虑对服务器产生的性能抑制,为保证测试平台的可靠性,采用Kubernetes 的弹性伸缩机制对应用层资源进行自动缩放。在实时数据交互频率较低时,Kubernetes通过对组件使用的资源进行缩容,减少对服务器资源的使用避免浪费;在实时数据交互频率较高时,通过对组件使用的资源进行扩容,使测试平台的硬件资源一直保持在合理状态下。

为强化平台的可靠性,设计自定义资源状态脚本对平台各节点状态进行监控。将脚本动态注册至Kubernetes 管理服务中,以Golang 作为脚本语言来编写服务控制脚本Controller,周期性获取各节点的状态信息并反馈至GUI界面,处于非健康状态的组件Controller会立即重启该Docker容器,这在一定程度上强化了平台的可靠性。如果重启容器仍不能解决平台故障,GUI 界面会给出故障容器名称、故障现象等报警信息。

2 应用与分析

相较于传统测试平台的设计方案,本测试平台在并发性、可靠性、自动化程度方面均有明显的提升。并行计算测试平台与传统测试平台架构设计信息如表1所示。

表1 并行计算测试平台和传统水务测试平台设计方案对比

为比较本测试平台与传统测试平台的数据生成能力,以ANQ 水务系统为实验对象,设置生成同一类型模拟数据,测试结果如表2所示,本测试平台有效提升了数据生成服务吞吐量,相比传统测试平台吞吐量峰值提升至1.3 倍,吞吐量提升的主要原因是增加数据生成组件数量和进程调度方式的共同作用。通过平台发现被测系统数据处理能力的上限,当吞吐量达到113 MB/s 时,被测系统已出现部分接口无法解析的现象,累计接口解析错误率达5.85%。

表2 数据生成模块性能统计

为验证测试平台在回归测试中的测试效率,以ANQ 水务系统为实验对象,收集不同测试方法的所用时间,时间计量单位为分钟,测试模块及测试数据如表3所示。

表3 测试用时统计

测试总用时包括测试准备时间、测试执行时间和结果分析时间。传统测试平台准备工作主要是使用自然语言设计测试用例和编写测试脚本,而并行计算测试平台准备工作主要包括使用领域专用语言设计测试用例。表3是采用ANQ 水务系统中320 个测试用例作为实验对象,统计测试用例各阶段的所用时间,经统计分析可知,并行计算测试平台平均每个模块用时95 分钟,而传统测试平台平均每个模块用时127 分钟,并行计算测试平台平均用时比传统测试平台少32分钟,主要原因是使用传统测试平台时需要将测试用例转换为代码信息。为进一步验证不同测试方法的测试效率,将以上实验数据代入以下测试效益公式:

其中,X为并行计算测试平台检测的bug 数量,T为并行计算测试平台检测的总用时,X为传统测试平台检测的bug 数量,T为传统测试平台的总用时。经计算可知,本次实验中采用并行计算测试平台进行回归测试比传统测试平台测试效率提升34%。

3 结 论

本文全面分析测试平台生成模拟数据和自动化测试效率存在的问题,设计一种基于Kubernetes 的并行计算测试平台,将不同类型数据生成组件打包成Docker 镜像,构建双层次并行计算架构,通过专用语言自动编译自动化测试脚本。该平台可以生成具有物理属性的模拟数据并实现测试效率的提升。实验结果表明,基于Kubernetes 的并行计算测试平台在物联网测试中具有良好的应用前景。

猜你喜欢

测试用例用例进程
Dalvik虚拟机进程模型研究
快速杀掉顽固进程
不留死角 全方位监控系统
资费拨测系统的研究与应用
面向多目标测试用例优先排序的蚁群算法信息素更新策略
中外民主法制进程专题复习
用例规约在课程成绩管理系统需求分析中的应用研究
使用用例建模进行软件需求分析研究
基于TestLink的测试管理系统研究
测试用例集的优化技术分析与改进