当前位置: 首页 > article >正文

性能测试工具Jmeter负载模拟

目录

场景设置

线性属性

补充知识:java线程一般有以下5种状态

场景运行

1.GUI运行测试

2.非GUI运行测试


在Jmeter测试计划中可以实现场景,负载,监听的功能。场景是用来尽量模拟用户的真实操作的工作单元,Jmeter场景主要通过线程组设置完成。场景设计源自于用户的真实操作,场景设计的原则是忠于用户的真实操作,将用户的各种操作组合到场景中来。

当然,Jmeter场景设计不仅仅是设置线程组,有些复杂场景的设计还需要配合逻辑控制器。

场景设置

Jmeter线程组实际上是建立一个线程池,Jmeter根据用户的设置初始化线程池,并在运行时处理各种逻辑。

图片

名称:可以随意设置,但最好有业务意义。

注释:可以随意设置,也可以为空

在取样器错误后要执行的动作:既某一个请求出错后的异常处理方式,分为以下5中方式运行。

1>继续

如果请求(用Sampler元件模拟的用户请求)出现错误,其后的请求将继续运行。

在大量用户并发时,服务器偶尔响应错误是正常现象。例如服务器由于性能问题不能正常响应或者响应慢,此时出现的错误需要被记录,作为服务器存在性能问题的依据。

2>启动下一进程循环。如果请求出现错误,则同一脚本中的余下请求将不再执行,直接执行下一进程。

3>停止线程。如果请求失败,则停止当前线程,不再继续执行。假如配置了运行50个线程,如果某一线程中的某一个请求失败了,则停止当前线程。如果停止的事务增多,则停下来线程也会增多,处于运行状态的线程会减少,最后导致服务器负载不够(若服务器负载不够,测试结果将不具有参考性),因此一般不会勾选此项。

4>停止测试。如果请求失败,则停止所有线程,即停下整个测试。但是每个线程会执行完当前迭代后再停止。

5>立即停止测试。如果请求失败,立即停止整个测试场景的运行。

线性属性

1>线程数。运行的线程数设置,一个线程对应一个模拟用户。

2>Ramp-up时间(秒)。所有线程从启动到开始运行的时间间隔,单位是秒。即所有线程在多长时间内开始运行。

如果线程数设置了30个,Ramp-up时间设置了10秒,那么开启场景后每秒会启动(30/10)3个线程。

如果Ramp-up设置了0秒,那么开启场景后将全部运行30个线程。

3>循环次数。请求的重复次数。如果选择后面的“永远”,那么请求将一直继续除非停止或崩溃;如果不选择“永远”,而在输入框中输入数字,那么请求将重复指定的次数;如果输入1,那么请求将执行一次;执行0次无意义,所以不支持设置为0。

4>Same user on each iteration。复用前一次迭代的线程。

5>延迟创建线程知道需要。线程在Ramp-up Period的间隔时间内启动并运行。例如设置了30个线程10秒内的Ramp-up Period时间,那么每隔1秒启动3个线程并运行测试。

图片

6>调度器。设置何时开始

7>持续时间(秒)。测试计划持续多长时间。

8>启动延迟(秒)。从当前延迟多长时间开始运行测试,单机执行按钮后,仅初始化场景,不运行测试,等待延迟到达后开始测试,运行时长为“持续时间”中设置的时间长度。

如果你觉得这个场景无法满足负载递增的需求,不能设计出浪涌的场景,那么可以使用第三方插件(jmeter-plugins官网下载)来满足要求。

补充知识:java线程一般有以下5种状态

NEW。创建未启动,已经实例化。

RUNNABLE。就绪状态,线程对象创建后,其他线程调用了该对象的start()方法,该状态的线程位于可运行线程池中,已经准备好。只等获取CPU的使用权,然后开始运行。

RUNNING。运行状态,就绪状态的线程获取了CPU使用权,执行程序代码。

BLOCKED。阻塞状态,线程因为某种原因放弃CPU使用权,暂时停止运行(典的如IO等待导致的线程处于BLOCKED状态):直到线程进入就绪状态,才有机会转到运行状态:阻塞的情况分为以下3种。

等特阻塞。运行的线程执行 wz0方法,线程进入等待池中。

同步阻塞。运行的线程在获取对象的同步锁时,由于该同步锁被别的线程占用(思就是资源争用落败),该线程被放入锁池中。

其他阻塞。运行的线程执行 sleep()或join()方法,或者发出了IO请求时,该线程设置为组赛状态。当sleep()状态超时时、join()等待线程终止或者超时,或者IO处理完毕时线程重新转入就绪状态。

DEAD。死亡状态。执行完毕或者异常退出,线程生命周期结束。

场景运行

Jmeter通过场景运行来制造负载。Jmeter的场景运行方式分为两种,一种是GUI方式,另一种是非GUI方式。在windows系统中我们可以使用命令窗口的中运行。

Jmeter运行基于两种架构,一种是本地化运行,即单机运行;另外一种是远程运行。不管是GUI或者是非GUI方式,都支持本地化和远程运行。

1.GUI运行测试

由于具有可视化,用GUI方式查看测试结果比较直观,用鼠标单击就可以控制启动,也方便我们实时查看运行状态,查看测试结果,运行线程等。

2.非GUI运行测试

非GUI运行测试是没有Jmeter界面,我们在命令窗口通过命令行来实现场景运行,之所以使用非GUI方式运行是因为Jmeter可视化界面及监听动态展示结果比较消耗负载机资源,再多并发情况下GUI方式往往会导致负载及资源紧张,会对性能测试结果造成影响。

当然,这个影响不是说被测系统的性能受到影响。比如,响应时间变大之类,而是影响了负载量的生成。非GUI方式下100个线程可以产生100TPS的负载,而GUI方式下可能会产生80TPS的负载数。

如果一台负载机器只能支持100个线程运行,那么我们只能有多增加机器外,在测试执行时提醒大家关注负载机性能,可以多架设几台jmeter负载机器来减轻单台负载机器的资源消耗。

非GUI运行Jmeter测试计划命令行:

java -jar %JMETER_HOME%\bin\ApacheJMeter.jar -n -t %JMETER_HOME%'scriptJforum-5.1-01.jmx -r -l result.jtl
%JMETER_HОME%\bin\jmeter -n -t %JMETER_HOME%\script\ Jforum-5.1-01.jmx -1%JMETER_HOME%\result\results.jtl

这两种方式都可以运行测试计划,JMeter运行测试计划实际上是通过运行ApacheJMeter.jar 来完成的。

阅读后若有收获,不吝关注,分享,在看等操作!!!


http://www.kler.cn/a/502001.html

相关文章:

  • 【React】新建React项目
  • WINFORM - DevExpress -> DevExpress总结[安装、案例]
  • Java-数据结构-栈与队列(常考面试题与单调栈)
  • [ Spring ] Install MongoDB on Ubuntu24
  • gesp(C++五级)(1)洛谷:B3941:[GESP样题 五级] 小杨的锻炼
  • OpenCV基础:视频的采集、读取与录制
  • TPS61022 PFM的机制以及TPS61xxx转换器的PFM与PWM之间的负载阈值
  • 使用jquery的$.ajax提交带有FormData的post请求报错TypeError: Illegal invocation
  • 详解C#调用系统文件窗口:打开文件、保存文件和选择文件夹
  • 【Javaweb02】初探CSS:网页样式设计的入门指南
  • 《机器学习》——TF-IDF(关键词提取)
  • 如何用python实现语音输出
  • 积鼎科技:国产自主核反应堆流体仿真解决方案
  • 深度解析Linux中的调试器gdb/cgdb的使用
  • MySQL 16 章——变量、流程控制和游标
  • 青少年编程与数学 02-006 前端开发框架VUE 23课题、UI框架
  • huggingface/bert/transformer的模型默认下载路径以及自定义路径
  • 《使用 YOLOV8 和 KerasCV 进行高效目标检测》
  • 【机器学习案列】学生抑郁可视化及预测分析
  • 迁移WSL中的ext4.vhdx文件
  • MATLAB与Python中的快速傅里叶变换频谱分析
  • R9000P发热严重
  • 聚铭网络当选中关村华安关键信息基础设施安全保护联盟理事单位
  • 2Hive表类型
  • 计算机网络 | 什么是公网、私网、NAT?
  • Linux:线程的互斥与同步