基于ZStack设计一个较为简单的自动化测试系统

本文首发于泊浮目的专栏:https://segmentfault.com/blog/camile

背景

在笔者目前的项目中,大部分业务跑在基于kvm的vm上。鉴于对项目质量的追求及尽可能节省人力资源的目的,着手调研高测试覆盖率的解决方案。

由于项目基于ZStack,所以架构与其较为相似,但在vm上添加了相应的agent,通过其来控制vm中的操作系统与软件。

众所周知,ZStack管理节点部分有一套较为完善的自动化测试框架,可以满足大多数场景。而Utility并非如此,只能通过黑盒测试来保证其质量,且许多测试场景需要start up一个真实的ZStack的环境,测试成本较高。

如果一部分测试可以设计在agent端,也就说是agent端的测试可以自举。这样就可以少设计一部分黑盒测试实例,降低潜在成本。

从业务看测试

从vm agent的业务逻辑来看,大多数业务都是修改DB配置、读DB配置,start, stop DB等。而为了case之间不受到影响,我们在跑完测试之后,需要重置当前的测试环境。

方案选择

Docker

放弃。其无状态的特性简直完美契合上述需求。但是docker里只能跑单进程,对于oracle相关的业务,可能无法满足。且部分版本oracle对Docker的镜像支持上可能有问题。

在docker中可以通过一些hack的手段去做到在一个容器中起多进程,比如systemd或supervisord。但是笔者对docker并不是非常的了解,所以没有继续研究下去。

Pouch

放弃。阿里自研的富容器技术,可以完美解决docker里单进程的问题——其实本质上也是在容器镜像起来时运行了一个init进程指定为1号进程,而不是像docker里在命令行中指定的进程。

在实践过程中发现有各种莫名其妙的报错,且相关文档不齐全。

VM By ZStack

目前的方案。通过ZStack来管理环境vm的生命周期,通过快照机制来还原环境。缺点也非常的明显,仅仅一个case生命周期就需要1min+,生命周期大致如下:

  • 使用vm跑测试
  • 停止vm
  • 恢复快照
  • 启动vm

让人感到舒服的是,ZStack提供了一套Java SDK,可以直接通过SDK完成上述操作。

基于ZStack的自动化测试

对接ZStack根本没有什么困难之处。更多的是要从成本这个点去考虑整个测试系统的设计。

这里的成本则又可以分为两种成本:

  • 物理资源成本:产品线上目前能够投入进测试的host较少,故在资源稀缺的情况下,得尽量用较少的vm去完成这件事。
  • 时间成本:一个开发人员跑测试的时间越短越好,而不是花大量时间去等待测试环境准备、清理等。举个列子,如果我搭建一个mysql 主备库,需要两台vm,如果串行去完成生命周期相关的操作,那么就是2min+;如果并行的去做,便是1min+。同理,如果这些测试能够尽量并行的去跑,则可以省下更多的时间。

角色

角色示意图如下:


TestCase

一个测试实例,含有测试代码。同时它会向ResourcePool申请所需的vm。

TestGroup

根据当前的策略组织TestCase去并行的跑这些Case。在这里可以控制并发粒度,最后将会提交给Junit的跑测试。

JUnitCore.runClasses(new ParallelComputer(true, true)
                    , testGroup.toArray(arrayTestGroup));

ResourcePool

资源池的概念其实有点像云。比如组内有4个开发,那么4个开发几乎是不可能同时跑测试的,同时有2个开发在跑测试也是小概率事件。与其每个人都申请几台测试vm放在那边(一天可能就跑1、2小时的测试),还不如大家都共享一个池内的vm,避免资源的浪费。就像公有云卖你1core512m,你去架个网站,但是它料到你用不了这么多,所以它就会超分超卖。

这个类会根据配置文件或者网络请求存入相应测试用的vm,并记录这些vm是否被使用,为了防止其他开发者一起跑测试的时候共用同一台vm,会给使用中的vm打上一个user tag,避免冲撞。另外,SessionId等常量也是从这里刷新而来。

小结

通过本文,向大家介绍了一下笔者目前在项目中设计的一个基于ZStack的自动化测试系统。基于各方各面的成本限制,故此设计的较为简单。如果后续有些较大的改动或显著的改进,笔者还会与大家继续分享。如果大家对于这方面的自动化测试有较好的实践或者建议,也欢迎在留言中一起交流学习。**

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容