一、场景设计
1.分析哪些业务需要做压力测试?
- 比较常用的业务场景(or 功能模块)
- 单业务场景/多业务场景
- 项目要求做的业务场景
2.压力测试的并发数是多少?
- 有预期的数值?一次性达到多少?有上次性能测试的结果值?
- 无预期的数值?只有参考的在线用户数?(依据2:8原则,用在线用户数的20%作为参考去测试)
1000个用户---200个并发---不支持200个并发---调低
1000个用户---200个并发---支持200个并发---调高
3.关注哪些参数
虚拟用户数:线程===用户
并发数:指在某一时间,一定数量的虚拟用户同时对系统的某个功能进行交互(同步定时器等)
响应时间:参考值1 3 5/2 5 8;
基准测试:1个用户请求接口,200-500ms
压力测试:N个用户并发请求接口,2秒
TPS:衡量系统在一定时间内能够处理的事务数(越高越好,根据这个结果去做进一步的并发数/脚本的调整)
计算公式:总的事务数/总的运行时间
比如:某一系统1分钟处理1000个事务,那么TPS=1000/60=16.7
(1)没有更详细的数据:根据二八定律(80%的事务在20%的时间完成)
TPS=100000*0.8/86400*0.2=4.6
(2)如果有更详细的数据:5万笔交易是晚上的8-9点完成
TPS=50000/3600=13.9
业务的增长:30%
TPS=(50000+50000*0.3)/3600=18
TPS、QPS(每秒查询率)、RPS(每秒请求率)、HPS(每一秒的点击率)
错误率:(越低越好,90%以上,99.99%最好)
资源利用率:CPU和内存、队列、磁盘使用情况
二、Jmeter
1.线程(用户)
1.线程组
线程数: 就是并发数,如果目标100 就采取叠加的方式去进行添加
启动时间:每秒启动多少个(可以根据结果去进行调整),策略:想要服务器压力大点就时间少点,想要服务器的压力慢慢增加就时间长点。
循环次数:指定次数 or 永远(跟下面的持续时间配合使用)
调度器: 配合永远使用,去设置持续时间
2.jp@gc - Stepping Thread Group
this group wil start 100 threads 启动100个线程
First wait for 等待多少秒才开始压测,一般为0
Then start 一开始有多少个线程数,一般为0
Next add
threads every
using ramp-up
每多少秒启动多少个虚拟用户数,每组数据持续运行多少秒Then hold load for 60
全部加载完成后,负载运行60秒。
Finally stop 5
threads every 1
每一秒停止5个虚拟用户数。
2.监听器
1.聚合报告
Average:平均响应时间一默认情况下是单个 Request 的平均响应时间,当使用了Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间
Median: 中位数,也就是50%用户的响应时间
90% line:90%用户的响应时间
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量一默认情况下表示每秒完成的请求数(Request per second),当使用了Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction perSecond 数
3.取样器
1.HTTP请求
-
自动重定向:
- 指的是HTTP客户端在收到服务器返回的3xx类的状态码(例如301 Moved Permanently,302 Found等)时,会自动根据响应头中的
Location
字段,不经过用户操作,直接请求新的URL。 - 客户端通常有配置选项来启用或禁用自动重定向。如果启用,用户收到的最终响应将是重定向之后的结果,而原始重定向的响应将被客户端自动处理。
- 指的是HTTP客户端在收到服务器返回的3xx类的状态码(例如301 Moved Permanently,302 Found等)时,会自动根据响应头中的
-
跟随重定向:
- 着重于指描述客户端或测试工具在处理重定向时的行为,即是否在执行测试时记录每一次的重定向过程,包括所有中间的请求与响应的详细信息。
- 在性能测试工具(如JMeter)中,通常可以配置是否跟随重定向,也就是说,是否记录每一步的重定向信息,并反映在测试结果中。
4.逻辑控制器
1.事务控制器
其下放置一个事务的整体流程,计算流程的时间
2.吞吐量控制器
控制其下节点的发送次数
Total Executions:按照次数来执行;当小于或者等于0时,则不执行
Percent Executions:按照百分比来分配流量,计算结果为小数时,按照四舍五入来统计。
4.命令行运行Jmeter
常用参数
-n:命令行模式运行JMeter
-t:指定要执行的jmx文件,参数为jmx文件路径
-l:指定测试结果的日志文件( jtl 或 csv )路径(路径不存在时会自动创建)
-j:指定JMeter日志文件(INFO、ERROR、DEBUG等)路径
-g:指定测试结果文件的路径。仅用于生成测试报表(参数为:csv结果文件)
-e:设置在测试结束后生成HTML报告
-o:指定用于生成HTML报告的文件夹。文件夹必须为空或不存在(参数为:报表文件夹路径)
-f:强制将JMeter进程结束,或者在运行非GUI测试时,立即结束测试并生成结果文件。 # jmeter -n -t test.jmx -l result.jtl -f
分布式压测参数
-r: 远程运行JMeter客户端和服务器模式
服务器列表由D:\Jmeter\apache-jmeter-5.6.3\bin中jmeter.properties的remote_hosts指定
-R:指定远程(分布式)服务器列表
参数为:指定服务器列表,配置形式同remote_hosts
-s: 运行JMeter作为服务器(用于分布式测试) # jmeter-server
-c: 指定远程服务器的 IP 地址或主机名 # jmeter -c 192.168.1.100
-i: 指定本地 IP 地址,用于远程服务器通信 # jmeter -i 192.168.1.101
在代理下运行Jmeter
-H:设置用于代理服务器的主机名。 # jmeter -H 127.0.0.1
-P:设置用于代理服务器的端口号。 # jmeter -P 7890
实操:
1.执行测试脚本:jmeter -n -t test.jmx
2.指定结果文件及日志路径:
jmeter -n -t test.jmx -l report\01-result.csv -j report\01-log.log
结果文件类型为 jtl 或 csv,可通过Jmeter的聚合报告浏览结果文件,查看最终的结果。
HTML测试报告的度量维度:
聚合报告:类似于UI上的 「Aggregate Report」
Errors报告:展示不同错误类型的数量以及百分比
响应时间变化曲线:展示平均响应时间随时间变化情况,类似于JMeter Plugins在UI上的*jp@gc-Response Times Over Time*
数据吞吐量时间曲线:展示每秒数据吞吐量随时间变化的情况,类似于JMeter Plugins在UI上的*jp@gc- Bytes Throughput Over Time*
Latency time变化曲线:展示Latency time随时间变化的情况,类似于JMeter Plugins在UI上的*jp@gc -Response Latencies Over Time*
每秒点击数曲线:类似于JMeter Plugins在UI上的*jp@gc -Hits per Second*
HTTP状态码时间分布曲线:展示响应状态码随时间的分布情况,类似于JMeter Plugins在UI上的*jp@gc-Response Codes per Second*