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

发布于 更新于
本文目录
  1. 前言
  2. GoReplay流量回放工具
  3. 1)安装部署
  4. 2)流量的录制:
  5. 3)流量的回放
  6. 4)Goreplay工具的其他一些用法:

技术文章接口测试

一般在软件发布之前,都会经过单元测试, 接口测试, 集成测试, 性能测试等。但是这些测试往往都是基于自己定义的测试数据集合,很可能会有漏网之鱼,那么在软件上线之后,在线上流量冲击下,会出现各种之前测试中并没有发现的问题。这是因为线上的流量数

前言

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

GoReplay流量回放工具

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

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

0w3l03vr.bmp

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的依赖和工具

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

Image.png

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

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

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

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

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

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

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

Image.png

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

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

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

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

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

  • 2-按照path进行过滤:

    • 允许指定path路径:./gor -input-raw :8082 -output-http "https://192.168.61.155:8082" --http-allow-url /user/login

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

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

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

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

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

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

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

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

来源:testingpai

继续阅读