📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
一般在软件发布之前,都会经过单元测试, 接口测试, 集成测试, 性能测试等。但是这些测试往往都是基于自己定义的测试数据集合,很可能会有漏网之鱼,那么在软件上线之后,在线上流量冲击下,会出现各种之前测试中并没有发现的问题。这是因为线上的流量数据比测试的数据更加多样性,并且随着用户数量的增加,线上流量的也越来越大,更多的隐藏问题也会暴露,比如并发处理不当导致的Crash。那么我们有什么方法能够在上线之前完成这些测试呢?就是借助流量回放工具。
GoReplay流量回放工具
GoReplay工具是go语言编写的一个http实时流量复制工具。功能强大,支持流量的放大、缩小、频率限制,还支持把请求记录到文件,方便回放和分析。
goplay工具不是代理,而是监听网络上的流量,不需要更改生产基础架构,而是在与服务相同的计算器上运行goplay守护程序。
1)安装部署
1- 安装golang依赖环境:因为这个工具是go语言开发的,所以需要安装go的依赖环境
-
yum install -y epel-release
-
yum install -y golang
-
校验是否安装成功:go version
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的版本号信息
2)流量的录制:
在链路的起点进行录制:比如Nginx网关上进行录制:./gor -input-raw :8082 -output-file requests.gor
-
输入的是8082的端口的所有流量
-
输出到文件:requests.gor 里, 文件会自动加一个后缀:requests_0.gor
可以cat查看一下这个文件内容:录制其实就是把http请求的信息保存下来了
3)流量的回放
切换到另外一个复刻的项目服务器:也需要安装goreplay的依赖和工具
-
./gor -input-file requests.gor -output-http "http://ip:8082"
所有保存在requests.gor中的请求通过相同的时间顺序请求到指定的服务器。【另外一个台服务器需要复刻好用户或者生产的环境】
生产环境的录制文件拉取下来,放到专门用于流量回放的服务器里
注意:不要直接在生产环境里回放流量,因为流量回放本质就是goreplay发起请求,你放在生产环境里直接回放影响生产环境的性能 ,因为goreplay发起请求需要占用资源。
而且,这个工具需要回放的环境跟录制的环境 保持一致,包括数据和整个链路。不然回放不成功。
4)Goreplay工具的其他一些用法:
1)捕获流量并实时打印到屏幕上:【不是输出到文件】:
-
./gor -input-raw :8082 -output-stdout
-
监控8082的端口上所有的流量,并通过终端stdout输出 也就是输出到屏幕
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%免费】