Jmeter场景设置与监听

Jmeter场景设置

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

场景设计:
场景设计是根据收集分析用户的实际操作而定义的Jmeter脚本的执行策略。
性能测试中涉及的基本场景有两种,即单一业务场景和混合业务场景,这两种业务场景缺一不可, 缺少任何一种都不能准确评估系统性能,定位系统瓶颈。如果只做单-业务场景,得到的结果与实际生产环境差距较大,没有实际指导意义;如果只做混合业务场景,不能快速定位系统性能快速降低的原因,起不到定位瓶颈、系统调优的作用。只有两种场景互为补充,才可以获取最符合客户要求的测试结果。

在Jmeter场景主要通过线程组设置来完成。通过组合用户各种操作到场景中来,当然场景设计不仅仅是设置线程组,有些复杂场景还需要与逻辑控制器配合。Jmeter线程组实际上是建立一个线程池。

线程组界面如下:

线程组界面参数说明:
名称、注释与之前元件一样可以随意设置。

在取样器错误后要执行的动作:设置线程组中某一个请求出错后的异常处理方式。
继续:请求出错后继续运行。勾选此项后,有请求出错也继续运行。在大量用户并发情况下,服务器偶尔响应错误是正常现象,比如服务器由于性能问题不能正常响应或者响应不及时,此时我们把过程中错误记录下来,作为有性能问题的依据。

Start Next Thread Loop:遇到sampler执行出错时,直接进行下次循环,当前循环剩下的所有sampler不再执行。
停止线程:遇到sampler执行出错时,当前线程停止进行,其他线程继续。
停止测试:遇到sampler执行出错时,当前所有线程执行完当前循环停止进行。
stop Test now:遇到sampler执行出错时,当前所有线程立即停止

线程属性:
线程数:设置并发用户线程数量,即通常意义的并发用户数,一个线程对应一个模拟用户。

Ramp-Up Period (in seconds) :设置并发用户加载时间,即线程启动开始运行的时间间隔,单位是秒。假设并发用户数设置为50,此处设置为10,那么每秒就会启动50/10,5个线程;如果设置0,则开始就50个线程就立即启动。

循环次数:输入框与复选框只能选择一种, 不能同时被选择为场景循环方式;输入框输入数字则被认为是当前线程组所控制的脚本区域的执行次数; [永远] 复选框选后,输入框内的数字将失效,启动后脚本将一直执行下去。 输入框输入0表示执行0次无意义,所以不支持。

Delay Thread creation util needed:直到需要时延迟线程的创建,设置后,线程在Ramp-Up Period的间隔时间启动并运行。不设置,测试计划开始后启动所有线程
(NEW状态),但不立即运行Sampler,是按照Ramp-Up Period时间来运行的。
在实际性能测试过程中,设置或者不设置都影响不大。

调度器:选中之后可以配置启动时间,立即或者预定的时间。
启动时间:测试计划什么时候启动,启动延迟会覆盖它。当启动时间已过,手动运行脚本时当前时间也会覆盖它(但启动时间页面显示不会变)。
结束时间:测试计划什么时候结束,持续时间会覆盖它。
持续时间(秒) :测试计划持续多长时间,会覆盖结束时间。
启动延迟(秒) :测试计划延迟多长时间启动,会覆盖启动时间。

场景运行

Jmeter的场景运行方式分为两种,一种是GUI界面方式运行,一种是命令窗口(Windows的DOS命令窗口)运行。
Jmeter的场景运行架构分为两种,一种是本地运行,另一种是远程运行。不管是GUI还是命令方式都支持本地和远程运行。

GUI方式运行:
1、本地运行:本地运行即只运行本地一台]meter机器, 所有的请求通过该机器发
送。
2、本地运行点击绿色的运行按钮,如下左图所示
 


 


3、点击运行后,通过右上角可以查看线程信息,0代表没有线程异常,0/4中的前一个0代表当前运行活跃的进程数为0,后一一个4代表了总共运行了4个线程。灰色的圆框如果是绿色的代表运行正确。如果要停止测试,点击STOP按钮

2、远程运行:
远程运行是用-台Jmeter控制机控制远程的多台机器来产生负载。控制机与负载机之间通过RMI方式来完成通信。
操作步骤如下:
1、在负载机上部署Jmeter,确保Jmeter的bin目 录下存在ApacheJMeter.jar与jmeter-server.bat两个文件。
2、双击启动负载机的jmeter- server.bat程序。
3、在Jmeter控制机的bin目 录下找到jmeter.properties文件并修改"remote.hosts",
增加负载机IP,多个IP使用英文逗号隔开,修改后要重启Jmeter。如下图:
 


 


4、进入Jmeter控制机的GUI图形界面,远程运行点击上图按钮即可。点击后,Jmeter控制机会自动探测,只要先启动远程负载机上的Agent,开始运行测试计划时就会自己连接负载机去完成。
5、如果要停止,点击上面右图的后面两个按钮即可。前者是执行完成当前迭代停止(比如脚本中有5个请求,在运行第2个的时候收到停止命令,那么将继续执行完5个请求然后再停止), 后者是立即终止。
备注:设置127.0.0.1, 需要控制机也启动jmeter-server.bat

命令窗口运行:
命令窗口运行没有Jmeter界面,通过DOS命令窗口运行场景。用纯命令方式运行Jmeter是因为]meter可视化界面及监听器动态展示结果都比较消耗负载机资源,在大并发情况下GUI方式往往会导致负载机资源紧张,会对性能结果产生影响。
这个影响不是指被测系统的性能受到影响,而是指负载机的性能受到影响,导致负载量上不去,比如命令模式100个线程可产生100TPS的负载,而GUI方式只产生80TPS的负载。所以推荐进行性能测试的时候,使用命令方式来运行测试计划。

Jmeter命令窗口方式运行场景的命令如下:
1、java -jar %JMETER_ HOME%\bin\ApacheJMeter.jar -n -t
%JMETER_ HOME%\script\script.jmx -r -l result.jtl
2、%JMETER_ HOME%\bin\jmeter -n -t %JMETER HOME%\script\script.jmx -r -l result,jtl
备注:
两条命令都可以运行测试计划,其中%JMETER_HOME%必须配置jmeter的环境变量,%JMETER_HOME%\script\scriptjmx为jmeter脚本存放路径。

jmeter命令行工具部分参数说明:
-n:非GUI方式运行
-t:指定运行的测试脚本地址与名称,可以是相对或绝对路径
-h:查看帮助
-v:查看版本
-p:指定读取Jmeter属性文件,比如jmeter.properties文件中设置的
-1:记录测试结果到文件,指定名称与路径,可以是相对或绝对路径
-s:以服务器方式运行(远程方式)
-r:开启远程负载机,远程负载机列表在jmeter.properties文件中指定
-R:开启远程负载机,可以指定负载机IP,会覆盖jmeter.properties中的设置
-L:定义Jmeter的日志级别,如DEBUG、INFO、ERROR等
-H:设置代理IP
-P:设置代理端口
-u:设置代理帐号
-a:设置代理帐号密码
-X:停止远程执行
-J:定义Jmeter属性, 等同于在jmeter.properties中设置
-G:定义Jmeter全局属性,等同于在Global.properties中设置,线程间可相互共享

Jmeter场景运行优化配置:
在性能测试场景运行时,使用GUI方式会占用资源,其实不管是GUI或者命名模式都会占用一定资源。因为Jmeter是纯Java开发,所以可以调整其性能参数,让其在Java虚拟机上运行起来更顺畅、效率更高。

配置如下:
打开Jmeter安装路径\bin\下的jmeter.bat文件,打开后,其中rem属于注释。
可以修改如下参数:
set HEAP:设置JVM堆大小,-Xms设置 初始堆大小,-Xmx设置最大堆大小
set NEW:设置年青代大小,-XX:NewSize设置年 青代初始内存大小,-
XX:MaxNewSize设置年青代最大内存大小,建议设为整个堆大小的1/3或者1/4,两
个值设为一样大。
set PERM: -XX:PermSize设置 持久代初始大小,-XX:MaxPermSize: 最大大小
set TENURING:年青代晋升年老代周期,默认是15
整个堆大小=年轻代大小+年老代大小+持久代大小,持久代-般固定大小为64m,所以增大年轻代后,将会减小年老代大小。

Jmeter测试监控

性能测试执行过程中,场景监控的主要任务是收集测试结果,测试结果有事务响应时间、吞吐量、TPS、 服务器硬件性能、JVM使用情况和数据库性能状态等。Jmeter中通过 监听器来完成测试结果收集工作。
Jmeter监听器元件比较多,- -般做性能测试用到比较多的监听器主要是Summary Report或者Aggregate Report(聚合报告)。
Summary Report以表格的形式显示取样器结果,如果不同取样器(不同请求)拥有相同的名字,那么在Summary Report中会统计到同一行,所以在给取样器取别名时最好不要为空,按业务功能来命名较好。
在执行性能测试之前,先通过右击线程组--添加--监听器- Summary Report,执行后生成的结果图如下:

Summary Report界面说明:
名称、注释与之前元件-样可以随意设置。
所有数据写入一个文件:保存测试结果到本地。
文件名:指定保存结果。
仅日志错误:仅保存日志中报错的部分。
Successes:保存日志中成功的部分。
Configure:设置结果属性,即保存哪些结果字段到文件。-般保存必要的字段
信息即可,保存的越多,对负载机的I0会产生影响。
Label:取样器名称(或者是事务名)。

Samples:取样器运行次数(提交了多少笔业务)。

Average:请求(事务)的平均响应时间,单位为毫秒。
Min:请求的最小响应时间,单位为毫秒。
Max:请求的最大响应时间,单位为毫秒。
Std.Dev:响应时间的标准方差。
Error%:事务错误率。
Throughput:吞吐率(TPS)。
KB/sec:每秒数据包流量,单位是KB。
Avg.Bytes:平均数据流量,单位是Byte。

Aggregate Report(聚合报告)与Summary Report-样,也是以表格显示取样器结果。在执行性能测试之前,先通过右击线程组-添加--监听器-聚合报告,执行后生成的结果图如下:

聚合报告中大部分字段与Summary Report-致,不再重复介绍,其它说明如下:
Median:响应时间中间值,指50%请求的响应时间。
90%Line: 90%请求的响应时间
95%Line: 95%请求的响应时间
99%Line: 99%请求的响应时间

标准方差的理解:
1.数据分布离平均值越近,标准方差越小;数据分布离平均值越远,标准
方差越大。
2.标准方差为0,意味着数列中每-个数都相等。
3.序列中每一个数都加上一个常数,标准方差保持不变的
所以,在查看测试报告时,标准方差越小,表示系统越趋于稳定。

90%Line的理解:
表示90%请求的响应时间,服务器的响应都维持在某个值附近。‘Average"值对于平均事务响应时间变动趋势很大的情况统计就不准确了,比如有三个时间: 1秒、5秒、12秒,则平均时间为6秒,
而另外一种情况:5秒、6秒、7秒,平均时间也为6秒,显然第二种比第一种要稳定多 了。所以,如果整体趋势比较稳定,取90%Line与Average区别不大。

Jmeter监控服务器资源:
商业性能测试工具如LR都提供了对被测服务器进行性能监控的功能,在使用Jmeter执行性能测试时,为了尽量减少负载机的资源消耗,一般不建议使用服务器资源监控的功能。而可以使用第三方工具去监控收集服务器资源。
但一些普通的场景(负 载小)还是可以利用]meter来进行服务器资源监控的。在Jmeter中通过第三方开源组件来完成此功能。

Jmeter监控服务器资源配置如下:
1、进入https:/ /jmeter-plugins.org/ downloads/all/下载jmeter-plugins-manager-0.11.jar,放置到jmeter安装 目录/lib/ext,然后重启jmeter
2、重启后从菜单-选项--Plugins Manager,进入插件管理界面,下 载PerfMon插件,重启Jmeter
3、进入https://jmeter-plugins.org/wiki/PerfMonAgent/ 下载ServerAgent-2.2.1.zip,把该压缩包在被测服务器上解压,解压后在dos命令窗口运行startAgent.sh命令,默认使用4444端口
4、在Jmeter工具端输入telnet服务器ip 4444然后输入test ,查看被测服务器是否有收到相应信息,收到表示连接正常,如果连接异常检查防火墙等原因。
5、在Jmeter控制机添加一个PerfMon Metrics Collector监听器, 点击运行即可获取。

命令窗口模式下性能测试结果收集:

聚合报告:在用命令模式执行时保存了后缀为,jtl格式的结果文件。打开JMeter
GUI界面->测试计划->添加线程组->添加聚合报告->点击"所有数据写入-个文
件"下的"浏览.."按钮找到你刚生成的jtl文件就可以对执行结果进行直观分析。

服务器资源:在GUI中为服务器性能监控监听器配置好要输出到的结果文件即可,
就像为其他监听器所配置的那样。压力脚本运行结束之后,就可以把保存的文件
拖到GUI并查看图形数据了。

总结:

感谢每一个认真阅读我文章的人!!!

 我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

   Python自动化测试学习交流群:全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/10136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

链表是否有环、环长度、环起点

问题引入 如何检测一个链表是否有环,如果有,那么如何确定环的长度及起点。 引自博客:上述问题是一个经典问题,经常会在面试中被问到。我之前在杭州一家网络公司的电话面试中就很不巧的问到,当时是第一次遇到那个问题&…

RocketMQ集群4.9.2升级4.9.6版本

本文主要记录生产环境短暂停机升级RocketMQ版本的过程 一、整体思路 1.将生产环境MQ4.9.2集群同步到测试环境,并启动,确保正常运行。 2.参照4.9.2配置4.9.6集群 3.停掉4.9.2集群,启动4.9.6集群,测试确保正常运行。 4.停掉4.9.6集…

git使用教程

一 创建环境 参考 Git 安装配置 | 菜鸟教程 (runoob.com)https://www.runoob.com/git/git-install-setup.html 1.1 配置 $ git config --global user.name "runoob" $ git config --global user.email test@runoob.com 1.2 创建一个新文件夹 在新的文件夹执行(…

文件上传漏洞总结2

文件上传的大体都已经学习过了 这个假期在给他强化一下 什么是webshell webshell是web入侵的脚本攻击工具。webshell就是一个asp或php木马后门,黑客在入侵了一个网站后,常常在将这些asp或php木马后门文件放置在网站服务器的web目录中,与正常…

本地缓存LoadingCache

引入依赖 <!-- https://mvnrepository.com/artifact/com.google.guava/guava --> <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>32.1.1-jre</version> </dependency>主要代…

(三)InfluxDB入门(借助Web UI)

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 3 章 InfluxDB入门&#xff08;借助Web UI&#xff09; 借助Web UI&#xff0c;我们可以更好地理解InfluxD…

C语言入门篇(八)

前言   本篇分享的是部分操作符的概念与用法&#xff0c;从经典例题入手&#xff0c;带你快速了解和掌握。   收录专栏&#xff1a;浅谈C语言 操作符详解上 1. 操作符分类2. 算术操作符3. 移位操作符3.1 左移操作符3.2 右移操作符 4. 位操作符5. 赋值操作符6. 单目操作符6.…

Excel双向柱状图的绘制

Excel双向柱状图在绘制增减比较的时候经常用到&#xff0c;叫法繁多&#xff0c;双向柱状图、上下柱状图、增减柱状图都有。 这里主要介绍一下Excel的基础绘制方法和复杂一点的双向柱状图的绘制 基础双向柱状图的绘制 首先升降的数据如下&#xff1a; 月份上升下降20220359-…

如何创建高级 CSS 下拉菜单

效果展示 实现思路及部分代码 1、定义整体页面结构 从上述的效果展示图可以看出&#xff0c;页面的整体结构应该需要一个总菜单容器来装载父级菜单项&#xff0c;并且对应的父级菜单项应该有对应的菜单子项。子菜单是分类的话&#xff0c;我们还需要额外在扩展对应的容器来装…

代码随想录算法训练营day11 | 20. 有效的括号,1047. 删除字符串中的所有相邻重复项

目录 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值 20. 有效的括号 难度&#xff1a;easy 类型&#xff1a;栈与队列 思路&#xff1a; 利用栈来做括号匹配&#xff1b; 代码&#xff1a; class Solution {public boolean isValid(String…

Flutter 最佳实践和编码准则

Flutter 最佳实践和编码准则 视频 前言 最佳实践是一套既定的准则&#xff0c;可以提高代码质量、可读性和可靠性。它们确保遵循行业标准&#xff0c;鼓励一致性&#xff0c;并促进开发人员之间的合作。通过遵循最佳实践&#xff0c;代码变得更容易理解、修改和调试&#xff…

vue中Cascader 级联选择器实现-修改实现

vue 的cascader研究了好长时间&#xff0c;看了官网给的示例&#xff0c;上网查找了好多信息&#xff0c;才解决修改时回显的问题&#xff0c;现将方法总结如下&#xff1a; vue代码&#xff1a; <el-form-item label"芯片" prop"firmware"> <…

【C# 数据结构】Heap 堆

【C# 数据结构】Heap 堆 先看看C#中有那些常用的结构堆的介绍完全二叉树最大堆 Heap对类进行排序实现 IComparable<T> 接口 对CompareTo的一点解释 参考资料 先看看C#中有那些常用的结构 作为 数据结构系类文章 的开篇文章&#xff0c;我们先了解一下C# 有哪些常用的数据…

系统架构设计师 10:软件架构的演化和维护

一、软件架构演化 如果软件架构的定义是 SA{components, connectors, constraints}&#xff0c;也就是说&#xff0c;软件架构包括组件、连接件和约束三大要素&#xff0c;这类软件架构演化主要关注的就是组件、连接件和约束的添加、修改与删除等。 二、面向对象软件架构演化…

[oeasy]python0075_删除变量_del_delete_variable

删除变量 回忆上次内容 上次我们研究了字节序 字节序有两种 符号英文名称中文名称<little-endian小字节序>big-endian大字节序 字节序 用来 明确 整型数字存储的 顺序 如果 读写数字出了错 可以 考虑一下 是否 字节序出了问题 变量现在可以 声明初始化存储了 但是 …

Spring Boot中整合MyBatis(基于xml方式基于注解实现方式)

一、前提准备 在Spring Boot中整合MyBatis时&#xff0c;你需要导入JDBC&#xff08;不需要手动添加&#xff09;和Druid的相关依赖。 JDBC依赖&#xff1a;在Spring Boot中整合MyBatis时&#xff0c;并不需要显式地添加JDBC的包依赖。这是因为&#xff0c;当你添加mybatis-sp…

i.MX6ULL(二十) linux platform 设备驱动

Linux 系统要考虑到驱动的可重用性&#xff0c;因 此提出了驱动的分离与分层这样的软件思路&#xff0c;在这个思路下诞生了我们将来最常打交道的 platform 设备驱动&#xff0c;也叫做平台设备驱动。 1 Linux 驱动的分离与分层 1.1 驱动的分隔与分离 对于 Linux 这样一…

kubesphere安装中间件

kubesphere安装mysql 创建configMap [client] default-character-setutf8mb4[mysql] default-character-setutf8mb4[mysqld] init_connectSET collation_connection utf8mb4_unicode_ci init_connectSET NAMES utf8mb4 character-set-serverutf8mb4 collation-serverutf8mb4_…

macOS Monterey 12.6.8 (21G725) Boot ISO 原版可引导镜像

macOS Monterey 12.6.8 (21G725) Boot ISO 原版可引导镜像 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持在 Windows 和 Lin…

C# 翻转二叉树

226 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;…