Document Path: /path #请求路径
Document Length: 222 bytes #页面大小
Concurrency Level: 500 #并发量,设置的参数之一
Time taken for tests: 45.805 seconds #整个测试所用的时间/秒
Complete requests: 1000 #完成的请求数
Failed requests: 0 #失败的请求数
Non-2xx responses: 1000 #接收到的HTTP响应数据的头信息中含有2XX以外的状态码,则会在测试结果中显示另一个名为“Non-2xx responses”的统计项,用于统计这部分请求数(1000)
Total transferred: 484000 bytes #表示所有请求的响应数据长度总和
HTML transferred: 222000 bytes #表示所有请求的响应数据中正文数据的总和
Requests per second: 21.83 [#/sec] (mean) #吞吐率,吞吐率是与并发数相关的,使请求总数相同,但如果并发数不一样,吞吐率还是很可能有很大差异的
Time per request: 22902.310 [ms] (mean) #用户平均请求等待时间。也就是一次并发总的时间
Time per request: 45.805 [ms] (mean, across all concurrent requests) #服务器平均请求等待时间。也就是一次请求(在本例中也就是500中的平均每一次)所需时间
Transfer rate: 10.32 [Kbytes/sec] received #这些请求在单位时间内从服务器获取的数据长度
Connection Times (ms)
min mean[+/-sd] median max
Connect: 9 46 460.5 11 9060
Processing: 25 20066 13796.4 14798 36549
Waiting: 14 16163 15029.9 8460 36484
Total: 37 20111 13785.1 22804 36562
Percentage of the requests served within a certain time (ms)
50% 22804 #50%用户请求在22804ms内返回
66% 33043 #66%用户请求在33043ms内返回
75% 34181
80% 34791
90% 35877
95% 36416
98% 36502 #98%用户请求在36502ms内返回
99% 36512
100% 36562 (longest request)
命令参数参考:
-n requests Number of requests to perform //本次测试发起的总请求数
-c concurrency Number of multiple requests to make //一次产生的请求数(或并发数)
-t timelimit Seconds to max. wait for responses //测试所进行的最大秒数,默认没有时间限制。
-r Don’t exit on socket receive errors. // 抛出异常继续执行测试任务
-p postfile File containing data to POST //包含了需要POST的数据的文件,文件格式如“p1=1&p2=2”.使用方法是 -p 111.txt
-T content-type Content-type header for POSTing
//POST数据所使用的Content-type头信息,如 -T “application/x-www-form-urlencoded” 。 (配合-p)
-v verbosity How much troubleshooting info to print
//设置显示信息的详细程度 – 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。
-C attribute Add cookie, eg. -C “c1=1234,c2=2,c3=3” (repeatable)
//-C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复,用逗号分割。
提示:可以借助session实现原理传递 JSESSIONID参数, 实现保持会话的功能,如-C ” c1=1234,c2=2,c3=3, JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8″ 。
-w Print out results in HTML tables //以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
2.5 使用注意
1、MAC中自带了Apache。
2、在使用ab命令时,并发了过高会出现错误:Too many open files,由于系统打开文件数量限制了
具有轻量化特点的bench还是很适合中小企业使用,尤其在于模拟访问页面的多机测试
三、JMeter:Apache组织开发的压力测试工具(使用比较多的工具)
3.1 简介
Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一
JDK版本:1.8
运行环境:Windows 7 64
JMeter版本:3.3
注意:安装JMeter需要 Java8和8以上的JDK版本
3.2 JDK安装(如果已经安装JDK 1.8 忽略这一步)
1、jdk官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
2、选择 Java SE 8u231,点击JDK下载
3. 安装下载的JDK
4. 配置系统环境变量
具体可以自行查找资料,这里就不做过多描述
3.2 JMeter安装
1、官网下载地址:JMeter地址
2、下载最新JMeter 5.1.1 版本:Apache JMeter 5.1.1 (Requires Java 8+)
3、下载完成后解压zip包,双击bin目录下jmeter.bat文件
3.3 JMeter 使用
1、双击bin目录下jmeter.bat文件后,打开Apache JMeter工具
2、案例测试(Test Plan - > Add - > Thread(User) - > Thread Group)
3、设置名称和线程数
线程参数解读:
Number of Threads (users):虚拟用户数(也就是线程数),一个虚拟用户占用一个进程或线程
Ramp-Up Period(in seconds):准备时长,设置的虚拟用户数需要多长时间全部启动。
例如:如果线程数为20,准备时长为2,那么需要2秒钟启动20个线程,也就是每秒钟启动10个线程
Loop Count:循环次数每个线程发送请求的次数
如果线程数为20,循环次数为100,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“Forever”,那么所有线程会一直发送请求,一到选择停止运行脚本。
Delay Thread creation until needed:直到需要时延迟线程的创建
Scheduler:调度器,设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
Duration(Seconds):持续时间(秒),测试持续时间,会覆盖结束时间
Startup delay(Seconds):启动延迟(秒),测试延迟启动时间,会覆盖启动时间
4、添加Http请求
右键点击,Htto请求 > Add > Sampler > Http Request
接下来我们对接口https://www.baidu.com/s?ie=UTF-8&wd=edg进行性能测试,如下图所示:
请求参数详解:
- Web Server(Http服务):
1、Protocol[http]:协议,向目标服务器发送HTTP请求协议,可以是HTTP或HTTPS,默认为HTTP
2、服务器名称或IP:HTTP请求发送的目标服务器名称(域名)或IP
3、Port Number:端口号
- Http Reuqeset(Http请求体):
1、Method:请求方法类型,有GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等
2、path:目标URL路径,除去服务器地址、端口和请求参数后所得到的数据
3、Content encoding:编码方式,设置为 UTF-8
- 请求参数:
设置请求参数,都在下面的列表中进行设置,
- 列表参数解读:
Name:请求参数名
Value:请求值
URL Encode:是否Url编码
Conten-Type:内容类型,有需要自行调整(一般选择默认即可)
include Equals:是否包含等于
注意:参数传入中文时需要勾选“URL Encode”
这里的按钮都是针对列表中的数据进行操作的
Detail:查看参数详情
Add:添加一行列表请求参数
Delte:删除一行数据
Up:设置列表参数上移
Down:设置列表参数下移
add from Clipdoard:从我们复制的内容中进行添加
5、添加察看结果树
1、右键点击 Http请求 > Add > Listener > View Results Tree
2、这里我们设置响应数据格式:HTML Source Formatted,点击运行我们就可以看到请求结果
3、本次搜索返回结果页面标题为edg_百度搜索
6、添加用户自定义变量
1、添加用户自定义变量用以Http请求参数化:Http请求 > Add > Config Element > User Defined Variables
2、新增请求参数,存放搜索关键字
3、在 Http测试请求 中使用该参数,格式为:${wd} ,如下图所示
7、添加响应断言
右键点击 Http测试请求(注意是Http测试请求) > Add > Assertions > Response Assertion
校验返回的文本中是否包含搜索词,添加参数${wd}到要测试的模式中
Contains:包括
Matches:匹配
Equals:相等
SubString:原谅博主才疏学浅,这个就不做解释了
Not:否
or:或者
7、添加响应断言结果
右键点击 Http测试请求 > Add > Listener > Assertion Results
点击运行,查询运行结果
8、添加聚合报告
右键点击 Http请求 > Add > Listener > Aggregate Report
到这里我们就完成了一个完整的Http接口的性能测试编写,接下来我们会对它的性能进行测试
3.4 JMeter 性能测试
1、配置Http请求(线程组)信息
点击Http请求(线程组),配置相关的性能测试相关参数
线程数:50
循环次数:永远
持续时间:60秒
2、执行测试信息
选择聚合报告,查询结构,点击 箭头 按钮启动测试,如果要清楚具体内容,点击小扫把,清除调试结果
3、测试结果分析解读
1、打开聚合报告
参数详解:
-
Label:每个 JMeter 的 element都有一个 Name 属性,这里显示的是 Name 属性的值
-
#Samples:请求数——表示这次测试中一共发出了多少个请求
如果模拟10个用户,每个用户迭代10次,那么这里显示100
- Average:平均响应时间——默认情况下是单个 Request 的平均响应时间
当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间
-
Median:中位数,也就是 50% 用户的响应时间
-
90% Line:90% 用户的响应时间
-
99% Line:99% 用户的响应时间
-
Min:最小响应时间
-
Max:最大响应时间
-
Error%:错误率——错误请求数/请求总数
-
Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second)
当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
- KB/Sec:每秒从服务器端接收到的数据量
在实际中我们需要关注的点只有——#Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率和Throughput 吞吐量
四、代码模拟
1、Semaphore
Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有实际的许可证这个对象,Semaphore只是维持了一个可获得许可证的数量。
1.1 代码演示:获取一个许可证
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
@Slf4j
public class SemaphoreExample1 {
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
总结
阿里伤透我心,疯狂复习刷题,终于喜提offer 哈哈~好啦,不闲扯了
1、JAVA面试核心知识整理(PDF):包含JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。
2、Redis学习笔记及学习思维脑图
3、数据面试必备20题+数据库性能优化的21个最佳实践
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
存中…(img-XrW3xg46-1712434617093)]
1、JAVA面试核心知识整理(PDF):包含JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。
[外链图片转存中…(img-BqqrKtUl-1712434617093)]
2、Redis学习笔记及学习思维脑图
[外链图片转存中…(img-epEW7E1D-1712434617093)]
3、数据面试必备20题+数据库性能优化的21个最佳实践
[外链图片转存中…(img-8WSFgyzY-1712434617094)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
-
- 列表参数解读:
- 请求参数:
- Http Reuqeset(Http请求体):
还没有评论,来说两句吧...