Skip to content

Sharingan(写轮眼)是一个基于golang的流量录制回放工具,适合项目重构、回归测试等。

License

Notifications You must be signed in to change notification settings

triplekill/sharingan

Repository files navigation

Sharingan

License

Sharingan,中文名:写轮眼,是漫画《火影忍者》中的一种瞳术,具有复制、幻术等能力,在幻术世界里,一切因素包括时间,地点,质量等,都由施术者掌控。

一、简介

Sharingan(写轮眼)是一个基于golang的流量录制回放工具,录制线上真实请求流量,在线下进行回放测试,适合项目重构、回归测试等。

1.1、背景

随着微服务架构的兴起,服务之间的依赖关系变的越来越复杂,软件测试也面临新的挑战:系统升级频繁、服务依赖众多等等。

  • 常见的测试方案(如:单元测试、系统测试等)构造和维护测试用例成本高,特别是业务复杂的场景。「构造测试数据
  • 依赖第三方服务众多,线下测试环境不太稳定,经常出现下游服务挂掉导致测试失败的情况发生。「维护测试环境成本

为此,我们需要开发一套工具解决上述问题。

1.2、方案

  • 录制线上服务真实请求流量(包括下游调用流量),在线下进行回放,解决构造测试数据难的问题。「复制能力」
  • 回放的时候匹配Mock下游调用,不再依赖具体的下游服务,解决维护测试环境成本高的问题。「幻术能力」

1.3、优势

  • 支持下游流量录制。相比tcpcopygoreplay等方案,回放不依赖下游环境。
  • 支持并发流量录制和回放。录制对服务影响小,回放速度更快。
  • 支持重置时间、去除噪音、批量回放、覆盖率报告、常见协议解析等等。
  • 不依赖业务框架,低应用浸入。

二、快速开始

2.1、使用示例

# Step1: 下载sharingan项目
$ git clone https://github.com/didi/sharingan.git
$ cd sharingan

# Step2: 使用定制版golang,以go1.13为例
$ sh install.sh go1.13 # 支持go1.10 ~ go1.14,限mac、linux amd64系统
$ export GOROOT=/tmp/recorder-go1.13
$ export PATH=$GOROOT/bin:$PATH

# Step3: 编译、后台启动replayer-agent「会占用3515、8998端口」
$ cd replayer-agent
$ go build
$ nohup ./replayer-agent >> run.log 2>&1 &

# Step4: 编译、后台启动example示例「会占用9999端口」
$ cd ../example
$ go build -tags="replayer" -gcflags="all=-N -l"
$ nohup ./example >> run.log 2>&1 &

# Step5: 打开回放页面
$ 浏览器打开,http://127.0.0.1:8998 # 非本机替换IP即可
$ 页面选择要回放的流量点执行          # 内置提前录制好的3条example示例流量

2.2、接入文档

先录制再回放

三、技术方案

3.1、模块划分

  • recorder: 流量录制包,录制流量本地文件存储、发送流量到录制agent等等。
  • recorder-agent:流量录制agent,单独进程启动,可以控制录制比例、流量存储等等。
  • replayer: 流量回放包,重定向连接到Mock Server、Mock时间、添加流量标识等等。
  • replayer-agent:流量回放agent,单独进程启动,可以查询录制流量、查询/上报噪音、流量diff、批量回放、生成覆盖率报告等等。

3.2、整体架构图

main

3.3、录制方案

  • 修改golang源码,对外暴露Hook接口。「所有改动通过官方测试用例」
  • 提供API串联不同goroutine之间的网络调用。「常见的http、mysql、redis流量都不需要特别设置」
  • 提供单独的agent筛选流量、控制比例。
  • 更多参考:流量录制实现原理

3.4、回放方案

  • 连接重定向:将服务所有Connect网络调用重定向到Mock Server。「安装replayer-agent时候自带」
  • 流量匹配:Mock Server会根据服务真实的下游请求匹配一个返回。「mock下游调用」
  • 重置时间:将程序执行时间回放到录制时刻,消除时间带来的干扰。
  • 去除噪音:提供API可以将已知的噪音流量去掉,如:traceID,每次请求本来就不一样。
  • 常见协议解析:会解析http、mysql、redis、thrift等协议,方便diff对比。
  • 更多参考:流量回放实现原理

四、效果展示

4.1、流量回放

4.1.1、单个回放

main

对于下游请求很多且复杂的情况,支持对下游协议进行筛选 main

4.1.2、批量回放

批量回放的并发度默认是10,可通过增加-parallel参数修改。 main

4.2、覆盖率报告

4.2.1、整体报告

覆盖率报告支持覆盖率结果累计,即支持 多次 单个回放和批量回放后,统一生成覆盖率结果。 main

4.2.1、覆盖详情

main

五、更多

5.1、如何贡献

欢迎大家参与进来,更多参考Contribute

5.2、许可

基于Apache-2.0协议进行分发和使用,更多参考LICENSE

5.3、感谢

特别感谢 TaoWen ,流量录制和回放初版设计者

5.4、联系我们

欢迎加入QQ交流群「群号:417146801」一起交流~

QQ

Tips:联系QQ群主可拉入微信交流群

About

Sharingan(写轮眼)是一个基于golang的流量录制回放工具,适合项目重构、回归测试等。

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 74.8%
  • Shell 11.0%
  • JavaScript 7.2%
  • HTML 6.8%
  • CSS 0.2%