当前位置: 代码迷 >> 综合 >> 性能测试工具:ab,jmeter,locust,pts个人对比
  详细解决方案

性能测试工具:ab,jmeter,locust,pts个人对比

热度:40   发布时间:2023-10-12 23:39:38.0
  • HPS(Hits Per Second) :每秒点击次数,单位是次/秒。
  • TPS(Transaction per Second):系统每秒处理交易数,单位是笔/秒。
  • QPS(Query per Second):系统每秒处理查询次数,单位是次/秒。对于互联网业务中,如果某些业务有且仅有一个请求连接,那么TPS=QPS=HPS,一般情况下用TPS来衡量整个业务流程,用QPS来衡量接口查询次数,用HPS来表示对服务器点击请求

一,Apache Benchmark

Apache Benchmark简称 ab,是apache自带的压力测试工具

安装:

sudo yum install httpd-tools

参数说明

-n 表示请求总数(与-t参数可任选其一)
-c 表示并发数
-t 标识请求时间
-p:模拟post请求,文件格式为gid=2&status=1,配合-T使用
-T:post数据所使用的Content-Type头信息,如-T 'application/x-www-form-urlencoded'

返回结果

Server Software:        nginx/1.13.6   #测试服务器的名字
Server Hostname:        api.midukanshu.com  #请求的URL主机名
Server Port:            443             #web服务器监听的端口Document Path:          /logstash/userbehavior/create    #请求的URL中的根绝对路径
Document Length:        0 bytes       #HTTP响应数据的正文长度Concurrency Level:      300        # 并发用户数,这是我们设置的参数之一
Time taken for tests:   22.895 seconds   #所有这些请求被处理完成所花费的总时间
Complete requests:      50000         # 总请求数量,这是我们设置的参数之一
Failed requests:         99          # 表示失败的请求数量,这里的失败是指请求在连接服务器、发送数据等环节发生异常,以及无响应后超时的情况
Write errors:           0
Total transferred:      96200 bytes    #所有请求的响应数据长度总和。包括每个HTTP响应数据的头信息和正文数据的长度
HTML transferred:       79900 bytes    # 所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度
Requests per second:    2183.91 [#/sec] (mean) #吞吐率,计算公式:Complete requests/Time taken for tests  总请求数/处理完成这些请求数所花费的时间
Time per request:       137.368 [ms] (mean)   # 用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)。处理完成所有请求数所花费的时间/(总请求数/并发用户数)
Time per request:       0.458 [ms] (mean, across all concurrent requests) #服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level
Transfer rate:          652.50 [Kbytes/sec] received  #表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Time taken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。

运行

ab -c 300 -t 60 https://api.midukanshu.com/logstash/userbehavior/create

 

Requests per second: 2733.10 [#/sec] (mean)

二,Jmeter

Apache JMeter是Apache组织开发的基于Java的压力测试工具

安装

安装jdk
配置Java环境变量后执行java -version

下载+配置:apache-jmeter-4.0

查看版本:

见jmeter主目录

参数说明:

-n : 非GUI 模式执行JMeter
-t : 执行测试文件所在的位置及文件名
-r : 远程将所有agent启动,用在分布式测试场景下,不是分布式测试只是单点就不需要-r
-l : 指定生成测试结果的保存文件, jtl 文件格式
-e : 测试结束后,生成测试报告
-o : 指定测试报告的存放位置

返回结果:

Avg:所有请求的平均响应时间,毫秒;
Min:请求的最小的服务器响应时间,毫秒;
Max:请求的最大服务器响应时间,毫秒;
Err:请求错误个数,错误百分率;
Active:激活的线程数,当Active=0,则说明运行中的线程数为0,则压测结束。
Started:启动的线程数
Finished:完成的线程数

运行脚本:

./jmeter.sh -n -t ./jmx/test-61312.jmx
300个线程跑60秒:

 

summary + 365770 in 00:00:12 = 30084.7/s Avg: 9 Min: 2 Max: 706 Err: 0 (0.00%) Active: 0 Started: 300 Finished: 300

 

三,Locust

Locust是一个Python编写的分布式的性能测试工具【目前分布式部署存在问题,待解决】

locust因为是基于python的压测框架,而python的GIL限制,无法直接利用多核处理器,手动打开多个locust进程来利用CPU多核,才能充分使用压测客户机;

安装

安装python pip
sudo yum -y install python-pip
通过Python自带的pip安装locust
pip install locustio

查看版本:

locust –version

参数说明

--host指定被测试的主机,采用以格式:http://192.168.21.25
-f指定运行 Locust 性能测试文件,默认为: locustfile.py
–-no-web    no-web 模式运行测试,需要 -c 和 -r 配合使用
-c指定并发用户数,作用于 –no-web 模式。
-r指定每秒启动的用户数,作用于 –no-web 模式。
-t设置运行时间, 例如: (300s, 20m, 3h, 1h30m). 作用于 –no-web 模式。

返回结果

Name:请求方式,请求路径;
reqs:当前请求的数量;
fails:当前请求失败的数量;
Avg:所有请求的平均响应时间,毫秒;
Min:请求的最小的服务器响应时间,毫秒;
Max:请求的最大服务器响应时间,毫秒;
Median:中间值,单位毫秒;
req/s:每秒钟请求的个数。
Total:各接口的汇总信息

运行:
test-2.py文件内容

# coding=utf-8
from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):@task(1)def profile(self):self.client.post("/logstash/userbehavior/report", {})class WebsiteUser(HttpLocust):task_set = UserBehaviormin_wait = 0max_wait = 0

第一种not-web:locust -f test-2.py --host=https://api.midukanshu.com --no-web -c 300 -t 60s

300线程跑60秒:Req/s=942.30

 

 

第二种:locust -f test-2.py --host=https://api.midukanshu.com

 

300线程跑60秒,每秒增加50,Req/s=884.8

 

总结:

1,实际结果是:jmeter (= 30084.7/s)>  ab(2733.10 [#/sec] (mean)) > locust(Req/s=942.30

2,工具总结:

工具 ab locust jmeter
安装 简单 依赖python 依赖jdk
场景压测 不支持 支持 支持
UI界面
脚本录制 利用本地ProxyServer或badboy
资源监控 通过JMeterPlugins插件和ServerAgent实现
报告分析 生成HTML报告

3,场景压测,推荐:jmeter、loucst,支持接口串联,接口body参数化,思考时间,多维度压测报告统计等;

单接口,大并发,大QPS,推荐:ab;