性能测试工具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 来完成的。

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

相关推荐
MStudyStudio1 小时前
github 端口22 超时问题解决
github
阿昊真人7 小时前
ESP8266 AP模式 网页配网 arduino ide
ide·github
嘻嘻哈哈曹先生7 小时前
Java负载均衡
运维·github·负载均衡
测试19989 小时前
接口测试之postman的使用
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·postman
云采10 小时前
掌控 JMeter 测试节奏:Once Only Controller 让关键操作 “一步到位”
测试工具·jmeter·压力测试
蜡笔小新DD10 小时前
Jmeter配置服务代理器 Proxy(二)
jmeter·代理模式
我是單身你是狗10 小时前
Jmeter数据库
数据库·jmeter
蜡笔小新DD10 小时前
Jmeter 简单使用、生成测试报告(一)
jmeter
云采11 小时前
探秘 JMeter (Interleave Controller)交错控制器:解锁性能测试的隐藏密码
测试工具·jmeter·压力测试
Yorkie_Lin11 小时前
Jmeter Beanshell脚本批量提取接口的值生成csv文档
jmeter