腾讯优测优分享 | 分布式系统测试的应用方法——场景注入测试

腾讯优测是专业的移动云测试平台,提供自动化测试-全面兼容性测试,云真机-远程真机租用,漏洞分析等多维度的测试服务!linux

在大数据浪潮下,海量数据处理能力的提高是推进大数据不断前行的基础。俗话说,工欲善其事,必先利其器,因为处理能力亟需提高,所以海量数据处理的分布式系统应运而生,例如hdfs、hadoop、spark、storm、MQ等等。
分布式系统运行的核心是集群化部署,分散化管理,任务均摊,平衡化运行。节点异常、机器异常、运营操做、策略变动都会打破原有的平衡状态进入一种不平衡状态,平台经过状态管理和协议交互逐步演进到另外一种平衡状态,同时要保证这种演进过程当中系统计算正确性。打破原有的平衡状态的场景很是多,复杂的平衡演进过程当中又有不少的场景可能出现,这种交织的变化对分布式系统测试,特别是稳定性测试带来很是大的挑战。
本文将从分布式系统出发,重点介绍分布式系统稳定性测试中的一种应用方法——场景注入测试。服务器

分布式系统测试:

测试执行过程能够概括为构建输入(包括数据和系统场景)、驱动输入、收集结果进行校验(包括系统状态、计算结果),以下图。
除海量数据的涌入对系统的稳定性形成不少冲击外,复杂的场景变化也时刻敲打着系统的稳定性。下面我将重点分享场景注入测试在分布式系统稳定性测试中的应用。
经过数据驱动分发到两套环境(一套稳定版本环境,一套被测系统环境),对被测系统测试版本环境注入各类场景,经过对比两套环境下的计算结果,挖掘测试版本的系统bug。
网络

场景注入测试思考

对于节点多、角色多、交互复杂的分布式系统来讲,节点异常、机器异常、网络异常、运营操做、扩缩容等等场景不可避免,集群规模越大,场景的交叉出现几率倍数增长,时刻对平台的稳定性进行冲击。既然这些场景不可避免,经过人为地触发这些场景,能提早暴露系统的问题,是一种很是有效的预防措施。
分布式系统的特性是高可用、高容灾能力。那么,节点异常、机器异常、网络异常、运营操做、扩缩容等等场景的出现,都不能影响系统的稳定性运行和任务的正常处理。所以,把系统可能发生的场景进行分类并构建出来,注入到被测系统,并与其余测试手段结合使用,便可以提早暴露系统的问题。
基于以上思路,在数据平台部的不少系统上进行了应用,都取得了很好的效果。
架构

场景注入测试平台架构

鉴于场景注入测试在分布式系统上应用的效果,以及具有场景可重复使用、公共场景可在不一样系统上通用、与其余测试方法可相互独立无耦合等特性,着手建设了场景注入测试平台,在简单的后台系统、大规模的分布式系统上都能进行应用。资源异常、网络异常这样的功能异常都已经构建,能够应用到各类被测系统;测试同窗可自行丰富被测系统的特性节点异常和运营操做等场景。
场景注入流程:原子操做与集群中的节点相结合组成一个场景;此场景被某个场景注入任务选取并被TriggerServer扫描获得,TriggerServer把此场景的原子操做ID发送给部署在各个节点上的场景执行CaseAgent,CaseAgent接收此消息后从原子操做服务器上把原子操做拉取到本地进行执行,实现场景的触发。
在分布式系统中,集群规模大,节点多,多个场景可能同时发生,例如,一个节点宕,同时网络异常,致使集群没法快速感知此节点状态;一个不平衡状态演进过程当中发生其余场景等等,此类多场景同时触发的场景对系统的稳定性考验更大。在平台中经过构建一种多步骤场景来实现多场景同时触发的场景。
框架

原子操做管理

原子操做分为公共原子操做和系统原子操做。公共原子操做由资源异常和网络异常组成,能够被全部系统所用;系统原子操做由节点异常和运营操做组成,能够被此系统所用测试环境中应用(功能测试环境、稳定性环境、准现网环境)。
一个原子操做由两部分组成,操做的发起action和操做的恢复recover。操做的发起action在某个节点上执行就产生某个场景,操做的恢复recover在此节点上执行则此场景恢复取消。
原子操做由单独的服务器管理,经过原子操做名进行区分,CaseAgent从服务器上拉起原子操做到执行节点上执行。
要求执行某个原子操做action,未被recover前,再此执行此原子操做action将失败。例如,原子操做action是让节点cpu消耗到90%的高负载下,若是再此执行action已无心义了。所以设计原子操做action时必须注意此要求。
要求可重复执行recover操做,但效果要相同。例如recover是启动某节点的进程,重复执行屡次,节点的进程只能启动一次。要避免重复执行后,致使多个进程被重启。(固然不排除要启动多个进程的场景,但愿经过其余方式实现。)分布式

场景操做管理

场景:由原子操做与集群节点组成,相互独立管理。原子操做一旦建设,能够重复利用个,与被测集群节点组合成场景。
单步骤场景操做(单时间内单场景):仅由单个原子操做与某个节点组合而成,执行过程为先执行action,再执行recover。
多步骤场景操做(单时间内多场景):由多个场景组合而成,执行过程为先执行全部步骤的action,再执行全部的recover。先执行全部步骤的action是保障多个场景能同时触发。工具

TriggerServer的任务调度

选取要执行的场景操做,提交一个场景注入任务,还包含场景执行的用户、任务执行重复次数、场景触发方式等信息。
场景执行的用户:场景在某个节点上触发时是以什么用户执行。除网络异常由root来执行tc netem和iptables命令外,其余场景均可以有用户本身指定要执行的用户。
任务执行重复次数:用户能够指定此任务的全部场景的执行重复次数,对于分布式系统来讲,不少异常是偶现的,须要屡次执行某些场景下才可能偶然出现一次。
场景触发方式:支持两种方式,时间间隔触发和定时触发。时间间隔触发,指定场景之间的执行时间间隔。定时触发,指定场景是按某种定时规则触发,与crontab配置方式一致(当前仅支持分钟和小时),帮助系统某种整点时刻下特性与场景的组合触发。
Action和recover间隔:可配置action与recover的执行时间间隔,适应action与recover快速执行、action执行后一段时间再执行recover等场景。oop

原子操做实例

因为系统原子操做与具体的系统耦合性过高,如下仅以公共原子操做为例进行实例说明。
当前机器资源异常,CPU消耗高负载经过无限循环的加乘进程实现;内存不足经过申请指定内存大小,循环执行memset保障其在物理内存中实现;文件/目录不可读经过修改其读写权限实现。网络异常,经过tc netem(tlinux2.0已开启)和iptables两种命令实现。测试

以CPU消耗高负载为例说明原子操做构建方式:

Cpu_load_make是此原子操做名,对应原子操做目录,包含action.sh和recover.sh,其余几个脚本为action.sh和recover.sh执行服务。
大数据

action.sh中要记录action.sh执行的状态(写入runFlag.txt),若是已经执行过,就不能再次执行。
recover.sh执行后把执行状态修改掉,以便下次action.sh能顺利执行。

场景自动生成

除手工构建场景外,平台还提供了自动生成场景的功能,解决大集群状况下重复的配置场景,同时经过自动生成场景提高场景的覆盖度。
场景分为单步骤场景和多步骤场景,场景的自动生成也分单步骤场景的自动生成和多步骤场景的自动生成。

单步骤场景的自动生成:

选取要生成场景的操做原子和操做节点,生成一个自动生成任务。由TriggerServer根据任务的操做原子和操做节点进行差乘生成场景。

多步骤场景的自动生成:

选取已有的场景,生成一个自动生成任务。由TriggerServer根据任务的场景和场景进行差乘生成新的场景。
选取的场景还能够是多步骤场景与多步骤场景进行自动生成场景。随着节点数、原子场景的增长,多步骤场景生成的场景数很是庞大,执行周期很是长;随着步骤的增长,对应场景在现实状况下被触发的可能性也大大下降;建议测试过程当中可逐级生成场景进行测试,扫清一级,再生成另一级的场景。

场景注入实例(tube测试)

在数据平台部,有个分布式tube系统,是个生产消费模式的MQ系统,提供存储外部生产的数据,可被消费者进行消费这些数据,生产和消费的数据在系统稳定状况下保持一致,在异常场景下不保证高一致性,容许少许数据丢失。
这个项目质量保障的重点是无异常状况下生产和消费高一致,有异常状况下数据只容许少许丢失,场景注入是很是有效的测试手段。
对于此系统的重要观察点就是生成数据的一致性,校验分做两种类型,有损校验(异常场景)和无损校验(无异常场景)。为了方便生产和消费数据校验,把系统运行状态分红稳定运行常态和异常触发状态;场景的触发为定时触发方式,每10分钟触发一次,action与recover时间间隔2分钟,所以稳定运行常态和异常触发状态按5分钟单位交替出现; 5分钟时间内生产的数据打上此5分钟时间戳印记,消费端就能够经过时间戳统计此5分钟消费多少条进行校验了。
在此版本测试中,仅场景注入测试发现bug 19个(严重10个)。

结语

大数据分布式系统的存储与计算集群规模和复杂度在不断增长,带来的稳定性风险也在快速增长,场景注入测试框架能够说是随着互联网的发展应运而生的。在数据为王的将来,系统的可用性须要达到一个更高的层次,场景注入测试将成为了系统测试中不可或缺的一环。数据平台部场景注入测试平台场景能够不断完善支持更多的场景,与其余测试方法独立,又能够相互结合,具备良好的可拓展性和易用性,可以知足的各种软件的测试需求。但愿大数据的浪潮下,测试也能一块儿弄潮前行。
加入腾讯优测官方群 214483489 与大咖们分享技术与时讯!
腾讯 王德宝
_腾讯优测是专业的移动云测试平台,为应用、游戏、H5混合应用的研发团队提供产品质量检测与问题解决服务。不只在线上平台提供自动化兼容性测试、云手机远程租用与调试、漏洞分析、自动化测试工具Xtest等多种质量检测工具,更为VIP客户配备了专家团队提供定制化综合测试解决方案。

相关文章
相关标签/搜索