目录

1. 场景设计

1.1 什么是场景

1.2 场景设计的原则是什么

2. 场景设置

2.1 JMeter线程组界面解析

2.2 Java线程的5个状态

3. 场景运行

3.1 GUI运行

3.2 非GUI运行

4. JMeter性能参数配置

5. 测试监控

5.1 JMeter监听器

5.2 开源监听插件


1. 场景设计

1.1 什么是场景

场景是用来尽量真实地模拟用户操作的工作单元,场景设计源自于用户真实操作。

JMeter的场景设计主要通过线程组设置来完成。

1.2 场景设计的原则是什么

场景设计原则是忠于用户实际操作,组合用户的各种操作到场景中来。

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

2. 场景设置

2.1 JMeter线程组界面解析

重点解析:

(1)在取样器错误后要执行的动作:即其中的某个请求出错后的异常处理方式

1)继续:请求出错后继续运行

因为我们在大量用户并发时,服务器偶尔响应错误是正常现象(比如服务器由于性能问题不能正常响应或响应慢等,这些信息记录下来作为性能问题的依据)。勾选该项,出错后的请求继续进行(可能也会随着失败)。

2)Start Next Thread Loop:如若出错,则同一脚本中的余下请求将不再执行,直接重新开始执行。比如登录失败,发帖操作将不再执行,重新开始新一轮迭代,即重新开始登录。

3)停止线程:如果遇到请求失败,则停止当前线程,该线程不再执行。

总线程数一定的情况下,停止的线程数越多,运行状态的线程就会越来越少,可能导致最后的负载不够。

4)停止测试:如果某一线程的某一请求失败了,则停止所有线程,即停止整个测试。

但每个线程还是会执行完当前迭代后再停止。

5)立即停止测试:如果有线程的请求失败了,则马上停止整个测试场景。

(2)线程属性

1)线程数:一个线程对应一个模拟用户

2)Ramp-up Period(in second):线程启动开始运行的时间间隔,单位是秒。即所有线程在多少时间内开始运行。比如线程数是50,启动时间10秒,那么每秒启动5个线程。如果是0秒,则开始场景后立即启动50个线程。

3)循环次数:请求的重复次数。forever,则请求将一直继续直到停止或崩溃。如果输入数字,则请求将重复指定的次数。

4)Delay Thread creation until needed:

勾选:线程在ramp-up period的时间间隔里启动并运行。比如50个线程10秒,即每隔1秒启动5个线程并运行后面的sampler。

不勾选:测试计划开始后启动所有线程(new),但不马上运行sampler, 是按照ramp-up period时间来运行的。比如50个线程10秒的ramp-up period时间,那么计划开始后,线程全部就绪,但第一秒只会有5个线程开始运行。(???还是没太明白这个区别,待核实)

实际操作中,勾选或不勾选,不影响测试结果。

(3)调度器配置:设置核实开始运行

持续时间:测试计划持续多长时间,如果启动时间+持续时间大于结束时间,那么此设置覆盖结束时间。

启动延迟:点击执行按钮后,仅初始化场景,不运行线程。等待延迟到时候再开始运行线程。如果T(表示当前时间)+ 延迟时间大于启动时间,则覆盖启动时间。

2.2 Java线程的5个状态

(1)new:创建未启动。已经实例化,只是没有开始运行线程的run方法。

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

(3)running:运行状态。就绪状态的线程获取CPU使用权执行程序代码。

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

阻塞情况有三种:

等待阻塞:运行的线程执行wait()方法,线程进入等待池中。

同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用了,则该线程放入锁池中。

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

(5)dead:死亡状态。执行完毕或者异常退出,线程的生命周期结束。

3. 场景运行

3.1 GUI运行

(1)本地运行

即只运行本地一台JMeter机器,所有请求从一台机器发出。

(2)远程运行

用一台JMeter控制机(Master)来控制远程的多台负载机(Slave)来产生负载。

JMeter控制机与远程负载机的通讯是通过RMI方式来完成的。

在负载机上运行Agent程序(启动命令是%JMETER_HOME%\bin\jmeter-server.bat)。

JMeter控制机(Master)上点击相应运行图标来运行远程负载机。

(3)Agent程序是由ApacheJMeter.bat中的程序来实现的

启动负载机上的Agent, 即双击 jmeter-server.bat。

JMeter控制机开始运行测试计划就会自己探测端口,实施连接。

不过在连接之前,先得告诉JMeter控制机,让它知道要去尝试连接哪些机器。

这个动作需要通过配置文件来完成。

打开控制机里的jmeter.properties文件,搜“remote_hosts”关键字。如图:

注意:

远程运行的脚本如果有参数化文件,或者脚本有依赖包时,需要手工把这些参数文件和依赖包拷贝到远程负载机上。这一点不太灵活。

3.2 非GUI运行

GUI方式运行,会导致负载机的资源紧张,对性能测试结果造成一定影响。

这个不是说影响被测系统的性能,而是影响负载机本身,导致负载量的生成之类的问题。

(1)非GUI方式不显示界面,会以字符形式周期性显示执行结果。对负载机的资源消耗比较小。

(2)非GUI方式的运行命令:

JMeter测试计划是通过ApacheJMeter.jar来完成的。

命令1:java -jar %JMETER_HOME%\bin\ApacheJMeter.jar -n -t %JMETER_HOME%\script\Jforum4-1-01.jmx -r -l result.jtl

命令2:%JMETER_HOME%\bin\jmeter -n -t %JMETER_HOME%\script\Jforum4-1-01.jmx -l %JMETER_HOME%\result\results.jtl

(3)参数:

-h 帮助

-n 非GUI模式

-t 指定要运行的 Jmeter测试脚本.jmx,可以是相对路径或绝对路径

-l 记录结果的文件,每次运行之前要确保之前没有运行过,即xx.jtl不存在,否则会报错

-r 开启远程负载机(非GUI方式),此时,远程服务器(remote host)列表在jmeter.properties中指定

-R 开启远程负载机,-R可以指定负载机IP,会覆盖jmeter.properties中remote_hosts的设置

-e 在脚本运行结束后生成html报告

-o 用于存放html报告的目录(目录要为空,否则报错)

-v 查看版本

-p 指定读取JMeter属性文件,比如jmeter.properties文件中设置的

-s 以服务器方式运行,即远程agent方式

-H 设置代理,一般填写代理IP

-P 设置代理端口

-u 代理账号

-a 代理口令

-J 定义JMeter属性,等同于在jmeter.properties中的设置

-G 定义JMeter全局属性,等同于在Global.properties中进行设置,线程间可以共享

-D 定义系统属性,等同于在system.properties中进行设置

-S 加载系统属性文件,可通过此参数指定加载一个系统属性文件,此文件可以用户自己定义

-L 定义JMeter日志级别,如DEBUG, ERROR等(log4j相关:http://logging.apacge.org)

-d 指定JMeter Home目录

-X 停止远程运行

4. JMeter性能参数配置

%JMETER_HOME%\bin\jmeter.bat中有性能相关的参数,如下图(图源网络)

set HEAP:设置JVM堆大小,-Xms512m,设置初始堆大小512M,-Xmx设置最大堆大小。还可以用-Xmn来设置年轻代大小,官方建议年年轻(-Xmn)大小是最大堆(-Xmx)大小的3/8 (实际可以大一些,通常可以1/2)

set NEW:设置年轻代大小,-XX:NewSize=256m 设置年轻代初始内存大小,-XX:MaxSize=512m设置年轻代最大内存。-Xmn与-XX:MaxSize有重叠,为了方便,只设置-Xmn即可,一般设置-Xms和-Xmx一样大,避免年轻代初始内存占满后扩充空间时内存中数据迁移导致的性能影响。

set SURVIVOR:年轻代分为两个Survivor区(S0和S1)和一个Eden区。-XX:SurvivorRatio=8设置Survivor与Eden大小的比值,S0和S1占年轻代内存的2/(2+8)即1/5,eden占4/5。-XX:TargetSurvivorRatio=50%表示Survivor区的实际使用率为50%,调整Survivor的占用比率可以提高Survivor的利用率,最大为90%。

set TENURING:-XX:MaxTenuringThreshold=2,年轻代晋升年老代周期(经过多少次GC还存活),默认值是15。

set PERM:-XX:PermSize=64m设置持久代初始大小为64M,-XX:MaxPermSize=128m设置持久代最大为128M,-XX:+CMSClassUnloadingEnabled,设置年老代CMS收集器对持久代进行垃圾回收。

set DUMP:-XX:+HeapDumpOnOutOfMemoryError,设置当内存溢出时Dump内存信息,这样好处是JVM崩溃后方便查看堆信息进行问题分析,找到内存溢出的原因。

通常建议修改:

-Xms -Xmx -Xmn -XX:PermSize=64m  -XX:MaxPermSize=128m

系统是32时,-Xmx不要超过1.5G.

系统是64时,-Xmn不要超过-Xmx的1/2.

如果这样配置后JMeter产生的负载还是不够大,机器配置又不够了,可以启动多个jmeter实例(在同一台机器上启动多个JMeter,每一个启动的JMeter都是一个独立的进程,端口会自动分配,不用担心端口冲突)。

5. 测试监控

5.1 JMeter监听器

JMeter长时间执行测试计划时,常用的监听器是:Summary Report, Aggregate Report

(1)Summary Report:汇总报告

(2)Aggregate Report:聚合报告

5.2 开源监听插件

JMeter作为开源性能工具,JMeter Plugins增加了众多的监听器,图形化丰富,功能强大。可根据需求使用。

JMeter工具:场景设计,场景设置,场景运行,性能参数配置,测试监控相关推荐

  1. HiveSQL运行优化参数配置

    HiveSQL运行优化参数配置 HiveSQL常用数据处理语句 HiveSQL中复杂数据类型操作 我们平时在使用hive执行一些SQL任务时.经常会遇到执行速度很慢,数据倾斜,资源不够用等问题.那是因 ...

  2. 计算机图形学场景设计论文,三维场景设计与表现--毕业设计(论文).doc

    三维场景设计与表现--毕业设计(论文) 三维场景设计与表现-毕业设计(论文) 南京化工职业技术学院 毕业设计(论文) 论文题目:三维场景设计与表现论文题目:The design and perform ...

  3. DTN设置、运行和参数介绍——ONE Readme 翻译

    ONE模拟器 The ONE v1.6.0 - Readme原文 Quick start Configuring DTN2 Reference Implementation Connectivity ...

  4. 性能场景设计深度分析

    注:该文转发自  http://geek.csdn.net/news/detail/195559 感谢合众支付资深技术专家程超的推荐与审校.  作者:张允庆,现就职于易宝支付有限公司,任职高级性能测试 ...

  5. 从“旅行青蛙”到“跳一跳”,看产品的场景设计和心智阶梯

    作者:付如涛 全文共 4423 字 7 图,阅读需要 11 分钟 ---- / BEGIN / ---- 本篇不重点研究"旅行青蛙"和"跳一跳"的成功模式,老付 ...

  6. jmeter工具进行性能测试

    jmeter工具进行性能测试 性能测试理论概述 背景 性能测试指标 TPS 平均响应时间 TOP响应时间 其他指标 性能监控指标 性能测试流程 jmeter工具 jmeter常用组件 jmeter命令 ...

  7. 【Java 网络编程】服务器端 ServerSocket 配置 ( 端口复用 | 缓冲区设置 | 超时时间 | 性能权重 | 端口绑定 )

    文章目录 I ServerSocket 端口号绑定参数 II ServerSocket 复用绑定端口设置 III ServerSocket 设置缓冲区大小 IV ServerSocket 设置超时时间 ...

  8. 性能测试场景设计之用户模式设置

    性能测试场景设计之参数设计 1.用户模式设置 场景执行前需要根据系统特性对场景进行配置,以便对系统进行负载测试时压力状况更加符合业务特性.相关的参数配置如下: 首先新建场景,如下: 场景新建的时候一般 ...

  9. LoadRunner中Action的迭代次数的设置和运行场景中设置

    LoadRunner中Action的迭代次数的设置和运行场景中设置 LoadRunner是怎么重复迭代和怎么增加并发运行的呢? 另外,在参数化时,对于一次压力测试中均只能用一次的资源应该怎么参数化呢? ...

  10. jmeter性能测试场景设计

    Jmeter场景设置 初始配置 可参阅:https://blog.csdn.net/DDJ_TEST/article/details/123660120 线程组插件 安装插件:jpgc - Stand ...

最新文章

  1. webview加载本地资源的各种尝试
  2. log4j2的xml的配置样例
  3. Drawable Resource 之旅(一):BitmapDrawable 详解
  4. Azure平台管理员必须了解的安全问题
  5. sql server 索引学习1
  6. 成功解决Could not import the PyAudio C module ‘_portaudio‘.
  7. Citrix Profile Management 和 VDI系列讲座之二:Profile漫游需要怎么配置存储和网络
  8. 7.25第一次组队赛
  9. 如何看别人网络下计算机,如何查看电脑是否被他人偷偷使用过网络技巧 -电脑资料...
  10. 计算机中i o接口,计算机组成原理 输入输出(I/O)I/O 接口(I/O 控制器)
  11. 大数据面试-01-大数据工程师面试题
  12. 从零开始学习python编程-如何从零开始学python?
  13. java类包装器有什么用_Java中的包装器类
  14. 2016.01.18 UILabel
  15. 成功走职场要找准自己的快捷键
  16. (day 48 - 双端队列的使用 ) 剑指 Offer 59 - II. 队列的最大值
  17. VB获取窗体的位置和大小
  18. 你想要的宏基因组-微生物组知识全在这(2022.8)
  19. 计算机软件工程师考试试题,计算机考试软件工程师试题
  20. PHP 加密解密函数

热门文章

  1. jquery fadein css同时用,Fadein,fadeout事件一起使用jquery
  2. 计算机音乐多幸运,多幸运(伴奏) 韩安旭 多幸运(伴奏)歌曲,多幸运(伴奏)mp3在线试听 - 5nd音乐网...
  3. 【IC验证】Questasim使用指导
  4. java 上传文件 md5_上传到文件选择器时的md5校验和
  5. 用LSTM自动生成古诗
  6. 263企业邮箱服务器是什么,千万别用263企业邮箱 - 外贸邮箱邮件群发 - 电脑网络 - 福步外贸论坛(FOB Business Forum) |中国第一外贸论坛...
  7. linux应用层获取鼠标坐标
  8. 关于人工智能的一些幻想
  9. 普通人的第一个Linux发行版-安装Deepin20.5
  10. python实现Excel邮件合并