Goreplay使用教程0221
1、简介
Goreplay 是用 Golang 写的一个HTTP 实时流量复制工具。功能更强大,支持流量的放大、缩小,频率限制,还支持把请求记录到文件,方便回放和分析,也支持和 ElasticSearch 集成,将流量存入 ES 进行实时分析。
GoReplay 不是代理,而是监听网络接口上的流量,不需要更改生产基础架构,而是在与服务相同的计算机上运行 GoReplay 守护程序。
特点:简单易用,与TCPCopy 相比它的架构更简单,只有一个 gor 组件,如下:
只需要在生产服务器上启动一个gor 进程,它负责所有的工作包括监听、过滤和转发。它的设计遵循 Unix 设计哲学:一切都是由管道组成的,各种输入将数据复用为输出。
安装方式
安装go语言环境
Go语言包下载地址:https://studygolang.com/dl
解压安装:
tar -C /usr/local -zxvf go1.14.4.linux-amd64.tar.gz
配置环境变量:
# 打开
vim /etc/profile
# 添加
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
# 编译生效
source /etc/profile
验证go版本:
[root@vm ~]# go version
go version go1.15.5 linux/amd64
安装goreplay
下载二进制包:https://github.com/buger/gor/releases
下载1.3.3版本,解压后即为可执行文件。2.0的包是源码,安装时需要下载一些包,内网无法安装。
使用方式
监听本地服务端口 8082 流量保存到本地的文件
sudo ./gor --input-raw :8082 --output-file=requests.gor
将流量从文件回放到其他服务
./gor --input-file requests_0.gor --output-http="http://172.16.106.237:8082"
将 http 的请求打印到终端:
sudo ./gor --input-raw :8082 --output-stdout
将 http 的请求实时转发到其他服务
sudo ./gor --input-raw :8082 --output-http="http://172.16.106.237:8082"
压力测试:
将流量放大或减少转发给其他服务端口:
./gor --input-file "requests.gor|200%" --output-http="http://172.16.106.237:8082"
./gor --input-file "requests.gor|20%" --output-http="http://172.16.106.237:8082"
4、其他功能
过滤指定请求
gor --input-raw :80 --http-allow-method GET --output-http http://target_server:8080
gor --input-raw :8080 --output-http staging.com --http-allow-url /api
只收集请求头中符合 api-version 为 1.0x 的请求
gor --input-raw :8080 --output-http staging.com --http-allow-headerapi-version:^1\.0\d
对指定的header或url请求进行限流或者加速
gor --input-tcp :28020 --output-http"http://staging.com|10"# (每秒请求数限制10个以内)
gor --input-raw :80 --output-tcp"replay.local:28020|10%" # (每秒请求数限制10%以内)
gor --input-raw :80 --output-tcp"replay.local:28020|10%" --http-header-limiter "X-API-KEY:10%"
gor --input-raw :80 --output-tcp"replay.local:28020|10%" --http-param-limiter "api_key:10%"
将流量转发到多个站点
gor --input-raw :80 --output-http "http://target_server:8080"--output-http http://target_server2:8080
将相同的流量发送到多个站点,并且平分所有流量。
gor --input-raw :80 --output-http "http://staging.com" --output-http "http://dev.com"--split-output true
5、更多参考
https://www.cnblogs.com/Chary/p/16829396.html
http://www.manongjc.com/detail/60-lechphnhdwofesc.html
https://www.cnblogs.com/junethirty/p/13304774.html
6、使用思考
1、流量录制回放与传统接口自动化测试的区别?
流量录制回放提供了一种新的接口自动化测试方法。与传统接口自动化测试相比,流量回放最大的优势是降低了测试数据和用例编写的成本。利用流量即用例的思想,我们可以直接将线上流量转化成接口测试用例,从而避免了繁琐的测试数据准备和脚本编写工作。
同时,线上流量覆盖更全面、数据更真实,使用线上流量作为测试数据,与人工构造测试数据相比,能够更真实、更全面地覆盖业务场景,提升用例发现问题的能力。
但是由于录制流量的独立性,流量回放主要用于单接口测试。对于需要多个接口组合才能覆盖的测试场景,流量回放无法支持,需要采用传统的接口自动化测试方法。
2、流量筛选:流量录制回放提供了一种非常低成本的用例生成方法。然而,我们需要的不是一个随机的用例,而是能够增加测试覆盖的用例。如何从线上流量中去粗取精,挑选能够增加测试覆盖的流量进行回放,是流量筛选需要解决的关键问题。
3、很多时候需借助Mock
在流量回放中,由于读接口没有副作用,因此可以直接回放。对于写接口回放,则必须通过Mock方式对中间件进行隔离、避免脏数据产生。由于在录制流量的时候,我们可以同时录制所有子调用,进而利用录制的子调用自动生成Mock,因此是可以一定程度上降低Mock成本的。
Mock回放与非Mock回放的根本区别在于:Mock回放是白盒测试,而非Mock回放是黑盒测试。在非Mock回放中,用例只依赖接口的输入输出定义,不依赖接口内部代码实现;在Mock回放中,用例不仅依赖接口的输入输出定义,还依赖接口的内部实现,即接口对中间件、第三方等的调用详情。
对于Mock回放来说,其白盒测试固有性质除了会带来测试覆盖度降低(中间件变更无法被用例覆盖,存在漏测风险)之外,其最大挑战在于回放失败率上升及回放失败的排查成本高。
用例失败概率上升:非Mock回放,接口的输出不符合预期,用例就会失败;而Mock回放中,任何一个Mock子调用失败,都会导致用例失败。尤其当子调用数量多、链路易变的情况下,Mock回放用例失败概率会很高。
4、注意测试环境的影响。流量回放本质上是对比测试,而对比的数据是依赖于测试环境的。我们对比的数据应该来自同一套数据源或使用Mock,否则是没有办法进行对比的(因为没有可比性)。
5、最好确保被测环境与生产环境进行录制前状态一样,否则回放会因数据问题导致部分请求会失败。
相关文章:
Goreplay使用教程0221
1、简介Goreplay 是用 Golang 写的一个HTTP 实时流量复制工具。功能更强大,支持流量的放大、缩小,频率限制,还支持把请求记录到文件,方便回放和分析,也支持和 ElasticSearch 集成,将流量存入 ES 进行实时分…...

9、GPT-1-2-3
GPT GPT系列即基于Transformer Decoder实现的预训练语言模型,在各类复杂的NLP任务中都取得了不错的效果,如文章生成、代码生成、机器翻译,Q&A等。 对于一个新的任务,GPT仅仅需要非常少的数据便可以理解该任务,并…...

Python-四分位数计算
怎么计算四分位数先理解四分位数怎么计算:可参考https://zhuanlan.zhihu.com/p/235345817,假设数列一共有n个数1)当 (n1)/4可以整除时,Q1第在(n1)/4位Q2第 (n1)/2位Q3第(n1)/4*3位举…...

一个简单的步骤让你的 Python 代码更干净
说起来容易做起来难,我们都知道代码可读性非常重要,但是写的时候总是随心所欲,不考虑类型提示、import 排序、PEP8 规范。今天分享一个小技巧,通过一个简单的步骤就可以让你的 Python 代码更干净。这就是 pre-commit:可…...

linux集群技术(二)--keepalived(高可用集群)(一)
高可用集群简介keepalived简介 1.高可用集群简介 1.1什么是高可用集群 高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务&am…...

C++中的类型转换
目录 一、C语言中的类型转换 二、C中的类型转化 2.1 static_cast 2.2 const_cast2.2 const_cast 2.3reinterpret_cast 重解释转换 2.4 dynamic_cast 动态转换(!!!) 3. explicit 防止隐式类型转化 一、C语言…...
如何使用raw socket发送UDP报文
前面写的一篇《Linux下如何在数据链路层接收原始数据包》举了一个实例,使用raw socket接收UDP数据报,但是发送一个数据包比接收要复杂一些,本文以一个实例说明如何使用raw socket发送一个UDP报文。 1. 前言 阅读本文前可以考虑先阅读一下我的另外一篇文章《Linux下如何在数据…...

【C++】文件IO流
一起来康康C中的文件IO操作吧 文章目录1.operator bool2.C文件IO流3.文件操作3.0 关于按位与的说明3.1 ifstream3.2 ofstream流插入文本3.3 ostringstream/istringstream3.4 stringstream3.5使用stringstream的注意事项结语1.operator bool 之前写OJ的时候,就已经用…...

JavaScript高级程序设计读书分享之4章——4.2执行上下文与作用域
JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 执行上下文 变量或函数的上下文决定 了它们可以访问哪些数据,以及它们的行为。在浏览器中,全局上下文就是我们常说的 window 对象(第 12 章会详细介绍)&am…...
函数的定义与声明
目录 1.函数的定义 2.函数声明 2.1 函数本地声明 2.2 函数外部声明 2.2.1函数的外部声明的好处和坏处 3.变量定义与声明 3.1变量定义 3.2变量声明 4.结构体的定义与声明 4.1结构体的定义 4.2结构体的声明 1.函数的定义 函数的定义即函数的具体实现。 2.函数声明 函数…...
C#部署非安装版(绿色版)mysql
C#部署非安装版(绿色版)mysql场景实现步骤场景 项目由bs和cs端组成,bs端的数据存储在了mysql中,cs依赖bs运行,bs会显示一些实时的信息。 需求是给客户一个安装包,简易操作就可安装完成。 使用版本…...

【RecBole-GNN/源码】RecBole-GNN中lightGCN源码解析
如果觉得我的分享有一定帮助,欢迎关注我的微信公众号 “码农的科研笔记”,了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【RecBole-GNN/源码】RecBole-GNN中lightGCN源码解析 【RecBole-GNN/源码】RecBole-GNN中lightGCN源码解析 原文&…...

基于UIAutomation+Python+Unittest+Beautifulreport的WindowsGUI自动化测试框架common目录解析
文章目录1 框架工具说明2 技术栈说明3 框架截图4 源码解析/common目录4.1 common/baseinfo.py4.2 common/creenShot.py4.3 common/logOut.py4.4 common/reportOut.py4.5 common/sendMail.py注: 1、本文为本站首发,他用请联系作者并注明出处,谢…...

c++提高篇——queque容器
一、queque容器基本概念 Queue是一种先进先出(FIFO)的教据结构,它有两个出口 队列容器允许从一端新增元素,从另一端移除元素。队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为队列中进数据。 queque容器可以形象化为生活中…...

MyBatis-XML映射文件详解
一、XML 映射器 1.概述 使用 xml 文件去配置 SQL 代码,比传统的 jdbc 简单方便,能够少写代码,减少使用成本,提高工作效率。 1.1SQL 映射文件中的顶级元素 cache – 该命名空间的缓存配置。 cache-ref – 引用其它命名空间的缓…...

基于Java+SpringBoot+Vue+Uniapp前后端分离健身预约系统设计与实现
博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品:《微服务实战》专栏是本人的实战经验总结,《Spring家族及…...

webstom找不到vue全局组件
我真多服气,引入了自动组件注册 // 自动引入组建import { ElementPlusResolver } from unplugin-vue-components/resolversComponents({directoryAsNamespace: true,resolvers: [ElementPlusResolver()]}),生成了 components.d.ts 但是我在webstom中定义了标签 除非…...

ESP32设备驱动-内置霍尔磁力传感器数据读取
内置霍尔磁力传感器数据读取 文章目录 内置霍尔磁力传感器数据读取1、ESP32霍尔磁力传感器介绍2、软件准备3、硬件准备4、读取霍尔磁力传感值5、运行结果ESP32开发板具有内置霍尔效应传感器,可检测周围磁场的变化。本文将介绍如何在Arduino IDE中读取ESP32霍尔效应传感器的数据…...

2023面试准备之--mysql
文章目录mysql存储引擎索引聚簇索引和非聚簇索引事务锁MVCC机制(类似于copy on write)主从复制为什么要主从同步?怎么处理mysql的慢查询?mysql clint ---->server ----> 存储引擎 存储引擎 Innodb 是MySQL5.5版本及之后默…...

yolov5源码解读--训练策略
yolov5源码解读--训练策略超参数解读命令行参数train模型迭代超参数解读 hyp.scratch.yaml lr0: 0.0032 初始学习率 lrf: 0.12 使用余弦函数动态降低学习率(lr0*lrf) momentum: 0.843 动量 weight_decay: 0.00036 权重衰减项 warmup_epochs: 2.0 预热(…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...