• 流量回放工具:goreplay实战


    相信做性能测试的小伙伴们一定听说过流量复制回放,没听说过也没关系,我们大都是在性能测试环境完成压测任务出具性能测试报告

    但是实际生产环境的接口压力流量往往和我们在性能测试环境预估的情况不完全一致,甚至出现较大差异的情况,我们如何模拟出真实的压力流量,可以借助工具,例如早期用得较多的是tcpcopy,但其缺乏过滤HTTP层能力;

    推荐使用另外一款工具goreplay,简称gor,其特点如下:

    • 实现HTTP请求的录制以及回放,应用场景是在线上环境录制请求,然后在测试环境进行重放

    • 实现HTTP层面的流量过滤,只过滤出待测流量

    • 支持流量放大,可以应用于性能容量规划测试

    01、go环境准备

    gor是go语言实现的,要使用gor工具,需要提前准备go运行环境。

    具体操作步骤如下所示:

    1. # 解压缩 如下 gor工具包:
    2. # go1.18.linux-amd64.tar.gz、gor_1.3.3._×64.tar.gz
    3. tar -C /usr/local-zxvf go1.18.linux-amd64.tar.gz
    4. tar -zxvf gor_1.3.3._×64.tar.gz
    5. # 配置环境变量
    6. vim /etc/profile
    7. export GOROOT=/usr/local/go
    8. export PATH=$PATH:$GOROOT/bin
    9. # 执行编译生效
    10. source /etc/profile
    11. # 验证
    12. go env

    02、goReplay流量复制回放步骤

    首先是对生产环境进行流量复制操作,使用如下命令:

    1. # 流量复制
    2. ./gor --input-raw:8081 --output-stdout
    3. # 或者 流量复制并保存到文件(推荐)
    4. ./gor --input-raw:8081 --output-file "requests.gor"

    然后根据业务高峰期等待1小时,甚至更长时间,例如12小时,

    这个过程中会看到在gor运行目录下生成requests_0.gor,如果1个文件放不下,会继续生成_1、_2等录制文件。

    gor文件会记录整个录制过程中所有发的http协议请求,分批存到不同的gor文件中,按【ctrl+c】停止录制。

    然后是在性能环境进行流量回放操作,使用如下命令:

    1. #流量回放 默认回放等待5
    2. ./gor --input-file "requests_0.gor" --output-http "http://82.156.80.137:8082"
    3. 这样就能实现在8081生产环境录制的http流量,重新在性能环境8082上回放一遍,默认是每隔5秒发一次请求。
    4. 也可以设置回放倍速为5倍,并且循环发请求,使用如下命令:
    5. # 回放倍速5倍,并且循环(压测推荐)
    6. ./gor --input-file "requests_0.gor|500%" --output-http "http://82.156.80.137:8082" --input-file-loop
    7. 还可以使用如下流量回放命令:
    8. # 保留上次信息
    9. ./gor --input-raw:8081 --output-file "requests_0.gor" --output-file-append
    10. #实时回放
    11. ./gor --input-raw:8081 --output-http "http://82.156.80.137:8082"
    12. #缩容
    13. ./gor --input-raw:8081 --output-http "http://82.156.80.137:8082|50%" --input-file-loop
    14. #实时回放GET
    15. ./gor --input-raw:8081 --http-allow-method GET --output-http "http://82.156.80.137:8082"

    参数说明:

    • --http-allow-url 采用正则表达式,只抓取请求URL中匹配正则表达式的请求

      例如--http-allow-url .*test.*

      表示只抓取(或者说录制)请求URL中包含test的请求

    • --http-allow-header 采用正则表达式,只抓取请求header中匹配正则表达式的请求

      例如--http-allow-header api-version:^1\.0.\d

      表示录制请求头api-version: 以1开头,后面跟.0.,后面跟一个数字;

    • --http-allow-method 请求方法,只抓取http请求方法为指定的某个请求

      例如GET

      则为--http-allow-method GET


    绵薄之力

    最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走

    ​这些资料,对于想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….

  • 相关阅读:
    Qt QList类和QLinkedList类 详解
    华为又“捅破天”发布新品Mate60 Pro直连天通一号卫星通话,北斗卫星通信飞入寻常百姓家
    【数据库】之MYSQL基本语法
    vue中使用qrcodejs2-fix生成二维码
    优维低代码实践:图片和搜索
    C语言 —— 函数
    ETL工具与数据处理的关系
    开水果店需要知识有哪些,开水果店需要的水果资料有哪些
    学习笔记|秩相关分析|Spearman相关分析|Kendall相关分析|规范表达|《小白爱上SPSS》课程:SPSS第十九讲:秩相关分析怎么做?
    HDU——2097.sky数、2098.分拆素数和、2099.整除的尾数
  • 原文地址:https://blog.csdn.net/jiangjunsss/article/details/127749601