背景
作为一名测试工程师,相信您一定曾经遇到过类似这样的场景:
场景一:已经按照评审过的测试用例完成所有的测试,并且也包含了异常逻辑的测试覆盖,但是版本发布,或者服务上线后可能还是出现了各种问题,导致不得不回退版本或者紧急上线修复。一旦发生这种事情不仅会对业务正常运营造成严重的影响,测试人员甚至会对自己的测试能力产生怀疑,形成恶性循环。究其根本原因,还是在于没有能够全部覆盖到用户的各种场景,越是功能复杂的软件越容易发生类似问题;为了减少这种影响,我们需要在上线之前尽量模拟真实用户操作,来校验程序是否正确稳定。
场景二:在对系统进行压测时,我们常常需要构造大量的真实数据,以便于系统能够真实的反响压测效果,那么如何构造真实用户请求呢?
这时我们就可以通过tcpcopy引流的方式,将线上真实的用户请求信息导入到测试环境中,模拟海量的真实场景来测试系统,天然解决了海量测试Case的构造问题;通过导流的方式提前校验待上线的版本是否有异常,效果如何,提前发现问题,增加上线信心,减少上线回滚率
tcpcopy 介绍
tcpcopy是一种请求复制(所有基于tcp的packets)工具,可以把在线流量导入到测试系统中去,曾经应用于网易的广告投放系统,urs系统,nginx hmux协议等系统,避免了上线带来的很多问题。现在此工具已经广泛应用于各大互联网公司
tcpcopy优势
tcpcopy是一个分布式在线压力测试工具,可以将线上流量拷贝或者回放到测试机器,实时的模拟线上环境,达到在程序不上线的情况下实时承担线上流量的效果,尽早发现 bug,增加上线信心。
与传统的压力测试工具相比,tcpcopy的最大优势在于其实时及真实性,除了少量的丢包,完全拷贝线上流量到测试机器,真实的模拟线上流量的变化规律。
tcpcopy 工作原理
组成结构
tcpcopy分为客户端(tcpcopy)和服务器(intercept)
客户端运行在线上服务器上面,用来捕获线上请求数据包;其中客户端运行在线上服务器上面,用来捕获线上请求数据包;服务器运行在测试机器上面,在测试服务器的响应包丢弃之前截获测试服务器的响应包,并通过客户端和服务器之间的tcp连接传递响应包的tcp和ip头部信息给客户端,以完成TCP交互。
tcpcopy有多个版本,不同版本的使用和操作不太一样,小编在这里简单做下介绍:
0.9版本:
主要基于2台服务器做的流量转发,
优点:需要的机器少;支持赋值多台在线流量
缺点:执行intercept时需要设置iptables,这时候如果未释放iptables时,测试环境下的当前端口不能被外部调用
1.0