一)性能的定义
性能:通过一系列指标来衡量系统的及时性、处理能力等特性。最重要的两个重要指标是响应时间和吞吐量。
二)性能的重要指标
1. 响应时间
-
- 响应时间的重要性
响应时间与用户体验息息相关,响应时间对产品有很大的影响。响应时间越短,性能表现越好
-
- 响应时间的度量方式
响应时间是指从客户端发起一个请求开始,到客户端接收到从服务端返回的最后一个字节结束,这个过程所耗费的时间。包括网络传输时间和服务处理时间。
2.吞吐量
-
- 吞吐量的度量方式
系统在单位时间内正确处理的客户端请求的数量
tps:系统每秒/单位时间内处理的事务数
qps:系统每秒/单位时间内处理的请求数
kb/s:服务端每秒向客户端返回的数据量
3.并发用户数
系统可以同时承载的正常使用系统功能的用户的数量
三)性能测试的重要性
1.提前识别性能缺陷
系统存在性能缺陷可能导致系统瘫痪不可用。性能测试能提前识别性能缺陷,规避性能风险,避免出现瘫痪。
2.提前识别稳定性缺陷
系统存在稳定性缺陷,短时间内正常运行,长时间运行会出错。性能测试能检验产品的稳定性,保障产品长时间无故障运行。
3.验证系统是否能支撑预期用户量
系统无法支撑过量用户访问时,当过量用户访问系统时,系统出错甚至崩溃,大大伤害用户体验。性能测试能模拟大量用户访问,验证系统是否能支撑预期用户量,如果不能,提前进行性能优化,避免上线后无法支撑。
四)性能测试的过程
1.制定预期目标
-
- 系统每秒支撑 1w 用户提交数据
- 提交数据响应时间不超过2s
2.需求分析
-
- 明确测试对象(对访问频繁的页面进行性能测试,比如活动页、用户反馈页)
- 明确测试内容(吞吐量、响应时间)
3.工具模拟
-
- 模拟 1w 用户提交数据
- 得到测试数据
4.测试分析
-
- 达到预期:每秒成功完成 1w 用户提交订单且提交订单响应时间不超过 2s
- 未达到预期:1w 个用户提交订单,出现大量失败或提交订单响应时间大于 2s
五)Jmeter
1.简介
是一个基于Java的性能测试工具,免费、开源、跨平台、简单易上手。
2.安装
mac版
下载:https://pan.baidu.com/s/1b11U70,解压后执行bin文件夹下 Jmeter.sh 即可。
3.使用
(1)配置代理服务器
-
-
Jmeter代理服务器
-
端口:jmeter代理服务器监听的端口
目标控制器:测试计划–线程组,录制下来的请求会保存在
分组:每组包含一个控制器,将录制下来的请求进行适当的分组。
包含模式:请求的 url 符合正则表达式才会被录制
排除模式:压测时不会压测静态资源(css、jpeg等),可以用来排除该类资源的请求。
-
-
本地代理服务器:
-
端口号与jmeter端口一致,127.0.0.1。
(2)录制请求 -- 测试组件简介
- tips:
- 浏览器由缓存机制,如果已经打开过某一页面,在次打开该页面时不会发送某些资源的请求,会导致漏掉某些请求,所以录制请求前一定要清理浏览器缓存。
- 录制请求时不能过快,确保每一个操作的请求全部发送完毕再进行下一个操作,避免只有一个简单控制器,不方便管理。
-
-
线程组
-
线程组是 Jmeter 最核心的测试组件,用来管理执行测试脚本的Jmeter线程(Jmeter线程是用来执行测试脚本里面的操作)
线程数:Jmeter 线程的数量,决定了Jmeter 使用多少个线程同时执行测试脚本,也就是并发数,可以用来模拟并发用户数。
Ramp-Up Period:启动所有线程花费的时间,防止瞬间给被测服务器施加过大压力,让压力平缓的增加。eg:线程数为10,Ramp-Up Period为10,代表10s的时间启动10个线程,每秒钟增加一个线程。
循环次数:每个线程重复执行多少次。
调度器:详细设置线程调度的启动和结束时间。
-
-
简单控制器
-
简单控制器是一个逻辑上的归纳,可以将每一个请求操作录制在一个独立的简单控制器中,方便管理。eg:打开主页过程中,浏览器向服务端发送的请求。
-
-
采样器
-
用来告诉Jmeter向服务端发送一次请求,并等待服务端的响应。请求的url、协议、参数等都在采样器中设置。最常用的采样器就是HTTP请求。
HTTP请求
-
-
断言
-
判断采样器的请求响应结果是否正确。。
最常用的是响应断言,可以判断服务端返回的响应码、响应文本、响应头等。
apply to:指定断言的作用范围,一般选择对当前采样器生效。
要测试的相应字段:测试要检查的目标。(响应文本:服务端返回数据;响应代码:http返回码;响应信息:http响应信息)
-
-
CSV Data Set Config
-
可以将数据参数化,方便使用不同的数据进行测试。本地准备 txt 文件,在 CSV Data Set Config 中正确配置即可。
Filename:本地文件路径。
Variable Names:文件的每一列的取的变量名。eg:username,password
Delimiter:文件每一列使用的分隔符。
使用时直接取 ${username},${password},线程会顺序读取文件中的每一行。
-
-
HTTP Cookie 管理器
-
为http请求进行cookie管理。可以模拟浏览器的行为,自动存储服务器返回的的cookie信息,后续再向这个服务器发送请求会自动带上相应的cookie。 Cookie 管理器为每个Jmeter线程管理独立的cookie。
4.测试结果收集
(1)监听器
Jmetr 提供各种监听器来收集、展示、保存测试结果。最常用的三种:查看结果树、聚合报告、响应时间曲线。
(2)查看结果树
查看结果树用来记录每个请求的详细信息,开销较大,可以根据测试需求酌情使用。
a. 请求列表:绿色为成功,红色为失败。判断结果依据断言是否成功。
b, 取样器结果:保存相应请求的数据。
- Thread Name:执行请求的线程组
- Sample Start:请求的触发时间
- Load Time:请求从发出到接收到完整返回结果的时间,即响应时间。
- Latebcy:请求从发出到开始接受返回结果的时间,一般略小于 Load Time。
- Connect Time:Jmeter 和服务器建立连接花费的时间。
- 返回头信息
c. 请求、响应数据
(3)聚合报告
为每种请求分别统计聚合结果,包括请求执行的次数、响应时间、错误率等。
Label:请求名称
Sample:请求次数
Avarge:平均响应时间
Median:响应时间的50值
90%Line、95%Line、99%Line:响应时间的90、95、99值
Min、Max:响应时间的最小值和最大值
Error:错误率,请求失败率。
Throughput:吞吐量
KB/sec:请求每秒传输的字节数
(4)响应时间曲线
可以记录每个请求的响应时间趋势图
Interval:对设置的时间内的响应时间取平均值进行展示
过滤标签:eg:^(210).*?
六)压测执行方案
1.测试执行
使用梯度压力测试,并发用户数梯度增加,得到全面的测试数据,更好的分析性能测试结果。
2.压测停止时间
吞吐量不再增加,或增加很少,或出现下降情况。