谈分布式测试体系构建

谷歌提出云计算概念之后,大数据领域的发展就逐渐加速日新月异,云计算具体到实例,可以归纳为调度、均衡、容错、监控、运维等一整套操作海量数据的方案。有别于传统小规模或孤立体系产品,云计算生态圈存在错综复杂的系统级别关联,并行其中的不同架构和模块流转于超大规模的分布式软硬体资源中,很难划分出明显的界限。对于这样的产品体系,传统领域的测试方案要么逐渐失效,要么作用域缩减到仅能覆盖体系末端。为了保证大数据平台的可靠性、稳定性和高性能,亟需构建一套与之相匹配的测试体系来衡量产品是否合格。

  存在的问题

  业界在大数据测试领域的探索始终没有停止过,以hadoop生态圈为例,与之相关的各类测试工具自成一体,例如Hadoop本身通过mock出MiniCluster(包括MR和HDFS)用来为开发代码做功能验证,DFSIO/Slive等用来做压力和性能测试;HBase则通过一系列模拟随机/顺序读写相关的工具来做性能测试。而我们自己的ODPS则通过HiveUT来完成功能覆盖和有限的性能验证。仔细梳理这些工具不难发现存在一些问题,列举如下:

  1.这些独立的测试工具和体系很难被其他产品复用,比如说验证hadoop功能的MiniCluster上是不能搭建HBase的,也不能跑Hive。MR输出的默认Counters很难在HBase的测试调优中发挥作用。

  2.各种工具之间对比性较差,例如DFSIO和Slive的输出结果几乎没有什么关联性;还有的时候同一个工具测不同版本,判断耗时、资源占用状况几乎相同,实际上某些第三方指标出现了变化,工具却不能很好的反映出来。

  3.各种工具自身的运行效率无评判标准,被测目标无第三方监控依据。缺乏系统的绘制性能趋势图的能力。

  4.传承性不够,跨产品使用的可能性较小,例如HBase的测试中,很少对HDFS的性能做一个预判,原因是相关的人员缺乏对HDFS体系的了解,对其工具可起到的测试作用缺乏理解。

  5.工具易用性较差,几乎所有类似独立体系工具由于想在广度上覆盖尽量多的应用场景,因此使用了大量的参数用于配合用户不同的测试目的。

  6.此类工具往往依赖产品自身架构来进行相关测试,缺乏完全独立于产品本身的第三方验证方式,如果产品相关联部分发生了变动,要么造成基于老版本的工具失效,要么可能会影响到测试结果的准确性。

  诸如以上所述的问题,几乎存在于大数据测试领域的每一个角落,对于阿里数据平台的相关产品来说,随着时间的推移规模的扩大和业务的日渐繁忙,测试上的这些缺陷越来越无法容忍,构建一套与之匹配的分布式测试框架体系就成为了必经之路。为了构造这样一个测试体系,分布式测试框架与集群管理(DST)于2012年初应声而出,从雏形开始一步步构造成为如今拥有数十个页面、数万次构建、数千测试场景和报告,既可以应对复杂业务场景,也可以满足小版本单一功能快速集测需求的自动化测试框架体系。

  历史溯源

  解决上述存在的问题,构造与之匹配的测试体系,就要从分布式测试框架与集群管理(DST)的历史说起,因为DST的发展过程恰恰正是解决上述问题的轨迹。以下是里程碑级别事件的时间线:

  2012年1月,DST开始立项,第一行代码提交版本控制

  2012年3月,场景管理(用于构造测试用例)和实验室管理(用于调度执行测试)制作完成

  2012年4月,指标配置器和指标计算模板配置功能完成

  2012年5月,第一次执行从场景到调度,如今可供查阅这份古老的测试报告:隐藏

  2012年5月,ganglia监控数据导入HBase成功,可供查阅第一份有监控数据的测试报告:隐藏

  2012年7月,生成集测报告功能上线,最古老的一份集测报告:隐藏

  2012年7月底,三线(BI线、广告线、搜索线)回归纳入DST调度体系,首次实现业务线自动化回归

  2012年8月,实现基线对比功能,多个版本测试结果可自动进行趋势对比

  2012年11月,数据魔方业务线回归纳入DST调度体系(由于对比工具的复杂性导致纳入体系的难度很大)

  2013年1月,DST接入Kelude体系使用kelude接口进行用户认证管理和通知等功能

  2013年2月,实现测试报告评审体系,通过工具引导流程,迫使测试报告必须通过开发、运维、测试的三方会审

  2013年上半年,随着云梯1跨机房项目启动,DST最高接受超过7000台机器的平均每台150多个监控指标的同时导入

  2013年3月,配置管理上线,海量测试资源首次实现图形化调度管理

  2013年12月,优化监控指标查询系统,将分级查询耗时优化到秒级查询耗时

  2014年2月,集群管理上线,用户可以自由分配测试资源组装自己的测试集群,其中云梯1产品更实现了一键自动化部署

  综上所述,最终构造成功的体系与架构可以从下面几张图来看:

图:DST的构成

  图:DST的体系架构

 图:工具引导过程

  问题的解决

  回到我们刚才提到的6个问题上,DST通过场景管理促使用例复用和使用便利程度得以提升,通过监控体系的创新和改进,促使海量监控数据得到有效的管理和查询。此外,由第三方监控构成的性能评价系统能够排除产品本身的干扰,可以更客观的反应性能结果。

  DST在大数据分布式测试上有三个优点:

  1.分布式调度器。调度器采用总分的形式,由console调度多个agent执行测试代码,这样可以模拟出大并发产生的压力。好处是测试代码独立于被测目标,可以防止受被测目标的干扰,且测试代码的分发和结果的收集合并过程都由框架自动化实现,免去用户自行做分布式测试时候对测试结果收集整理的烦恼。

  2.海量监控数据收集展示。DST将数据存储到HBase中,利用HBase的高效率和高容量保证了超过7000台机器的海量监控数据可以实时容纳到DST系统中。数据经过压缩整理,进一步提高了展示速度。业界在2013年2月左右出现一个开源产品OpenTSDB,有点类似这套系统。不同的是,OpenTSDB并没有利用在大数据监控领域使用广泛的成熟产品ganglia来收集监控数据,虽然在数据存储和性能效率方面更好一些,但是并不适用云梯1产品线的测试。

  3.集群管理实现动态测试资源调整。云计算最大的特点是集群和计算资源的动态伸缩,对于测试来说,为了获得不同规模下的性能数据,需要不断调整测试资源的大小,而每一次调整过程通过人工去实现都非常繁琐。DST通过集群管理实现了自动化调整测试资源,图形界面使得配置更加直观,测试资源的利用率状况也可以一目了然。此外,用户独占互斥锁的存在也避免了同一个资源被其他测试目标污染,有效保证测试的可靠性。

 DST在设计成功后,于2013年初引入其他非大数据产品中,依托高度自由的框架体系,帮助用户在不同的产品中构建复杂的测试场景。

  

图:2014年4月新建实验室与调度次数分布

  分布式测试体系架构成功后,DST进入了产品推广阶段,我们认为DST更适用于以下测试场景:

  1.被测目标是一个后端服务。无论是独立单机还是多机集群,通过简单的一键部署监控工具后,被测目标就将被纳入DST监控体系。同时,可以通过简单地配置将JMX端口监听起来,用于收集JVM的各项指标信息。

  2.性能、压力和稳定性测试。这些场景往往测试耗时较长,人工值守存在很大的困难,对结果数据的分析也比较困难。接入DST系统后,除了实现无人值守,自动报警通知用户之外。当监控数据的量也比较大的时候,通过指标模板的自动化计算更方便阅读和查找问题。稳定性测试更是可以揉入多个实验室,通过不同工作机的调度实现非常复杂且真实的用户实际使用场景。

  3.需要高效利用测试资源的产品。集群管理使得用户间沟通成本大大降低,测试资源的利用状况一目了然,每日报表更可以看到哪些产品的测试更为繁忙。

  4.多机联合制造负载。被测目标需要足够大的压力才能得出准确的测试结果,而且测试场景构造复杂,通过LR之类工具实现,要么难度太大,要么根本不能实现。DST通过分布式调度器,将测试代码自动分发,并实现结果的收集整理。而最关键的是,整套runner完全可以由用户自行编码订制,自由度与方便性并存。

  5.有指标监控需求的产品。监控体系纳入后,结果更加准确,有利于对被测目标的精致观察。

  6.存在大数据工具的复用和传承需求。由于DST中已经积累了数千个测试场景,因此用户在接入相关产品时便可以利用已有的测试场景来验证被测目标。例如,当Hive接入测试时,可以通过Hadoop的基准测试判断环境是否已经完备,发现bug时也更方便定位是Hive还是Hadoop上的问题。

  前景展望

  DST架构体系的建成并非一蹴而就,期间经历了复杂的论证、摸索、重构和优化。其中仅监控收集一块,由于完全是创新的产品,在多次摸索中推翻了数种方案,对其进行的优化更是持续数月。在DST推进的过程中,业务测试的需求成为其改进优化的第一源动力。例如早期云梯1由于监控数据存储在mysql中,导致100台机器的监控数据仅需两三周就可以撑爆mysql服务器,而每次测试报告的生成往往耗时达数小时。这一切在DST系统中,由于采用海量存储的缘故,得以缩短到秒级展现。此外,由于调度的自动化,收集体系的自动化,测试环境运维的自动化,促使云梯1回归集测从长达月余,缩短到最快4天以内。

  对于DST来说,目前将会跟随项目脚步,逐步实现对云梯2相关的性能、压力和稳定性测试的需求。未来的工作集中于三个方向,一个是纳入神农监控体系,实现调度执行与神农监控数据的对应关系;第二个是指标的收集整理,云梯2相关指标数量巨大,理清这些将会方便用户的测试目的性;第三个是构造各种测试场景,用于对云梯2进行多角度的验证。

  分布式测试体系的构建依然任重而道远,以数据为己任,为数据的流转,计算的调度保驾护航是这套体系的价值所在。能跟随这个世界级规模的海量数据平台前行,见证这一切,既是人生之幸,也是责任之所在。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-09 14:20:28

谈分布式测试体系构建的相关文章

谈测试体系规范的推行

这几天在考虑这么一个问题:测试被慢慢认可了之后,为什么测试的价值还得不到体现?为什么测试体系还是得不到广泛的推广?以下是我个人的一些分析. 1.测试体系的整体概念 一直以来,我都觉得这个问题挺概念化的,就是说出来后让人抓不住重点的感觉.要说某个具体的技术细节,很明确.比如说Weblogic的调优,可能会有人很快联想到:连接池.JVM.线程数等等.但是测试体系是什么?有点虚. 在多次听测试人员的报怨之后,我觉得现有规范可能是影响测试体系建设的第一要素.当然,领导还要强力支持.先说测试规范,后面再说

分布式测试框架架构与思考(1)奠基

"工欲善其事必先利其器".无论是哪个行业,这都是一句至理名言,软件测试当然也不例外.这也正是分布式测试框架(下文简称DST)设计的初衷. DST是海量数据项目背景下,为了解决测试集管理.运行.查询和测试执行.控制以及监控.日志数据的收集整理的一个通用型测试与分析平台.这个平台既包含了传统测试框架的特点也包含了自身的开创性思想.作为DST从前端界面到后端服务的亲身经历和开发者,下面我将从技术选型.架构设计.功能点分析.使用场景以及周边支持工具这几个角度来对DST测试平台做一个总结,进一步

分布式测试框架架构与思考(1)技术选型

"工欲善其事必先利其器".无论是哪个行业,这都是一句至理名言,软件测试当然也不例外.这也正是分布式测试框架(下文简称DST)设计的初衷. DST是海量数据项目背景下,为了解决测试集管理.运行.查询和测试执行.控制以及监控.日志数据的收集整理的一个通用型测试与分析平台.这个平台既包含了传统测试框架的特点也包含了自身的开创性思想.作为DST从前端界面到后端服务的亲身经历和开发者,下面我将从技术选型.架构设计.功能点分析.使用场景以及周边支持工具这几个角度来对DST测试平台做一个总结,进一步

完美测试体系

大自然素以平衡为美,稳定,可持续是很多事物的一个稳态. 捕鱼,讲究猎杀不绝,生生不息. 做公司思考着如何构建自运营的公司,做团队思考着如何构建可持续发展的团队.而做我们测试,思考如何构建稳定,可持续发展的测试体系,如果,我想,可以称之为完美测试体系. 顺应自然的运行法则,我自底向上进行一个分析和思考,看看我梦想中的完美测试体系. 阶段一,运转起来. 要有这样一群人,他们能够分析需求,制定测试计划与策略,完成用例编写和执行工作,其中,有一定经验的测试项目经理. 他们能够,有效按照用户需求,进行黑盒

重构——构筑测试体系

构筑测试体系 如果你想进行重构,首要前提就是要拥有一个可靠的测试环境. "编写优良的测试程序,可以极大的提高我的编程速度,即使不进行重构也是如此." 1.自我测试代码(Self-testing Code )的价值 "Class 应该包含他们自己的测试代码." "每个Class 都有一个测试函数,并用它测试自己这个 Class ." 确保所有的测试都完全自动化,让它们检查自己的测试结果. 只要写好一点功能,就立即添加测试. 一整组(a suite

分布式数据库——从线性扩展谈分布式JOIN

在首届阿里巴巴中间件峰会上,来自阿里巴巴DRDS团队的梦实分享了<分布式数据库--从线性扩展谈分布式JOIN>.他主要从OLTP数据库的线性扩展.水平扩容.IN查询.分布式JOIN四个方面进行了分享.在分享中,他主要通过买家与订单场景.家庭与孩子场景介绍了IN查询,通过同维度的JOIN.广播表的JOIN.Nested Loop Join详细介绍了分布式JOIN的坑与填坑.   以下内容根据直播视频整理而成.   在数据库的使用过程中,我们难免会问到这样的问题,为什么分库分表?答案是为了达到线性

用户体验设计:浅谈可用性测试中沟通的技巧

文章描述:如何快速解除用户防备?--浅谈可用性测试中沟通的技巧.   一般来说,在产品的设计和开发过程中,不同阶段会使用到不同的用户研究方法.比如,在产品正式发布之前,通常会进行可用性测试.可用性测试,是指让一群有代表性的用户尝试对产品进行典型操作,同时观察员和开发人员在一旁观察.聆听.记录.该产品可能是一个网站.软件,或其他任何产品,它可能已经做好,也可能尚未成型. 对于一个典型的可用行测试,我们可以:1. 通过观察用户在使用产品过程中出现的一些问题,发现产品的可用性问题2. 从测试参与者的表

一种搭建分布式测试环境和批量性能测试的思路

背景 在搜索引擎的测试过程中,经常会遇到以下两个问题: ● 需要搭建和更新分布式测试环境 ● 在性能测试时,我们需要测试不同集群规模和配置下的环境时,如何自动更新测试环境和批量进行性能测试 因此,我们需要设计一个脚本,这个脚本可以帮我来完成这些事. 在这里,我推荐使用Python,理由有: ● 写起来比较快(测试时间本来就比较紧张),不可能用C或者Java了 ● 语法比较清晰,Shell.Perl这些维护起来太乱 ● 自带的库.第三方的库比较丰富 ● 另外,我个人比较喜欢Python的mako模

阿里聚安全受邀参加2016中国网络与信息安全大会,分享互联网业务下的新安全体系构建

2016年8月3日,在工业与信息化部指导下,由中国电子学会.四川省信息安全产业发展推进小组办公室.中国国际贸易促进委员会四川省委员会主办,中国电子学会信息安全专家委员会.四川省国际展览中心.中国信息安全研究院.中电长城网际公司.成都电子学会.成都安全可靠信息技术联合会协办的"2016中国网络与信息安全大会(CNISC)"在成都世纪城国际会议中心隆重召开.工业和信息化部党组成员.办公厅主任莫玮与四川省人民政府副秘书长赵卫平出席会议并致辞,由方滨兴院士.沈昌祥院士.邬江兴院士引领,荟萃国内