• 性能压测工具 —— 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 子系统。

    3、使用 wrk

    使用方法: wrk <选项> <被测HTTP服务的URL>

    Options:

    -c, --connections 跟服务器建立并保持的TCP连接数量

    -d, --duration 压测时间

    -t, --threads 使用多少个线程进行压测

    -s, --script 指定Lua脚本路径

    -H, --header 为每一个HTTP请求添加HTTP头

    --latency 在压测结束后,打印延迟统计信息

    --timeout 超时时间

    -v, --version 打印正在使用的wrk的详细版本信息

    代表数字参数,支持国际单位 (1k, 1M, 1G)

    代表时间参数,支持时间单位 (2s, 2m, 2h)

    3.1 命令简单的压测

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

    1. 以下是对压测结果
    2. wrk -t 10 -c 200 -d 30s --latency http://www.baidu.com
    3. # 30s内测试百度的结果如下:
    4. Running 30s test @ http://www.baidu.comm/
    5. # 用12个线程 400个连接测试
    6. 12 threads and 400 connections
    7. Latency Distribution
    8. # 响应时间-延迟分布明细
    9. # 有50%的请求执行时间是在64.42ms内完成
    10. 50% 64.42ms
    11. # 30秒内功处理了 149798 个请求,
    12. 读取了 241.85MB 的数据
    13. 149798 requests in 30.09s, 241.85MB read
    14. # QPS 4977.65, 即平均每秒处理请求数为4977.65
    15. 可以参考吞吐量。
    16. Requests/sec: 4977.65
    17. # 平均每秒读取 8.04M 的数据
    18. Transfer/sec: 8.04MB

    3.2 编写压测脚本

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

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

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

    3.3 执行脚本

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

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

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

    在这里插入图片描述

    这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!   

  • 相关阅读:
    RestTemplate Message Convert 详解
    全网最牛自动化测试框架系列之pytest(7)-yield与终结函数
    C++入门学习(1)命名空间和输入输出
    fastadmin with 和 filed 合用导致field失效
    华为1000人校园实验记录
    Java#11(String中的常用方法)
    Leetcode202. 快乐数
    【linux/docker】解决ORA-28000: the account is locked
    05-内存分配与回收策略
    【elasticsearch】使用自建证书搭建elasticsearch8.0.1集群
  • 原文地址:https://blog.csdn.net/qq_48811377/article/details/133946970