Bootstrap

Jmeter实现压测(学习)

一、场景设计

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请求

  1. 自动重定向

    • 指的是HTTP客户端在收到服务器返回的3xx类的状态码(例如301 Moved Permanently,302 Found等)时,会自动根据响应头中的Location字段,不经过用户操作,直接请求新的URL。
    • 客户端通常有配置选项来启用或禁用自动重定向。如果启用,用户收到的最终响应将是重定向之后的结果,而原始重定向的响应将被客户端自动处理。
  2. 跟随重定向

    • 着重于指描述客户端或测试工具在处理重定向时的行为,即是否在执行测试时记录每一次的重定向过程,包括所有中间的请求与响应的详细信息。
    • 在性能测试工具(如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*

;