性能测试工具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 来完成的。
阅读后若有收获,不吝关注,分享,在看等操作!!!