压测工具
2024年7月29日大约 3 分钟
程序压测工具汇总
ab
安装
# 在linux环境安装
sudo yum -y install httpd
nohup ${JAVA_HOME}/bin/java -Xms128m -Xmx256m -Dserver.port=9003 -jar framework-websocket-server.jar > run.logs &
用法
Usage: ab [options] [http[s]://]hostname[:port]/path
用法:ab [选项] 地址
选项:
Options are:
-n requests #执行的请求数,即一共发起多少请求。
-c concurrency #请求并发数。
-s timeout #指定每个请求的超时时间,默认是30秒。
-k #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。
压测命令
# 使用ab压测工具,对百度的链接 请求100次,并发数1
ab -n 100 -c 1 https://www.baidu.com/
- 主要关注的测试指标
Concurrency Level
并发请求数Time taken for tests
整个测试时间Complete requests
完成请求个数Failed requests
失败个数Requests per second
吞吐量,指的是某个并发用户下单位时间内处理的请求数。等效于QPS,其实可以看作同一个统计方式,只是叫法不同而已。Time per request
用户平均请求等待时间Time per request
服务器处理时间
Locust
安装
# pip3 安装locust
pip3 install locust
# 查看是否安装成功
locust -h
# 运行 Locust 分布在多个进程/机器库
pip3 install pyzmq
# webSocket 压测库
pip3 install websocket-client
用法
from locust import HttpLocust, TaskSet, task
# 定义用户行为
class UserBehavior(TaskSet):
@task
def baidu_index(self):
self.client.get("/")
class WebsiteUser(HttpLocust):
task_set = UserBehavior # 指向一个定义的用户行为类
min_wait = 3000 # 执行事务之间用户等待时间的下界(单位:毫秒)
max_wait = 6000 # 执行事务之间用户等待时间的上界(单位:毫秒)
启动压测
locust -f test.py --host=https://www.baidu.com
性能测试参数
Type
请求的类型,例如GET/POSTName
请求的路径Request
当前请求的数量Fails
当前请求失败的数量Median
中间值,单位毫秒,请求响应时间的中间值Average
平均值,单位毫秒,请求的平均响应时间Min
请求的最小服务器响应时间,单位毫秒Max
请求的最大服务器响应时间,单位毫秒Average size
单个请求的大小,单位字节Current RPS
代表吞吐量(Requests Per Second的缩写),指的是某个并发用户数下单位时间内处理的请求数。等效于QPS,其实可以看作同一个统计方式,只是叫法不同而已。
Jmeter
安装
官网:https://jmeter.apache.org/download_jmeter.cgi
环境配置
2.点击新建,输入变量名为:JMETER_HOME 变量值为你Jmeter解压的路径。随后再点击确定
3.接下来还要配置classpath变量,点击新建,变量名为固定值:
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;
%JMETER_HOME%\lib\jorphan.jar;
%JMETER_HOME%\lib\logkit-2.0.jar;
,随后点击确定。
完成以上就说明基本配置已经完成了,最后我们可以找到我们解压的文件,点击bin目录,找到jmeter.bat, 双击打开。
压测工具的比较
- | ab | locust | Jmeter | go-stress-testing | 云压测 |
---|---|---|---|---|---|
实现语言 | C | Python | Java | Golang | - |
UI界面 | 无 | 有 | 有 | 无 | 无 |
优势 | 使用简单,上手简单 | 支持分布式、压测数据支持导出 | 插件丰富,支持生成HTML报告 | 项目开源,使用简单,没有依赖,支持webSocket压测 | 更加真实的模拟用户,支持更高的压测力度 |