1 介绍

gor是golang实现的http流量复制和压测工具.可以将生产环境的http流量环境和预发布环境重现.

2 基本原理

在代理例如nginx入口服务器上执行一个进程,监听端口请求,复制请求,根据命令配置请求到其他机器

原理图:

3 安装方式

wget https://github.com/buger/goreplay/releases/download/v1.1.0/gor_1.1.0_x64.tar.gz tar -zxvf gor_1.1.0_x64.tar.gz cp gor /usr/bin/ #将解压后的gor文件复制到/usr/bin下可以直接使用gor gor -h  #可以展示命令参数解释

参考安装方式,将gor打到服务的docker镜像中

4 使用场景

  • 测试报了一个bug,需要复现,直接可以页面操作,将请求复制调用到本地,本地debug,不影响前端界面原有请求调用. 使用Gor可以过滤某些类型请求或者匹配某路径请求

  • 直接复制增大某环境的请求对某台机器服务做压测

5 基础玩法

5.1 简单的HTTP流量复制

将本机上8080端口的流量全部复制到172.20.91.28的8080端口

gor --input-raw :8080 --output-http 'http://172.20.91.28:8080'

5.2 HTTP流量复制频率控制

将本机上8080端口的流量复制到172.20.91.28的8080端口,每秒请求不超过10个

gor --input-tcp :8080 --output-http "http://172.20.91.28:8080|10"

5.3 将本机上8080端口的流量复制到172.20.91.28的8080端口,每秒请求不超过总数的10%

gor --input-raw :8080 --output-http "http://172.20.91.28:8080|10%"

5.4 HTTP流量复制输出到文件

gor --input-raw :8080 --output-file req.log

5.5 通过HTTP流量回放进行压力测试

gor --input-file 'req.log|200%' --output-http 'http://172.20.91.28:8080'

5.6 过滤指定url,进行HTTP流量复制

gor --input-raw :8080 --output-http 'http://172.20.91.28:8080' --http-allow-method GET --http-allow-url '^[/auth/v1/].*?[/roles]$'

5.7 过滤请求头,进行HTTP流量复制

gor --input-raw :8080 --output-http 'http://172.20.91.28:8080' --http-allow-header api-version:^1\.0\d

5.8 过滤http方法,进行HTTP流量复制

gor --input-raw :8080 --output-http "http://172.20.91.28:8080" --http-allow-method GET --http-allow-method OPTIONS

5.9 将HTTP流量进行url重写后再复制

gor --input-raw :8080 --output-http 'http://172.20.91.28:8080' --http-rewrite-url /v1/user/([^\\/]+)/info:/v2/user/$1/info

6 其他

场景: 内网环境ip直接调用调不通,网络分区 做法: 两种方式

1) 打开网络分区的限制

2) 写一个请求转发脚本,运行在docker服务,连接docker地址和端口访问然后拦截某个请求将请求转发到本地

过程: 本地写好了go的脚本,编译成二进制文件,将二进制文件上传到自己gitlab的仓库,然后服务镜像构建的时候git clone下这个文件,将文件打包到镜像内部

进入容器执行如下命令:

./fowardServer --targetHost=172.20.91.28:8080 --url=/auth/v1/roles

可以将请求转发到自己目标的地址跟前端联调

参考链接

https://github.com/buger/goreplay

gor工具在测试和压测场景的应用相关推荐

  1. 从零开始自制实现WebServer(十八)---- 对服务器做最后的压力测试 WebBench压测小工具 项目迎来终章

    文章目录 全流程实现博客链接 前引 (十八)---- 对服务器做最后的压力测试 WebBench压测小工具 项目迎来终章 1.正确处理Vmware-Station 处理器设置(初步调试过程) 2.正确 ...

  2. 压测场景下的 TIME_WAIT 处理

    简介:压测场景下的 TIME_WAIT 处理 1. 序 某专有云项目具备压测场景,在Windows的压测机上用 LoadRunner 进行业务的压力测试,压测运行一段时间后出现大量端口无法分配的报错. ...

  3. 【性能测试】性能需求挖掘、性能方案制定及压测场景设计之疑惑与思考(一)

    压力测试 模拟用户在同一时间对服务器发送大量请求,以此查看服务器性能指标,尤其关注大业务量情况下运行系统性能的变化(反应变慢.是否会内存泄漏导致系统逐渐崩溃.是否能恢复),测试系统的限制和故障恢复能力 ...

  4. jmeter一个线程组多个请求_Jmeter模拟真实用户压测场景之阶梯螺纹线程组、终极线程组、并发线程组实例...

    我们有时需要模拟非常真实复杂的用户压测场景,可以用到此插件来设计场景 1.安装插件,选项--Plugins Manager打开安装页面 2.搜索standard set并安装,重启jmeter,查看测 ...

  5. linux tcp压测工具,02.监控和压测工具 - 2.4.压测工具 - 《Linux性能调优指南》 - 书栈网 · BookStack...

    压测工具其它有用工具 在这里,我们会讨论主要的压力测试工具,选择合适的压测工具,才能准确衡量系统性能.好的压测工具有很多,可能的功能如下: 发起压力 监控性能 监控系统使用率 生成报告 基准测试无非就 ...

  6. 从入门到精通进阶篇 - 设置负载阶梯式压测场景(详解教程)

    1.简介 在性能测试中,有时需要模拟一种实际生产中经常出现的情况,即:从某个值开始不断增加压力,直至达到某个值,然后持续运行一段时间,然后继续加压达到某个值持续运行,如此循环直到达到预期的峰值,运行一 ...

  7. Kafka压力测试(写入MQ消息压测和消费MQ消息压测)

    1.测试目的 本次性能测试在正式环境下单台服务器上Kafka处理MQ消息能力进行压力测试.测试包括对Kafka写入MQ消息和消费MQ消息进行压力测试,根据10w.100w和1000w级别的消息处理结果 ...

  8. jmeter constant timer 如何添加_阿里巴巴在开源压测工具 JMeter 上的实践和优化

    Apache JMeter 是 Apache 旗下的开源压测工具,创建于 1999 年初,迄今已有超过 20 年历史.JMeter 功能丰富,社区(用户群体)庞大,是主流开源压测工具之一. 性能测试通 ...

  9. tcp压测工具_【解决方案】性能压测及分析调优实践

    [关键导读]结合一次重保活动的性能压测需求,详解了整体的性能测试策略及性能分析思路,并在实施过程中有效利用了网易易测的NPT性能测试平台一站式完成了压测场景设计.执行.业务指标监控.性能指标分析等活动 ...

最新文章

  1. 图像变换——等距变换,相似变换,仿射变换,投影变换
  2. java 多线程bean 注入_java多线程中注入Spring对象问题
  3. php lumen auth,学习 Lumen 用户认证 (一)
  4. 【SRIO】3、RapidIO串行物理层的包传输过程
  5. UA MATH563 概率论的数学基础 中心极限定理10 Borel-Cantelli引理
  6. 二维指针*(void **)的研究(uC/OS-II案例)
  7. 数据结构与算法 | 归并排序
  8. Spring boot + maven
  9. Unknown symbol platform_driver_unregister (err 0)
  10. Linux之文件系统介绍
  11. iOS 11.2 版本紧急修复黑屏 Bug,却遇 FaceID 识别错误,真实原因在此
  12. CCCC-GPLT L2-017. 人以群分 团体程序设计天梯赛
  13. Linux环境Eclipse + Tomcat + MySQL 构造J2EE方法开发环境
  14. java游戏初始化参数过多,从头认识java-4.6 成员的初始化
  15. oracle查询耗资源的进程,常用Oracle进程资源查询语句(运维必看)
  16. python指纹识别_指纹识别是目前最成熟的识别技术!Python能分分钟做出一个来!...
  17. 安装Selenium+Firefox+Firepath+Firebug
  18. appium for java教程_Java教程:Appium环境搭建
  19. 15个快速学习苹果Swift编程语言的入门教程
  20. c语言智能小车项目的感想,基于51单片机的遥控智能小车实作心得

热门文章

  1. 网址被QQ拦截后应该怎么做才可能尽快解除拦截
  2. steamvr自定义按键_SteamVR插件详解:SteamVR_Controller
  3. 花谢花飞花满天,红消香断有谁怜?
  4. 电压电流双环控制PI参数计算01
  5. 棱镜产研 | PJP-片区划分,降本增效覆盖大市场
  6. 代理模式【Proxy Pattern】
  7. 【Orcale】------- Orcale 实现中文转拼音/缩写大小写/全拼音大小写
  8. autoHotkey进阶 --- 用于访问窗口对象-acc库的简单配置
  9. 最好的免费图像托管网站
  10. 猿创征文|工作中遇到技术盲区后的自我成长