基准测试工具
benchmark工具有哪些呢?链接
sysbench
介绍
Sysbench是一款开源的多用途性能基准测试工具,广泛用于测试系统性能,特别是在数据库、CPU、内存、磁盘I/O等领域。以下是对Sysbench的详细介绍:
一、Sysbench的主要特点
- 多线程支持:Sysbench支持多线程操作,能够模拟复杂的工作负载场景,从而更准确地评估系统在高并发情况下的性能。
- 多领域测试:Sysbench可以用于评估CPU的计算性能、内存的读取和写入性能、磁盘I/O性能以及数据库在不同负载下的性能。
- 丰富的测试脚本:Sysbench提供了多种数据库性能测试脚本,如oltp_read_only.lua、oltp_read_write.lua等,方便用户进行针对性的测试。
- 低开销:即使有数千个并发线程,Sysbench的开销也很低,能够确保测试结果的准确性。
- 易于扩展:用户可以通过在用户提供的Lua脚本中实现预定义的钩子,轻松创建新的基准测试。
二、Sysbench的安装方法
Sysbench可以通过源码编译安装,也可以通过包管理器安装。以下是两种常见的安装方法:
- 通过包管理器安装(以CentOS为例):
- 执行
yum install -y automake libtool等命令安装必要的依赖。 - 下载Sysbench的源码包并解压。
- 执行
./configure、make和make install命令进行编译和安装。 - 将Sysbench加入环境变量。
- 执行
- 通过源码编译安装:
- 安装必要的依赖,如
mysql-community-devel。 - 下载Sysbench的源码包并解压。
- 执行
./autogen.sh、./configure、make -j和make install命令进行编译和安装。
- 安装必要的依赖,如
三、Sysbench的使用方法
Sysbench的命令语法如下:sysbench [options]... [testname] [command]。其中,testname是测试项名称,command是Sysbench要执行的命令(如prepare、run、cleanup、help),options是配置项。
以下是一些常用的配置项和命令:
- 配置项:
--num-threads=N:指定需要使用的线程总数。--max-requests=N:指定请求总数的上限值。--max-time=N:指定总执行时间的上限值,以秒为单位。--report-interval=N:指定定期报告中间统计数据的时间间隔,单位为秒。
- 命令:
prepare:为测试执行准备操作,如创建必要的文件或填充测试数据库。run:运行指定的测试。cleanup:在测试运行后删除临时数据。help:显示测试的使用信息和可用命令。
四、Sysbench的测试示例
- CPU性能测试:
- 使用
sysbench cpu --cpu-max-prime=20000 run命令测试CPU的性能。该命令通过寻找最大素数的方式来评估CPU的计算能力。
- 使用
- 内存性能测试:
- 使用
sysbench memory --memory-block-size=8K --memory-total-size=10G run命令测试内存的读取和写入性能。该命令可以评估内存的带宽和延迟。
- 使用
- 磁盘I/O性能测试:
- 使用
sysbench fileio --file-total-size=10G --file-test-mode=rndrw prepare和sysbench fileio --file-total-size=10G --file-test-mode=rndrw run命令测试磁盘I/O的性能。该命令可以评估磁盘的吞吐量、延迟和响应能力。
- 使用
- 数据库性能测试:
- 使用
sysbench --db-driver=mysql --mysql-user=root --mysql-password=password --mysql-db=test --table-size=1000000 --threads=4 oltp_read_write prepare和sysbench --db-driver=mysql --mysql-user=root --mysql-password=password --mysql-db=test --table-size=1000000 --threads=4 oltp_read_write run命令测试数据库在不同负载下的性能。该命令可以评估数据库的读写性能和事务吞吐能力。
- 使用
五、Sysbench的结果分析
Sysbench测试完成后,会生成详细的测试结果报告。用户可以根据报告中的各项性能指标(如总时间、事件总数、每事件执行时间、每请求响应时间等)来评估系统的性能。同时,Sysbench还提供了大量关于速率和延迟的统计数据,包括延迟百分比和直方图,有助于用户更深入地了解系统的性能表现。
综上所述,Sysbench是一款功能强大、易于使用的性能基准测试工具,能够帮助用户全面评估系统的性能表现。无论是对于数据库、CPU、内存还是磁盘I/O等领域的性能测试,Sysbench都能够提供准确、可靠的测试结果。
centOS8安装
https://medium.com/@chachia.mohamed/stress-testing-in-centos-using-sysbench-and-stress-commands-2c4530122c45
先安装epel-release仓库
yum install epel-release -y再安装sysbench
yum install sysbench -yubuntu安装
sudo apt-get update
sudo apt install sysbench基本用法
https://www.howtoforge.com/how-to-benchmark-your-system-cpu-file-io-mysql-with-sysbench
显示cpu子命令帮助信息
sysbench cpu help显示fileio子命令帮助信息
sysbench fileio help数据库测试
创建数据库 sbtest
create database if not exists sbtest character set utf8mb4 collate utf8mb4_general_ci;准备测试数据
sysbench --db-driver=mysql --mysql-user=root --mysql-password=123456 --mysql-host=192.168.1.190 --mysql-port=3306 --table-size=1500000 --threads=64 --report-interval=2 oltp_read_write prepare运行测试
sysbench --db-driver=mysql --mysql-user=root --mysql-password=123456 --mysql-host=192.168.1.190 --mysql-port=3306 --table-size=1500000 --threads=64 --report-interval=2 --time=30 oltp_read_write run删除测试数据
drop database sbtest;fio
提示:推荐使用
fio工具做I/O基准测试 链接
centOS8安装fio
yum install fio -y查看fio版本
fio -versionstress
提示:推荐使用
stress产生内存负载和分析
centOS8安装stress
yum install stress -yiperf
用于网络性能测试
centOS8安装iperf3
yum install iperf3 -ywrk
https://github.com/wg/wrk
提醒:
- 官方没有提供二进制 wrk,需要自己在 centOS8 上编译。
- 使用很少的 CPU 资源即可产生很高的压力
介绍
wrk是一款针对HTTP协议的基准测试开源工具,以下是对wrk压力测试的详细介绍:
一、安装wrk
- 在Linux上安装
- Ubuntu/Debian:
- 执行命令
sudo apt-get install build-essential libssl-dev git -y。 - 执行命令
git clone https://github.com/wg/wrk.git下载wrk。 - 解压并进入wrk目录,执行
make命令进行编译。 - 编译成功后,将可执行文件移动到
/usr/local/bin位置,或者设置一个软连接。
- 执行命令
- CentOS/RedHat/Fedora:
- 执行命令
sudo yum groupinstall 'Development Tools'。 - 执行命令
sudo yum install -y openssl-devel git。 - 执行命令
git clone https://github.com/wg/wrk.git下载wrk。 - 解压并进入wrk目录,执行
make命令进行编译。 - 编译成功后,将可执行文件移动到
/usr/local/bin位置,或者设置一个软连接。
- 执行命令
- Ubuntu/Debian:
- 在MacOS上安装
- 推荐使用brew的方式安装。首先安装Homebrew,然后执行命令
brew install wrk进行安装。
- 推荐使用brew的方式安装。首先安装Homebrew,然后执行命令
- 在Windows上安装
- wrk只能被安装在类Unix系统上,因此Windows用户需要开启自带的Ubuntu子系统,或者在Docker中运行wrk镜像。
二、使用wrk进行压力测试
基本使用方法
- 使用命令
wrk <选项> <被测HTTP服务的URL>进行测试。 - 常用选项包括:
-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的详细版本信息。
- 使用命令
示例
- 使用10个线程,200个连接,对百度进行30秒的压测,并打印延迟统计信息:
bashwrk -t 10 -c 200 -d 30s --latency http://www.baidu.com使用Lua脚本进行POST请求测试:
- 编写Lua脚本,例如test-postapi.lua,内容如下:
luawrk.method = "POST" wrk.headers["Content-Type"] = "application/json" wrk.body = '{"key":"value"}'- 执行命令进行测试:
bashwrk -t 5 -c 10 -d 1s -s test-postapi.lua http://example.com/api
三、测试结果分析
- 延迟:包括平均响应时间、最大响应时间、P95延迟(平均100%的请求中95%已经响应的时间)、P99延迟等。
- 吞吐量:即每秒处理的请求数量(QPS)或每秒处理的事务数(TPS)。
- 错误统计:包括连接错误、读错误、写错误、超时等。
四、注意事项
- 在进行压力测试之前,需要确保被测系统已经准备好,并且网络连通性正常。
- 根据被测系统的实际情况,合理设置线程数、连接数、压测时间等参数。
- 使用Lua脚本可以自定义测试行为,例如设置POST请求的参数、添加自定义的HTTP头等。
- 在分析测试结果时,需要综合考虑延迟、吞吐量、错误统计等多个指标,以全面评估被测系统的性能。
总之,wrk是一款功能强大且易于使用的HTTP基准测试工具,可以帮助开发人员和测试人员有效地评估和优化Web应用的性能。
安装
CentOS8
https://www.cnblogs.com/quanxiaoha/p/10661650.html
编译
sudo yum groupinstall 'Development Tools'
sudo yum install -y openssl-devel git
git clone https://github.com/wg/wrk.git
cd wrk
make
# 将可执行文件移动到 /usr/local/bin 位置
sudo cp wrk /usr/local/bin内核参数调优
- 调优文件描述符限制:链接
Ubuntu
安装 make 工具
sudo apt install make安装 gcc 编译环境
sudo apt install build-essential克隆 wrk 源代码
git clone https://github.com/wg/wrk.git编译
cd wrk && make配置 wrk 程序
cp wrk /usr/local/bin/wrk && chmod +x /usr/local/bin/wrk基础使用
参考 链接 部署基准测试辅助目标
基本用法
wrk -t8 -c512 -d120s --timeout 30 http://192.168.1.185/- -t8 表示并发线程数为 8
- -c512 表示保持打开的连接数为 512
- -d120s 表示持续测试 120 秒
- --timeout 30 表示 socket 连接
测试结果打印请求响应延迟的分布
wrk -t8 -c512 -d120s --latency --timeout 30 http://192.168.1.185/- --latency 表示打印请求响应延迟的分布
Lua 脚本编程
POST 请求
scripts.lua 脚本内容如下:
request = function()
wrk.headers["Connection"] = "Keep-Alive"
path = "/api/v1/purchaseProduct?userId=1&productId=1&amount=1"
return wrk.format("POST", path)
end运行脚本
wrk -t8 -c512 -d120s --latency --timeout 30 -s scripts.lua http://192.168.1.185/定时打印报告
提醒:经过研究不提供此特性或者此特性的实现方式。
todo
- 不是一个线程一个连接吗?
- 为何 wrk 高性能呢?
wrk2
提醒:暂时没有需求使用它。
介绍
wrk2 和 wrk 的核心区别在于吞吐量控制与延迟统计的准确性,具体如下:
- 吞吐量控制
- wrk:
- 不支持恒定吞吐量控制,线程根据系统负载动态调整请求速率。
- 适用于需要最大化压测负载的场景,但无法精确控制每秒请求数(RPS)。
- wrk2:
- 引入
--rate参数(或-R),可强制保持恒定的吞吐量(RPS)。 - 例如:
wrk2 -t4 -c100 -d30s -R1000 http://example.com表示每秒发送 1000 个请求。 - 适用于需要精确模拟生产环境负载的场景。
- 引入
- 延迟统计
- wrk:
- 使用传统延迟统计模型,基于请求发送到响应完成的时间差。
- 存在 “协调性遗漏”(Coordinated Omission) 问题:当请求响应时间过长时,可能遗漏部分延迟数据,导致统计结果偏低。
- wrk2:
- 修正了延迟统计模型,避免协调性遗漏。
- 通过记录 “理论发送时间” 与 “实际响应时间” 的差值,确保高延迟请求被正确统计。
- 提供更精确的延迟分布(如 99.99% 分位延迟)。
- 应用场景
- wrk:
- 适合快速测试服务器的最大吞吐量或极限性能。
- 例如:测试服务器在高并发下的崩溃点。
- wrk2:
- 适合需要精确模拟生产负载的场景。
- 例如:测试服务器在固定 RPS 下的响应时间和延迟分布。
- 其他差异
- 参数支持:
- wrk2 继承了 wrk 的所有参数(如线程数、连接数、持续时间等),并新增了
--rate和--latency(更详细的延迟统计)等参数。
- wrk2 继承了 wrk 的所有参数(如线程数、连接数、持续时间等),并新增了
- 复杂性:
- wrk 更简单易用,适合快速压测。
- wrk2 需要配置吞吐量参数,适合更精细的性能分析。
总结对比表
| 特性 | wrk | wrk2 |
|---|---|---|
| 吞吐量控制 | 无 | 支持恒定 RPS(--rate) |
| 延迟统计 | 存在协调性遗漏 | 修正延迟统计模型 |
| 应用场景 | 极限性能测试 | 生产负载模拟 |
| 参数扩展 | 无 | 新增 --rate 和延迟选项 |
| 使用复杂度 | 低 | 中 |
推荐选择
- 如果需要 快速测试极限性能,选择 wrk。
- 如果需要 精确模拟生产负载 或 分析延迟分布,选择 wrk2。
CentOS8 编译
编译
sudo yum groupinstall 'Development Tools'
sudo yum install -y openssl-devel git
git clone https://github.com/giltene/wrk2.git
cd wrk2
make
# 将可执行文件移动到 /usr/local/bin 位置
sudo cp wrk /usr/local/bin/wrk2内核参数调优
调优文件描述符限制:链接
JMeter
JMeter 通过分布式部署能够模拟大规模压力。
wrk 和 JMeter 性能对比
结论:wrk 单机很轻松就能够产生 15w/s 的 QPS,但使用 JMeter 分布式部署在 3 台 4核 4G 的 slave 中并单机使用 128 线程才能够产生 15w/s 的 QPS。
ab
注意:不能充分利用压力机的多核,使用 wrk 工具替代。
介绍
ab(Apache Bench)是一个强大的HTTP服务器性能测试工具,它通过模拟多个用户同时访问某一URL地址来测试服务器的负载压力。以下是ab压力测试工具的具体用法:
一、安装ab工具
- 如果已经安装了Apache服务器,那么ab工具通常已经包含在Apache的安装包中,可以在Apache的安装目录下的bin目录中找到ab.exe文件。
- 如果没有安装Apache服务器,但想单独使用ab工具,可以安装Apache的工具包httpd-tools。例如,在Linux系统中,可以使用包管理工具(如yum)来安装httpd-tools,安装命令为
yum install httpd-tools。安装完成后,就可以直接使用ab命令了。
二、ab命令的基本用法
ab命令的基本语法为:ab [options] [http://]hostname[:port]/path。其中,options是ab命令的选项,用于指定测试的参数;[http://]hostname[:port]/path是要测试的URL地址。
三、常用选项及参数说明
- -n:指定要执行的请求数。默认时,仅执行一个请求。
- -c:设置单次发出的并发请求数。默认是一次一个。
- -t:设置测试的最大秒数。其内部隐含值是-n 50000,它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
- -p:包含要POST的数据的文件路径。使用该选项时,还需设置-T来指定内容类型。
- -T:为POST/PUT数据指定内容类型头,例如'application/x-www-form-urlencoded'。默认情况下,内容类型为'text/plain'。
- -v:控制显示的详细程度。值越大,显示的调试信息越多,包括头信息、响应代码和警告等。
- -w:以HTML表格格式输出测试结果。默认情况下,结果以简洁的两列表格形式呈现。
- -i:执行HEAD请求,而不是GET。
- -C:对请求附加一个Cookie行,例如'Apache=1234'。此参数可重复。
- -H:在所有标准头信息行之后附加额外的头信息行,例如'Accept-Encoding: gzip'。
- -A:对服务器提供BASIC认证信任,其中用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。
- -X:指定代理服务器及其端口号。
- -V:显示版本号并退出。
- -k:启用HTTP KeepAlive功能,以在一个HTTP会话中执行多个请求。
- -d:不显示“percentage served within XX [ms] table”的消息,此选项为旧版本提供支持。
- -S:不显示中值和标准背离值,且在均值和中值为标准背离值的1到2倍时,不显示警告或出错信息。默认情况下,会显示最小值/均值/最大值等数值。
- -q:在处理超过150个请求时,不显示进度信息。ab在处理大量请求时,会在stderr中每处理大约10%或100个请求时输出一个进度计数。使用-q选项可以抑制这些进度信息。
四、使用示例
假设要测试一个Web服务器的性能,可以使用以下命令:
ab -n 10000 -c 100 http://example.com/这个命令表示:并发100个用户,总共请求10000次,测试的目标URL是http://example.com/。
五、测试结果分析
ab命令执行完成后,会输出详细的测试结果,包括:
- Document Length:HTTP响应数据的正文长度。
- Time taken for tests:所有请求处理完成所花费的时间。
- Complete requests:完成请求数。
- Failed requests:失败请求数。
- Total transferred:网络总传输量。
- HTML transferred:HTML内容传输量。
- Requests per second:吞吐量,即每秒请求数。
- Time per request:服务器收到请求,响应页面要花费的时间。
- Transfer rate:平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题。
此外,ab命令还会输出连接时间、处理时间、等待时间等详细的性能指标,供用户进行进一步的分析和优化。
总的来说,ab压力测试工具是一个简单而强大的工具,可以帮助开发人员和测试人员有效地评估和优化Web应用的性能。
为何只使用一个 cpu 呢?
ApacheBench(ab)工具默认只使用单个CPU核心的原因主要与它的设计目标和实现方式有关:
单线程模型 ab 采用单线程同步请求模型,即所有请求按顺序串行发送。这种设计简化了实现逻辑,但无法充分利用多核CPU的并行计算能力。每个请求必须等待前一个响应完成后才能发送,形成天然的串行瓶颈。
设计哲学 ab 的设计初衷是提供轻量级的基准测试能力,而非模拟真实高并发场景。它通过控制请求速率(
-R参数)来测量服务器在不同负载下的表现,而非追求极致的压测吞吐量。资源控制考量 单线程模式更容易控制测试负载的稳定性,避免多线程带来的资源竞争和不确定性。这在需要精确测量特定并发量下的服务器响应时尤为重要。
替代方案建议 如果需要更高性能的压测工具,可以考虑:
- wrk:支持多线程和Lua脚本,能更好利用多核CPU
- Locust:基于Python的分布式压测工具
- Gatling:支持异步IO和复杂场景模拟
- k6:开发者友好的现代化压测工具
特殊场景优化 即使使用ab,也可通过以下方式提升利用率:
bash# 使用并发连接数(-c)和管道数(-k)参数 ab -n 10000 -c 100 -k http://example.com/通过增加并发连接数(
-c),可以在一定程度上提升CPU利用率,但受限于单线程模型,提升幅度有限。
建议根据具体测试需求选择工具:若需要简单快速的基准测试,ab足够;若需模拟真实高并发场景,建议使用更现代的压测工具。
采用单线程同步请求模型,设置并发连接数还有什么意义呢?
您提出的疑问非常关键,这涉及到对 AB 工具并发模型的深入理解。让我们分三个层面解析这个问题:
1. 单线程≠完全串行(连接级并行) 虽然 AB 是单线程处理请求逻辑,但通过 -c 参数设置的并发连接数(Concurrency Level)实际上创造了「连接级并行」。每个连接是一个独立的 HTTP 通道,AB 会:
- 同时保持 N 个连接打开(N 由
-c定义) - 在每个连接上依次发送请求(保持长连接)
- 不同连接的请求处理在服务器侧是并行的
2. 吞吐量提升的数学模型 假设:
- 服务器响应时间为 T(含网络延迟)
- 并发连接数为 C
- 单次请求耗时为 S = T + 请求处理时间
理论最大请求速率 ≈ C / S
当 C=1 时,每秒请求数 ≈ 1/S 当 C=100 时,每秒请求数 ≈ 100/S(提升 100 倍)
3. 实际应用中的意义
服务器压力模拟:通过高并发连接数(如 -c 1000),可以测试服务器处理大量并发连接的能力
连接池效应:保持长连接减少 TLS 握手和 TCP 建连开销,更贴近真实浏览器行为
资源利用率观察
:在服务器端可以通过监控工具(如 htop, netstat)观察:
- CPU 多核使用情况(虽然 AB 是单线程,但被测服务可能是多线程)
- 网络带宽饱和度
- 文件描述符使用量
优化建议:
# 典型压测命令结构
ab -n 10000 -c 100 -k -g output.data http://example.com/
# 参数解读:
# -n 总请求数
# -c 并发连接数(建议设置为预估线上并发的 1.5-2 倍)
# -k 启用 HTTP KeepAlive
# -g 生成 gnuplot 兼容性数据文件进阶替代方案: 若需要更真实的并发模拟,可考虑:
- wrk:支持多线程和 Lua 脚本
- weighttp:支持异步 IO 和权重压力测试
- 分布式压测:使用 JMeter 集群或 Locust 分布式模式
理解 AB 的这种「连接级并行」设计,可以帮助我们更准确地用它进行基础性能测试,同时为选择更合适的工具提供判断依据。
安装
CentOS8
yum install httpd-tools -yUbuntu
sudo apt install apache2-utils -y使用
参考 链接 部署基准测试辅助目标
基本用法
ab -t 60 -n 99999999 -c 64 -k http://192.168.1.185/- -t 60 表示持续测试 60 秒
- -n 99999999 表示测试中总共请求次数为 99999999
- -c 64 表示 64 个并发连接
- -k 表示启用 HTTP KeepAlive
Gatling
介绍
Gatling 压力测试工具是一款基于 Scala 开发的高性能开源负载测试工具,专为模拟高并发场景设计,广泛用于测试 Web 应用、API、微服务及其他分布式系统的性能和稳定性。
核心功能与特点
- 高性能与高并发支持
- 基于 Akka 框架和 Netty 网络库,支持每秒数万次请求的模拟,适用于高并发场景。
- 异步非阻塞 I/O 模型,资源消耗低,适合长时间运行的压力测试。
- 灵活的脚本编写
- 使用 DSL(领域特定语言)编写测试脚本,语法简洁且功能强大。
- 支持参数化测试、动态数据驱动(如 CSV 文件)、条件逻辑和复杂场景编排。
- 实时监控与报告
- 提供基于 HTML 的动态报告,实时展示请求响应时间、吞吐量、错误率等关键指标。
- 支持历史数据对比和趋势分析,便于定位性能瓶颈。
- 分布式测试
- 支持多节点分布式部署,可模拟更大规模的并发用户。
- 通过主从模式协调测试任务,扩展性强。
- 协议支持
- 默认支持 HTTP/HTTPS 协议,适用于 Web 应用和 RESTful API 测试。
- 提供插件机制,可扩展支持其他协议(如 WebSocket、gRPC、Kafka 等)。
- 集成与自动化
- 支持与 Jenkins、GitLab CI/CD 等持续集成工具集成,实现自动化测试。
- 可与 Selenium 等工具结合,进行端到端性能测试。
使用场景
- Web 应用性能测试:模拟高并发用户访问,测试系统在高负载下的响应时间和稳定性。
- API 性能测试:验证 RESTful API 的吞吐量和错误率,确保接口在高并发场景下的可靠性。
- 微服务架构测试:测试微服务之间的调用链性能,定位服务间的性能瓶颈。
- 限时活动压力测试:模拟秒杀、抢购等高并发场景,确保系统能够承受极端流量。
安装与配置
下载与安装
- 从 Gatling 官方网站 下载最新版本。
- 解压后配置
JAVA_HOME环境变量(Gatling 基于 Java 运行)。
编写测试脚本
使用 Scala 编写测试脚本,定义用户行为、请求逻辑和测试场景。
示例脚本:
scalaimport io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.duration._ class MySimulation extends Simulation { val httpProtocol = http .baseUrl("https://example.com") .acceptHeader("application/json") val scn = scenario("Test Scenario") .exec(http("Request_1") .get("/api/resource")) .pause(1) setUp( scn.inject(atOnceUsers(100)) // 模拟 100 个并发用户 ).protocols(httpProtocol) }
运行测试
- 将脚本放置在
user-files/simulations目录下。 - 执行
gatling.sh(Linux/Mac)或gatling.bat(Windows)运行测试。
- 将脚本放置在
查看报告
- 测试完成后,生成 HTML 格式的报告,存储在
results目录下。
- 测试完成后,生成 HTML 格式的报告,存储在
优势与适用性
- 优势:
- 性能卓越,适合大规模并发测试。
- 脚本灵活,易于编写和维护。
- 报告直观,便于分析测试结果。
- 适用性:
- 适合需要高并发测试的场景,如电商大促、API 性能验证等。
- 对于需要长时间运行的压力测试(如 7×24 小时稳定性测试),Gatling 的资源消耗较低,表现出色。
与其他工具对比
- 与 JMeter 对比:
- Gatling 基于代码编写脚本,灵活性更高;JMeter 使用 GUI 界面,适合不熟悉编程的用户。
- Gatling 性能更强,适合高并发场景;JMeter 在低并发场景下更易用。
- 与 Locust 对比:
- Gatling 使用 Scala 编写,Locust 使用 Python 编写,选择取决于团队技术栈。
- Gatling 的报告功能更强大,Locust 的分布式支持更简单。
总结
Gatling 是一款功能强大、性能卓越的负载测试工具,特别适合高并发场景下的性能测试。其基于代码的脚本编写方式、实时监控和分布式测试能力,使其成为现代性能测试的首选工具之一。无论是 Web 应用、API 还是微服务,Gatling 都能提供可靠的测试支持。
k6
注意:使用单机 wrk 和 k6 对比,发现 wrk 能够产生 18w QPS(CPU 未用满),k6 只能够产生 8w QPS(CPU 已经用满),所以暂时不使用 k6。
介绍
K6 是一款现代化的开源性能测试工具,主要用于负载测试和性能评估,帮助开发者和测试人员验证系统在高并发场景下的稳定性、可靠性和性能表现。以下是对 K6 测试工具的详细介绍:
1. 主要特点
- 开源免费:基于 Apache 2.0 许可证,用户可自由使用和修改。
- 支持多协议:
- HTTP/1.1、HTTP/2
- WebSocket
- gRPC(通过插件或扩展支持)
- 脚本语言:使用 JavaScript/ES6 编写测试脚本,语法简洁,易于上手。
- 高并发性能:基于 Go 语言 开发,单实例可模拟数千个虚拟用户(VUs)。
- 实时监控与报告:
- 提供实时性能指标(如响应时间、吞吐量、错误率等)。
- 支持生成 HTML、JSON 等格式的详细报告。
- 分布式测试:支持在多台机器上分布式运行测试,模拟更大规模的负载。
- 扩展性强:提供丰富的插件和扩展机制,支持自定义指标、数据源和报告格式。
2. 使用场景
- 负载测试:模拟高并发用户访问,测试系统的承载能力。
- 性能基准测试:对比不同版本或配置下的性能差异。
- 稳定性测试:长时间运行测试,检查系统在高负载下的稳定性。
- API 测试:验证 API 的响应时间、吞吐量和正确性。
- 微服务测试:测试微服务架构中的服务间调用性能。
3. 核心功能
- 虚拟用户(VUs):
- 模拟并发用户行为,支持动态调整 VUs 数量。
- 支持阶段式负载(stages),例如逐步增加并发用户数。
- 请求类型:
- 支持 GET、POST、PUT、DELETE 等 HTTP 方法。
- 支持 WebSocket 连接和消息发送。
- 断言(Assertions):
- 可设置请求响应时间、状态码等断言条件。
- 支持自定义断言逻辑。
- 指标收集:
- 内置多种性能指标,如请求响应时间、吞吐量、错误率等。
- 支持自定义指标收集。
- 报告生成:
- 生成详细的测试报告,包括图表和数据表格。
- 支持将报告导出为 HTML、JSON 等格式。
4. 安装与使用
安装:
- 可通过包管理器安装(如 Homebrew、Chocolatey)或直接下载二进制文件。
- 支持在 macOS、Windows、Linux 等操作系统上运行。
编写测试脚本:
使用 JavaScript 编写测试逻辑,定义虚拟用户的行为。
示例脚本:
javascriptimport http from 'k6/http'; import { sleep } from 'k6'; export default function () { http.get('https://test.k6.io'); sleep(1); // 模拟用户思考时间 }
运行测试:
使用命令行运行测试脚本:
bashk6 run script.js可指定并发用户数、持续时间等参数:
bashk6 run --vus 10 --duration 30s script.js
5. 优势与局限性
- 优势:
- 简单易用:JavaScript 脚本语法,开发人员上手快。
- 高性能:单实例可模拟高并发,适合大规模负载测试。
- 灵活扩展:支持插件和自定义指标,满足不同测试需求。
- 开源社区:活跃的社区支持,持续更新和改进。
- 局限性:
- 需要编写脚本,对新手有一定学习成本。
- 原生不支持某些协议(如 gRPC),需要依赖插件或扩展。
- 不支持图形化界面,所有操作需通过命令行完成。
6. 适用场景
- Web 应用:测试网站在高并发下的响应速度和稳定性。
- API 服务:验证 API 的性能和可靠性。
- 微服务架构:测试服务间的调用性能和容错能力。
- CI/CD 集成:与持续集成/持续部署工具集成,实现自动化性能测试。
7. 相关资源
总结
K6 是一款功能强大、灵活且易用的性能测试工具,特别适合需要模拟高并发场景的测试需求。其基于 JavaScript 的脚本语言和丰富的插件生态,使其能够适应各种复杂的测试场景。如果你需要一款高效的性能测试工具,K6 是一个值得考虑的选择。
安装
CentOS8
参考 链接
sudo dnf install https://dl.k6.io/rpm/repo.rpm
sudo dnf install k6编写测试 链接
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
vus: 2048,
duration: '15s',
};
export default function () {
http.get('http://192.168.1.185');
}运行测试 链接
k6 run test.js