• 性能压测工具:wrk


    一般我们压测的时候,需要了解衡量系统性能的一些参数指标,比如。

    1、系统性能的维度

    1.1 延迟

    简单易懂。green:一般指响应时间

    95线:P95。平均100%的请求中95%已经响应的时间

    99线:P99。平均100%的请求中99%已经响应的时间

    平均响应时间:所有请求的平均响应时间

    最大响应时间:所有请求中最大的响应时间

    1.2 吞吐量

    简单易懂。green:即每秒处理的请求数量

    对于查询搜索类的系统使用每秒处理的请求数(QPS)来衡量吞吐能力

    一般对于交易类的系统使用每秒处理的事务数(TPS)来衡量吞吐能力。

    TPS:每秒处理的事务数(比如每秒处理的订单数)

    QPS:每秒处理的请求数

    1.3 系统容量

    也叫做设计容量,可以理解为硬件配置(内存,cpu什么的),成本约束

    2、压测工具 wrk

    wrk 是一款针对 Http 协议的基准测试开源工具,它能够在单机多核 CPU 的条件下,使用red:系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产生大量的负载。

    wrk 目前仅支持单机压测,后续也不太可能支持多机器对目标机压测,因为它本身的定位,并不是用来取代 JMeter, LoadRunner 等专业的测试工具,wrk 提供的功能,对我们后端开发人员来说,应付日常接口性能验证还是比较友好的。

    wrk 只能被安装在类 Unix 系统上,所以我们需要一个 Linux 或者 MacOS 环境。Windows 10 安装需要开启自带的 Ubuntu 子系统。

    2.1 Linux 安装

    2.1.1 Ubuntu/Debian

    sudo apt-get install build-essential libssl-dev git -y
    git clone https://github.com/wg/wrk.git wrk-4.2.0
    
    • 1
    • 2

    上面两步是下载安装包的步骤,你也可以直接下载到本地后上传再解压

    tar -xvf wrk-4.2.0.tar.gz
    cd wrk-4.2.0
    make
    # 将可执行文件移动到 /usr/local/bin 位置,或者设置一个软连
    # sudo cp wrk /usr/local/bin
    ln -s /data/wrk-4.2.0/wrk /usr/local/bin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.2.2 CentOS / RedHat / Fedora

    sudo yum groupinstall 'Development Tools'
    sudo yum install -y openssl-devel git 
    git clone https://github.com/wg/wrk.git wrk-4.2.0
    
    • 1
    • 2
    • 3

    上面三步是下载安装包的步骤,你也可以直接下载到本地后上传再解压

    tar -xvf wrk-4.2.0.tar.gz
    cd wrk-4.2.0
    make
    # 将可执行文件移动到 /usr/local/bin 位置,或者设置一个软连
    # sudo cp wrk /usr/local/bin
    # 或者设置一个软连也可以,两种方法自行选择。
    ln -s /data/wrk-4.2.0/wrk /usr/local/bin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.2 MacOS 安装

    Mac 系统也可以通过先编译的方式来安装,但是更推荐使用 brew 的方式来安装, 步骤如下:

    安装 Homebrew,安装方式参考官网 https://brew.sh (也就一行命令的事);

    安装 wrk: brew install wrk;

    3、使用 wrk

    使用方法: wrk <选项> <被测HTTP服务的URL>
    使用方法: wrk <选项> <被测HTTP服务的URL>                            
      Options:                                            
        -c, --connections <N>  跟服务器建立并保持的TCP连接数量  
        -d, --duration    <T>  压测时间           
        -t, --threads     <N>  使用多少个线程进行压测   
                                                          
        -s, --script      <S>  指定Lua脚本路径       
        -H, --header      <H>  为每一个HTTP请求添加HTTP头      
            --latency          在压测结束后,打印延迟统计信息   
            --timeout     <T>  超时时间     
        -v, --version          打印正在使用的wrk的详细版本信息
                                                          
      <N>代表数字参数,支持国际单位 (1k, 1M, 1G)
      <T>代表时间参数,支持时间单位 (2s, 2m, 2h)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3.1 命令简单的压测

    简单进行一次压测,用10个线程,200个连接,对百度进行30s的压测。以下是对压测结果

    wrk -t 10 -c 200 -d 30s --latency  http://www.baidu.com
    # 结果如下:
    Running 30s test @ http://www.baidu.comm/
    # 30s内测试百度的结果
    
      12 threads and 400 connections
      # 用12个线程 400个连接测试
    
      Thread Stats   Avg      Stdev     Max   +/- Stdev
        Latency    92.44ms  100.49ms   1.35s    91.97%
        Req/Sec   431.84    159.53     1.37k    72.45%
        # 用表格解释
    
      Latency Distribution
      # 响应时间-延迟分布明细
         50%   64.42ms # 有50%的请求执行时间是在64.42ms内完成
         75%   87.76ms
         90%  157.02ms
         99%  581.42ms # 有99%的请求执行时间是在581.42ms内完成
    
      149798 requests in 30.09s, 241.85MB read
      # 30秒内功处理了 149798 个请求,读取了 241.85MB 的数据
    
      Socket errors: connect 0, read 16, write 0, timeout 599
      # 错误:连接错误:0   读错误:16   写错误:0    超时:599
    
    Requests/sec:   4977.65  # QPS 4977.65, 即平均每秒处理请求数为4977.65 
    Transfer/sec:      8.04MB # 平均每秒读取 8.04M 的数据
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    压测结果解释:

    在这里插入图片描述

    3.2 编写压测脚本

    首先需要准备一个 lua 文件,比如名为 test-postapi.lua ,写入如下内容。

    ### 请求方式
    wrk.method = "POST"
    
    ### 设置 请求类型
    wrk.headers["Content-Type"] = "application/json"
    
    ### POST 请求参数
    wrk.body  = '{"username": "13999999999","username": "13999999999"}'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这个文件内容自己写,写好接口内容后保存。

    3.3 执行脚本

    以下是模拟6个线程,600个连接,在60s内,间隔6s 执行 test-postapi.lua 脚本的请求

    # 进入wrk执行文件目录
    ./wrk -t6 -c600 -d60s --script=test-postapi.lua --latency http://api.xxxdev.com/enterprise/user/login
    
    # --script 参数的值为脚本名
    # --latency 参数的值为接口地址
    
    • 1
    • 2
    • 3
    • 4
    • 5

    资源分享

    下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    “200万天价床垫”引发的思考:普通床垫越卖越贵是推测还是事实
    河南科技大学2023考研获取真题大纲的正规途径有哪些?
    机器学习之模拟退火算法
    金仓数据库 KingbaseGIS 使用手册(6.17. 边界框函数)
    JAVA基础(十一)
    什么是Streamlit
    mathtype试用期后如何继续使用?
    kubernetes基础概念
    内网穿透-Frp--上线
    vue3前端开发-开发环境安装篇
  • 原文地址:https://blog.csdn.net/wx17343624830/article/details/127434030