tcpcopy-流量重放工具

1、简述:

tcpcopy是一种重放TCP流的工具,可使用真实环境的流量来测试互联网服务器上的应用程序。

2、描述:

大多数流量类产品的测试都无法做到全面性的请求模拟测试。尤其是在现在复杂的网络环境下,各种ddos,sql注入等网络攻击的手段千奇百怪。所以流量类产品上线前的测试更需要慎重对待。由此,tcpcopy应运而生。tcpcopy是一种请求复制(所有基于tcp的packets)工具,可以把在线流量导入到测试系统中去,甚至可以放大在线流量,为流量类产品的测试多加一层保障。

3、情景:

  • 分布式压力测试:(利用tcpcopy复制或放大生产流量,以触发验证高并发大流量场景下的bug)
  • 稳定性测试:(利用tcpcopy复制或放大生产流量,验证系统服务稳定性)
  • 回归测试:(利用tcpcopy复制生产流量,复现bug问题)
  • 性能比较:(利用tcpcopy复制或放大生产流量,验证新版本性能是否达标)

(tcpcopy实现流程图)

由上图可知,tcpcopy由两部分组成:tcpcopy和intercept。当tcpcopy在联机服务器上运行并捕获联机请求时,拦截在辅助服务器上运行,并执行一些辅助工作,例如将响应信息传递到tcpcopy。应该注意的是,测试应用程序在目标服务器上运行。

tcpcopy默认情况下使用原始套接字输入技术来捕获网络层的联机数据包并进行必要的处理(包括TCP交互模拟,网络等待时间控制和常见的上层交互模拟),并且默认情况下使用原始套接字输出技术来将数据包发送到目标服务器(图中粉红色箭头所示)。

在目标服务器上进行TCPCopy所需的唯一操作是设置适当的路由命令,以将响应数据包(图中绿色箭头所示)路由到辅助服务器。

拦截负责将响应头(默认情况下)传递给tcpcopy。通过捕获响应数据包,拦截程序将提取响应头信息,并使用特殊通道将响应头发送到tcpcopy(图中紫色箭头所示)。当tcpcopy接收到响应标头时,它将利用标头信息来修改联机数据包的属性,并继续发送另一个数据包。应当注意,来自目标服务器的响应被路由到辅助服务器,该服务器应充当黑洞。

4、安装及使用tcpcopy

所需环境:线上机器平台----辅助服务器----测试机器平台如机器资源有限,可将辅助服务器和测试机器归属于同一台或同一组机器

1.线上环境安装tcpcopy:

注:线上环境安装之前也应该先在测试环境测试安装,并且采用灰度安装的方式。

 wget https://github.com/session-replay-tools/tcpcopy/archive/1.0.0.tar.gztar xvf 1.0.0.tar.gzcd tcpcopy-1.0.0./configure --prefix=/opt/tcpcopy/makemake install

2.辅助机器安装intercept

 yum -y install libpcap-develhttps://github.com/session-replay-tools/intercept/archive/1.0.0.tar.gztar xvf 1.0.0.tar.gzcd intercept-1.0.0./configure --prefix=/opt/tcpcopy/makemake install

3.使用tcpcopy

首先需要在辅助服务器上启动intercept。(8000为流量端口,需根据实际情况自己设置)

 /opt/tcpcopy/sbin/intercept -i eth0 -F 'tcp and src port 8000' -d

参数详解:

  • -i, intercept会监听端口,和tcpcopy进行通信,-i就是指定监听在哪个端口。tcpcopy启动的时候会来连这个端口,如果连不上,就会启动失败。
  • -F, 过滤规则,语法和pcap一样。
  • -d, 已守护进程方式运行

再启动线上平台的tcpcopy

 /opt/tcpcopy/sbin/tcpcopy -x 8000-测试服务器ip:8000 -s 服务服务器ip -c 数据包原地址 -n 2 -d 
  • -x, 是指本机8000端口的流量copy到测试服务器的8000端口
  • -s, 指定intercept机器的地址,tcpcopy要和intercept建立连接
  • -c 伪装地址,在把流量复制到测试服务器的时候,修改数据包的源地址(建议为测试服务器同网段地址),这样方便指定路由。也可以写成192.168.2.x,这样源地址就是指定网段中的地址了。
  • -n 流量放大倍数,如果不是压测目的就不用指定这个参数。
  • -d 以守护模式运行。

最后一步,在测试服务器上开启路由

注:辅助服务器和测试服务器需要在一个子网下

 route add -net 测试服务器子网网段 netmask 255.255.255.0 gw 辅助服务器入口ip

此命令的意思是把发往整个子网地址的数据包全部转给辅助服务器(服务服务器还充当黑洞服务器的角色)

注意点:

  • 为保证线上稳定,使用tcpcopy前最好在测试环境多模拟安装使用几次。
  • 线上环境使用完tcpcopy后,建议灰度删除,避免不必要的影响
  • 辅助服务器还需要扮演一个黑洞角色,所以不能开启ip_forward

tcpcopy源码及文章参考:https://github.com/session-replay-tools/tcpcopy

本文分享自微信公众号 - 运维猫(centos15)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏橙子探索测试

【测试方法】业务流测试之场景法

你所认为的测试总是无脑的点点点,那就大错特错了,实际测试是有很多方法和依据的,今天我们先来看看场景法到底是怎么回事的?

7310
来自专栏橙子探索测试

【Python篇】unittest单元测试框架介绍及使用(一)

unitetest是python里单元测试框架,是基于 java 的 junit 测试框架 相当于是一个 python 版的 junit,除了 unittest...

13540
来自专栏cwl_Java

学习单元测试,你必须要懂得的基础理论

4910
来自专栏大数据在线

数据库性能评测真的很重要么?

国庆期间,最热闹的新闻莫过我国某数据库产品在TPC-C测试中勇夺性能第一的消息。该则消息的传播颇具争议性,引发了一场关于数据库的大讨论。事实上,数据库作为最重要...

8120
来自专栏CU技术社区

如何让你的代码更简洁?

“简洁代码”是我在写代码中一直以来遵循的一条理论。事实上,对于我来说,与其说是一种理论,不如说是一种信仰。他是这么一种理念——你的代码必须够简洁且尽可能接近于完...

4200
来自专栏橙子探索测试

【探索篇】发散思维假设分析推理之探索式测试(一)

一种即兴测试风格,类似错误猜测,依据经验和直觉快速生成用例,不断提出假设,根据逻辑分析和推理,反复调整测试策略,以很高的频率交替切换,逐步深入探索

5110
来自专栏CU技术社区

基准测试|Windows 10 vs Ubuntu 19.10 vs Clear Linux vs Debian 10.1

本周初,我为Firefox和Chrome提供了一些新的Windows vs. Linux Web浏览器基准测试。对于那些对当前Windows 10 vs.Lin...

11710
来自专栏软测小生

H5页面测试总结|干货

11010
来自专栏橙子探索测试

Python脚本做接口测试,抛弃接口测试工具是否可行?(一)

最近在学习python语言,一直再想,工作中经常性会去调试接口、测试接口,于是就思考一番,怎么能抛弃以前经常依赖使用工具做接口测试的局限性,换做python脚本...

10310
来自专栏橙子探索测试

【Fiddler篇】Stave插件之环境映射

Stave是一个Fiddler扩展插件,让Fiddler能将URL映射到本地目录,实现批量文件自动响应。

9110

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励