“生产引流测试”的方法,这种方法的本质就是把生产系统发生的一切复制到测试系统上来。这种测试方法适合有大量用户的系统,如电商网站、电信计费系统、大型控制系统(如机场调度系统)等。这么做有两个好处:
能够让系统在真正上线以前就能够真正经受实践检验。多年来的测试实践告诉我们,测试永远是抽样活动,即使经过很大强度的充分测试,很多大型系统上线后仍然马上会产生这样那样的问题,有时候这些问题往往是致命的。
不会象灰度发布那样拿部分用户当小白鼠,引发部分客户不满;其实要实现灰度发布在一定程度上会增加系统架构复杂性,不是哪个公司都能玩得转。
当然生产引流测试必须满足一个前提:那就是已经有了生产系统,在特性升级或者技术重构的时候使用这招。 ^_^|||
生产引流测试的用法一般有如下几种:
非功能测试(主要是性能测试),看看将生产系统的压力引到测试系统后,测试系统会不会产生性能问题。这种测试往往非常有效,因为,我们做性能测试也是非常有局限性的:场景选取不可能跟真实用户带来的压力完全一致;网络、硬件环境也可能不一样;某些超大型网站根本没办法模拟那么大的压力,只能依靠缩量模型做测试并估算真实的性能。
非功能测试不太关注业务逻辑的正确性,因此我们可以从网络层进行生产引流,这样效率更高,模型更加简单。目前有一个非常不错的工具tcpcopy,非常适合web类产品。它的工作原理可见下图:
部署一个agent在onlineserver上。从tcp层截取数据包,然后生成向Testserver的请求数据包(通过换网络传输的数据包的包头),这样压力就传导到了Testserver上。Testserver的响应数据包被 Assistant server截获,截获后拆包,删除包中内容(减小部署在Online Server端agent的压力),封包,回复给Online Server上的agent(TCP协议要求必须有来有回)。Tcpcopy在网易,淘宝,去哪儿等很多公司都得到了非常好的应用,目前国外也有很多用户开始使用这个工具了,如果大家有兴趣可以查看作者在Github上的页面https://github.com/wangbin579/tcpcopy 或者作者的博客:http://my.csdn.net/wangbin579 很赞作者王斌!
功能测试
对于功能测试,单纯的使用tcpcopy就有些不足了。因为功能测试关注业务逻辑,我们一般要对结果内容进行比对,而不是简单的抛弃。而在网络层进行内容比对代价是非常大的,有时候是不可完成的任务,如非web类产品;另外,不同的技术架构造成了某些内容是无法简单在网络层复制的,如某些加密信道传输的内容、包含了认证信息的内容、对目标机器信息有依赖的内容。这样,我们就需要在应用层想办法,而不是在网络层。一般我们会在应用层加一个代理将请求和响应进行复制,这个代理根据被测系统的技术架构不同而不同,比如web服务器,可以搞一个反向代理来做这件事儿;银行、电信用的多的Message Queue 可以采取pubsub的模式;可以在交易中间件、企业总线上做一些改造,只要系统设计的不是太难搞,办法总是有的。
下面给出一个最简单的模型:它描述了技术重构的系统(功能上无变化)进行生产引流测试的思路。
实时对比:
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- Java NoSQL 分布式部署的具体步骤是怎样的?(java nosql分布式部署如何进行)
- Java 依赖倒置原则的作用究竟是什么?(java依赖倒置的作用是什么)
- Redis客户端日志分析技巧:提升数据监控与性能优化
- Java Quarter 数据校准的详细步骤及技巧(java quarter如何进行数据校准)
- Java 中线程间通信的方法有哪些?(java线程间通信的方法是什么)
- Java 多线程批量处理的方法究竟有哪些?(java多线程批量处理的方法是什么)
- Java 中 BigDecimal 的详细介绍与实用使用方法(java中BigDecimal的介绍及使用)
- 如何通过 JavaScript 事件循环来优化代码?(JavaScript 事件循环如何优化代码)
- 如何用 Java 解析 XML 并获取标签属性值?(java怎么解析xml获取标签属性值)
- Java 中实现 MapReduce 的具体方法有哪些?(java实现mapreduce的方法是什么)