全链路压测:性能测试的流量录制和回放

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


一般在软件发布之前,都会经过单元测试, 接口测试, 集成测试, 性能测试等。但是这些测试往往都是基于自己定义的测试数据集合,很可能会有漏网之鱼,那么在软件上线之后,在线上流量冲击下,会出现各种之前测试中并没有发现的问题。这是因为线上的流量数据比测试的数据更加多样性,并且随着用户数量的增加,线上流量的也越来越大,更多的隐藏问题也会暴露,比如并发处理不当导致的Crash。那么我们有什么方法能够在上线之前完成这些测试呢?就是借助流量回放工具。

GoReplay流量回放工具

GoReplay工具是go语言编写的一个http实时流量复制工具。功能强大,支持流量的放大、缩小、频率限制,还支持把请求记录到文件,方便回放和分析。

goplay工具不是代理,而是监听网络上的流量,不需要更改生产基础架构,而是在与服务相同的计算器上运行goplay守护程序。

1)安装部署

1- 安装golang依赖环境:因为这个工具是go语言开发的,所以需要安装go的依赖环境

  • yum install -y epel-release

  • yum install -y golang

  • 校验是否安装成功:go version

Image.png

2- Goreplay下载安装:

  • https://github.com/buger/goreplay/releases 从官网下载安装包:gor_1.3.3_x64.tar.gz

  • 创建goreplay这个文件夹:mkdir goreplay

  • 把下载的安装解压到指定目录:tar -xzvf gor_1.3.3_x64.tar.gz -C ./goreplay

  • 进入解压后的文件夹,执行这gor可执行文件:./gor

3- 运行校验:./gor version:会看到gor的版本号信息

Image.png

2)流量的录制:

在链路的起点进行录制:比如Nginx网关上进行录制:./gor -input-raw :8082 -output-file requests.gor

  • 输入的是8082的端口的所有流量

  • 输出到文件:requests.gor 里, 文件会自动加一个后缀:requests_0.gor

可以cat查看一下这个文件内容:录制其实就是把http请求的信息保存下来了

Image.png

3)流量的回放

切换到另外一个复刻的项目服务器:也需要安装goreplay的依赖和工具

  • ./gor -input-file requests.gor -output-http "http://ip:8082"

所有保存在requests.gor中的请求通过相同的时间顺序请求到指定的服务器。【另外一个台服务器需要复刻好用户或者生产的环境】

Image.png

生产环境的录制文件拉取下来,放到专门用于流量回放的服务器里

注意:不要直接在生产环境里回放流量,因为流量回放本质就是goreplay发起请求,你放在生产环境里直接回放影响生产环境的性能 ,因为goreplay发起请求需要占用资源。

而且,这个工具需要回放的环境跟录制的环境 保持一致,包括数据和整个链路。不然回放不成功。

4)Goreplay工具的其他一些用法:

1)捕获流量并实时打印到屏幕上:【不是输出到文件】:

  • ./gor -input-raw :8082 -output-stdout

  • 监控8082的端口上所有的流量,并通过终端stdout输出 也就是输出到屏幕

Image.png

2)捕获流量并实时同步到另外的机器:

  • ./gor -input-raw :8082 -output-http "[http://192.168.61.155:8082](http://192.168.61.155:8082/)"

  • 将8082端口的流量实时同步访问http://192.168.61.155:8082

    • 要确保两台机器的复刻数据和服务,并且网络是通的

    • 两边实时同步。

3)将捕获到的流量回放到多台服务器:

  • ./gor -input-raw :8082 -output-http "[http://192.168.61.155:8082](http://192.168.61.155:8082/)" -output-http "[http://192.168.61.156:8082](http://192.168.61.155:8082/)"

  • 可以加上多台回放机器:默认会向所有输出机器发送相同的的流量,但是可以进行流量切割:

    • --split-output 选项将其平均分配:./gor -input-raw :8082 -output-http "[http://192.168.61.155:8082](http://192.168.61.155:8082/)" -output-http "[http://192.168.61.156:8082](http://192.168.61.155:8082/)" --split-output true

4)请求过滤:不想要捕获所有的流量,过滤你想要的流量进行捕获。【这个参数跟位置没有关系 前面后面都可以】

  • 1-按照method进行过滤:./gor -input-raw :8082 -output-http "[http://192.168.61.155:8082](http://192.168.61.155:8082/)" --http-allow-method GET

    • 过滤只有GET请求会被捕获并回放,在目标机器里只能看到get请求的回放。【POST就会只回放捕获post的请求,这个一定要大写才可以识别】

  • 2-按照path进行过滤:

    允许指定path路径:./gor -input-raw :8082 -output-http "   [http://192.168.61.155:8082](http://192.168.61.155:8082/)" --http-       allow-url /user/login

  • 不允许指定path:./gor -input-raw :8082 -output-http "   [http://192.168.61.155:8082](http://192.168.61.155:8082/)" --http-       disallow-url /user/login

    • 只有接口地址为 /user/login -登录请求才不会被捕获和回放

    • 只有 接口地址为 /user/login -登录请求才会被捕获和回放

5)限速机制:可以在回放的时候限制每秒请求数

  • 每秒请求数限制2个以内:./gor -input-raw :8082 -output-http "http://192.168.61.155:8082|2"

    • 回放机器上就只会看到每秒2个请求

6)流量回放频率控制:可以进行性能测试加速,只能通过文件进行回放加速

  • ./gor -input-file "requests.gor|200%" -output-http "[http://192.168.61.155:8082](http://ip:8082/)"

7)循环使用文件进行回放:-input-file-loop ,重复使用数据进行压测

  • ./gor -input-file "requests.gor" -output-http "[http://192.168.61.155:8082](http://ip:8082/)" -input-file-loop

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​
在这里插入图片描述​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值