阿里创新自动化测试工具平台--Doom
摘要: 阿里内部诞生一了个依赖真实流量用于自动回归的自动化测试平台,通过创新的自动mock机制不仅支持读接口的回归验证,同时支持了写接口验证,在内部产生了极大价值,有价值的东西就应该分享,目前该工具已经作为云服务对外开放。
背景
信息系统上线后通常会需要迭代升级甚至重构,如何保证被修改后系统原有业务的正确性非常重要。不复杂的业务系统通过一些常规的自动化测试工具加上人工测试可以解决,但对于业务十分复杂的系统,回归测试将变成一项浩大的工程。
一个实际的例子:阿里巴巴作为一家以电商为核心的集团公司,交易系统和稳定性的重要性不言而喻。整个交易系统在多年的发展过程中,经历了很多业务的上下线,维护的人员也换了一波又一波,几乎没有人能梳理清楚其中的业务和代码。当它不得不面临一次全面升级的时候,其回归测试的困难度难以想象。因为常规的自动化测试工具需要准备测试数据、编写脚本,因此覆盖率不高,因此无法满足需求重构后的回归验证要求。
doom平台的出现解决了这一难题,它通过复制线上真实流量去做自动化回归,通过它发现了很多重构带来的bug,同时加快交易重构项目的上线进程。同时通过录制流量作为用例来实现日常自动化回归取代传统编写脚本的自动化回归大大提升了回归效率和覆盖率。
因为其解决方案的通用性,我们把这它拿出来给大家分享,同时也开放了云服务希望能支持到有需要的用户。
平台介绍
什么是doom平台
doom自动回归平台是一个将一部分线上真实流量复制并用于自动回归测试的平台。 通过创新的自动mock机制不仅支持读接口的回归验证,同时支持了写接口(例如用户下单接口、付款接口)的验证。它最底层借助了java的instrument实现aop因此,目前仅支持java应用的接入使用。其原理图如下:
它与tcpcopy或者diffy的区别:tcpcopy、diffy是在应用外的网络层实现流量录制和回放的,它们只能实现一些只读页面的验证。doom是在应用内部通过aop切面编程方式实现的流量录制和回放功能,因此可以做到应用内部接口级别的回归验证,当然也支持服务级别或者http级别的回归验证。通过独创的中间件级mock以及内部自定义的mock,可实现写流量的回归验证以及跨环境的回归验证(线上引流到测试环境)。
应用场景
系统重构时,复制真实线上环境流量到被测试环境进行回归,相当于在不影响业务的情况下提前上线检测系统潜在的问题。
可以将录制的流量作为用例管理起来进行日常自动化归回。
优势
低成本:无需编写测试用例,通过流量录制形成丰富的测试用例。
高覆盖:一方面线上大量真实流量确保覆盖率,另一方面支持中间过程的验证,例如发送消息的内容、中间计算过程等等的全对象的对比验证,传统手工编写验证点很难实现。
支持写流量验证:(注:写流量是指可能导致有数据变更的流量)不用担心写流量回放污染应用数据,支持线上引流到测试环境以及写流量的自动化mock。
低应用侵入:通过隔离容器技术、字节码级别的AOP技术、中间件级MOCK避免接入类冲突以及降低接入成本。
如何使用
doom平台在阿里巴巴内部,特别是一些核心系统得到广泛使用,因此我们决定把这个产品开放出来,以云服务的形式免费提供给大家使用。doom支持 云效 上的应用直接申请使用,也支持任意能访问公网的应用直接申请使用。
平台文档:接入使用指南
平台链接:doom平台
原理
如何实现回归验证?
对于web应用来说,请求最终都通过发起http请求方式来完成。我们假定生产环境应用会正常的响应用户的请求,通过aop的方式将请求入参及返回结果以及执行过程中的一些快照数据例如访问数据库的入参和返回结果、访问远程服务器的入参及结果保存下来。然后将快照数据发送给测试机器(代码发生变化的机器)完成一次回放过程。通将落库数据、调用后台请求的数据以及返回结果和线上真实请求发生时的数据进行全量对比,发现其中的差异,从而识别被测试系统的问题。针对后台应用来说也是如此,只是后台应用一般都是通过rpc请求实现,这时只要记录rpc入参、rpc返回值以及中间快照数据用于回放即可。
如何保证数据库不被污染?
mock是单元测试常用手段,用来解决接口未完成或者调不通的情况。将这个特性进行延展,在线上执行真实请求时就把写数据库的请求以及对外服务的访问保存下来,在回放时当执行数据库或者调用后台的服务进行mock,这样回放时不会真正的访问数据库,也不会真正的发起对后台服务的调用,因此会影响业务数据,甚至可以在线下环境进行回放,因为mock数据来源于真实请求,也省去了造数据的麻烦。
如何实现对外系统请求的mock?
应用会通过各种各样的中间件对外发起rpc请求,可以通过平台配置的中间件隔离来设置,平台客户端会对这些中间件进行aop处理实现自动的mock,不需要人工去配置具体的rpc接口。如果不支持的中间件请联系我们,我们会对其做适配开发。
如何解决回放时程序执行流程可能和线上真实流程不一致?
在生产环境程序执行时的一些内存数据状态和回放时测试服务器的内存数据状态往往会出现不一致,这些不一致会导致程序的执行流程不一样。例如本机缓存、内存开关、session查询等等。那么要如何解决呢?平台提供了自定义mock机制,将这些会导致不一致的代码片段进行mock。例如将缓存的get方法进行mock,那么如果线上读缓存时有数据,那么回放时直接可以用这些缓存数据进行mock即可,确保了回放的流程和线上真实执行时一致。
如何解决对比时的噪音?
回放时和录制时必然存在一些差异,例如服务器ip、时间、以及一些随机数等等。通过两种方式去解决:
排除法:平台支持指定字段排除对比,将不需要的字段排除即可。
指定对比法:将关心的业务数据进对比。
系统架构
部署图
如图上所示,云服务提供配置管理功能,而在用户机房可以通过扩展实现自定义数据存储或者直接使用阿里云oss存储产品来实现用例或者流量的存储。配置之所以集中管理是为了方便平台升级,而支持数据自定义存储则提供给了用户更多的存储选择。
图中A企业完全使用平台功能,如果平台功能不满足需求也可以像图中企业B一样,基于平台提供的录制、回放等等能力去实现自己的稳定性/回归测试平台。
客户端服务端架构
上图为客户端服务端的架构图。客户端为接入应用嵌入的一个功能模块,可以负责流量录制、流量回放、中间件mock、中间件隔离、流量对比分析等等功能。服务端提供客户端相关的配置信息,例如要录制哪些流量,录制比例是多少、哪些ip服务器需要被录制等等。客户端的一些状态信息也会发送给服务端方便展示管理。另外只有当发生对比异常时,服务端才会发送异常数据给服务端用于查看分析。
要实现不同企业的不同中间件mock,客户端需要扩展不同的中间件mock插件来实现。各个插件通过中间件插件管理器去管理,平台支持一些常用的中间件也支持扩展。除了mock外还需要提供了一个中间件隔离机制,例如通过在中间件最底层做一些隔离,避免在mock失败的情况下不会访问到数据库,保证回放时业务数据的安全性,当然如果是在非生产环境进行回放测试也可以避免这个风险。
平台开放
录制数据存储到哪里?
平台默认将录制数据保存到oss,也支持用户通过扩展实现使用自己的数据存储服务。
能基于doom平台实现自己的用例管理执行平台吗?
doom平台开放了流量的录制、回放以及对比的api,有需求的用户可以基于这些能力快速搭建一套属于自己自动化回归测试平台。
阿里创新自动化测试工具平台--Doom的更多相关文章
- 推荐一款国产优秀的基于 AI 的 Web 自动化测试工具——kylinTOP 测试与监控平台
对于于一般的传统的自动化测试工具,如:Selenium,robotFramework,QTP等.QTP可以通过操作录制生成自动化用例脚本.生成的脚本与Selenium.robotFramework类似 ...
- APP移动端自动化测试工具选型“兵器谱”一览(主流开源工具)
(下面大多数工具都是开源工具,在github,码云等开源平台都能找到) "测试那点事儿”在看到360旗下的测试团队整理的关于目前APP移动端自动化相关的工具,觉得总结的很到位,对目前大多数中 ...
- 支付宝开源非侵入式 Android 自动化测试工具 Soloπ
Soloπ(SoloPi)是支付宝开源的一个无线化.非侵入式的Android自动化测试工具,公测版拥有录制回放.性能测试.一机多控三项主要功能,能为测试开发人员节省宝贵时间. 本文是SoloPi团队关 ...
- Android 手机自动化测试工具有哪几种?
1.Monkey是Android SDK自带的测试工具,在测试过程中会向系统发送伪随机的用户事件流,如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试,也有日志输出.实际上该工 ...
- 前端自动化测试工具doh学习总结(一)
前言 项目中需要用到前端自动化测试,自己被当作一个探针研究了下目前用的比较多的web自动化测试工具.一开始研究的是的selenium,但由于项目使用了大量的dijit控件,写起testCase来很费劲 ...
- 自动化测试工具QTP和SilkTest横向PK(转)
转自:http://www.uml.org.cn/Test/201405212.asp?artid=1686 众所周知,自动化测试工具曾几何时三足鼎立,Mercury QTP/WinRunner系.I ...
- 常用自动化测试工具介绍(支持B/S、C/S)
一.功能测试工具1.QTP测试工具 全名HP QuickTest Professional software ,最新的版本为HP QuickTest Professional 11.0 QTP是qui ...
- 老李分享:android app自动化测试工具合集
老李分享:android app自动化测试工具合集 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨 ...
- 工欲善其事,必先利其器 软件工具开发关键词 protractor自动化测试工具 RegexBuddy正则 CodeSmith,LightSwitch:代码生成 CheatEngine:玩游戏修改内存值必备神器 ApkIDE:Android反编译工具 Reflector:反编译dll动态链接库
工欲善其事,必先利其器 本文版权归翟士丹(Stan Zhai)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利. 原文地址:http ...
随机推荐
- linux下安装Oracle时交换空间不足的解决方法
摘:linux下安装Oracle时交换空间不足的解决方法 linux上安装Oracle时交换空间不足的解决办法 增加交换空间有两种方法: 严格的说,在系统安装完后只有一种方法可以增加swap,那就是本 ...
- CAP原理中的一致性
CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾.因此在进行分布式架构设计时,必须做出取舍.而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值.因此设计分布式数据系统,就是在 ...
- 关于Unity的两种调试方法
Unity的两种调试方法 1.Debug.Log()输出语句调试,平时经常用这个 2.把MonoDevelop和Unity进行连接后断点调试 先把编辑器选择为MonoDevelop,Edit----& ...
- 很好的git教程
http://www.liaoxuefeng.com/这里的git教程很好,我是从这入的门.
- Ubuntu 设置NAT共享网络(命令行方法)
本文介绍如何使用iptables来实现NAT转发,事实上就是将一台机器作为网关(gateway)来使用.我们假设充当网关的机器至少有网卡eth0和eth1,使用eth0表示连接到外网的网卡,使用eth ...
- [PGM] Temporal Models
这里的一些东西只是将过去已有的东西用PGM解释了一遍,但优势还是明显的,对整体认识有帮助. Video: https://www.youtube.com/watch?v=ogs4Oj8KahQ& ...
- rar压缩find查找到的文件
find . -name 'CMakeLists.txt' | xargs /d/Program\ Files/WinRAR/rar.exe a -r ./out.rar $ ------------ ...
- MassTransit入门
.NET平台ESB框架的中文资料少的可怜,NServiceBus的有几篇,MassTransit的根本找不到,只好硬着头皮看官方的英文文档,顺便翻译出来加深理解. 欢迎拍砖. MassTransit是 ...
- 关于web标准的一些想法
关于web标准的一些想法 页面结构,表现,行为的关系.应该是各自分离又紧密联系的关系.从代码上分离出来.各自完成各自的功能,方便以后维护.紧密联系是指他们是相互依赖的.结构是核心,虽然从理论上讲不管什 ...
- iOS - 极光推送证书的创建及过期处理
无论iPhone还是安卓,我们用到的所有应用基本都有推送通知服务,因为这是应用很好的推广方式,有新产品了.有新更新了通知下用户及时查看.但Apple有点特殊,它的推送需要发到苹果服务器上中转一下,这就 ...