JMeter 命令行(非GUI)模式及分布式执行详解

Stella981
• 阅读 397

转载自:https://www.cnblogs.com/fengpingfan/p/5586711.html
一、应用场景

1、无需交互界面或受环境限制(linux text model)

2、远程或分布式执行

3、持续集成,通过shell脚本或批处理命令均可执行,生成的测试结果可被报表生成模块直接使用,便于生成报告

二、命令行模式优点

1、节约系统资源:无需启动界面,节约系统资源

2、便捷快速:仅需启动命令行,输入命令便可执行,是为命令达人最爱

3、易于持续集成:可通过shell脚本命令执行

三、参数详解

JMeter 命令行(非GUI)模式及分布式执行详解
四、实例演示

1、执行测试脚本

jmeter -n -t JMeter分布式测试示例.jmx
命令行窗口输出如下所示:
JMeter 命令行(非GUI)模式及分布式执行详解
日志默认输出路径同 jmx 脚本路径。

2、指定结果文件及日志路径

jmeter -n -t JMeter分布式测试示例.jmx -l report\01-result.csv -j report\01-log.log
命令行窗口输出如下所示:
JMeter 命令行(非GUI)模式及分布式执行详解
若日志路径不存在,则JMeter不会自动创建,同时将日志输出至命令行窗口。

结果文件类型为 jtl 或 csv,可通过JMeter的聚合报告浏览结果文件,查看最终的结果,如下所示:
JMeter 命令行(非GUI)模式及分布式执行详解
3、分布式(远程)执行默认服务器列表

jmeter -n -t JMeter分布式测试示例.jmx -r -l report\01-result.csv -j report\01-log.log
命令行窗口输出如下所示:
JMeter 命令行(非GUI)模式及分布式执行详解
执行机命令行输出如下所示:
JMeter 命令行(非GUI)模式及分布式执行详解
执行机(Slave)端的日志文件默认生成在用户目录下。

若出现如下图所示情况,请检查:网络是否畅通、服务器域名(IP)及端口是否正确、执行机是否启动 jmeter-server.bat 或 jmeter-server
JMeter 命令行(非GUI)模式及分布式执行详解
4、分布式(远程)执行执行服务器列表

jmeter -n -t JMeter分布式测试示例.jmx -R 10.9.215.47:1029 -l report\01-result.csv -j report\01-log.log
命令行窗口输出如下所示:
JMeter 命令行(非GUI)模式及分布式执行详解
5、设置代理

jmeter -n -t JMeter分布式测试示例.jmx -H 20.9.215.90 -P 9999 -l report\01-result.csv -j report\01-log.log

注意:-H 20.9.215.90 -P 9999:此 IP 及端口号为代理机器的 IP 和 port,当前为我机器的地址及 fiddler 的代理端口
命令行输入如下所示:
JMeter 命令行(非GUI)模式及分布式执行详解
通过日志信息可知,代理正确。部分日志信息如下所示:

2016/06/15 14:04:02 INFO - jmeter.JMeter: Set http[s].proxyHost: 10.9.215.90 Port: 9999
2016/06/15 14:04:02 INFO - jmeter.services.FileServer: Default base=‘I:\CNblogs\JMeter\023’
2016/06/15 14:04:02 INFO - jmeter.services.FileServer: Set new base=‘I:\CNblogs\JMeter\023’
通过抓包工具 fiddler 抓取的包如下所示:
JMeter 命令行(非GUI)模式及分布式执行详解
在使用 JMeter 进行性能测试时,难免遇到要求并发请求数比较的场景,此时单台测试机的配置(CPU、内存、带宽等)可能无法支持此性能测试场景。因而,此时 JMeter 提供的分布式测试功能就有了用武之地。
一、JMeter分布式执行原理

JMeter分布式执行原理如下图所示:
JMeter 命令行(非GUI)模式及分布式执行详解
调度机(Controller):主要负责性能测试脚本的分发,及各个执行机(Slave)的测试结果收集汇总,报告产出。

执行机(Slave):主要负责执行性能测试脚本及断言等(命令行模式执行,无界面),并将执行结果反馈给调度机(Controller),若断言执行成功则不返回请求响应数据及详细断言信息。

二、执行机配置(Slave)

1、JDK版本为 1.8.0,配置相应的环境变量,可参阅 JDK环境配置

2、JMeter版本为 3.0,配置相应的环境变量,可参阅 JMeter环境配置

3、配置执行机服务器远程启动端口

修改配置文件:JMETER_HOME/bin/jmeter.properties 中如下信息即可完成配置执行机远程启动端口(默认为 1099)

server_port=1029

server.rmi.localport=1029

4、启动执行机服务器

管理员执行脚本:JMETER_HOME/bin/jmeter-server.bat 或 JMETER_HOME/bin/jmeter-server,启动后命令行页面如下图所示:
JMeter 命令行(非GUI)模式及分布式执行详解
从启动命令行窗口可见,配置的远程启动端口已经生效。

三、调度机(Controller)配置

1、添加执行机(Slave)

路径:JMETER_HOME/bin/jmeter.properties,添加如下所示的执行机信息(IP为示例,请配置正确的执行机IP和端口):

remote_hosts=192.168.1.50:1029,192.168.1.51:1029

2、启动调度机

启动后,依次点击【运行/远程启动】,即可查看配置的远程执行机信息,如下图所示:
JMeter 命令行(非GUI)模式及分布式执行详解
四、启动单执行机(初步调试)

接第三步,任意启动一个执行机(Slave)查看执行结果,如下图所示:
JMeter 命令行(非GUI)模式及分布式执行详解
JMeter 命令行(非GUI)模式及分布式执行详解
在执行机服务命令行窗口可见如下输出信息:
JMeter 命令行(非GUI)模式及分布式执行详解
若断言执行失败,则在查看结果数中,可看到详细的请求响应数据及断言结果,如下所示:
JMeter 命令行(非GUI)模式及分布式执行详解
JMeter 命令行(非GUI)模式及分布式执行详解
五、启动全部执行机(性能测试)

1、执行机(Slave)初步调试:

接第三步,点击【运行/远程全部启动】,可通过此步进行初步调试,执行结果如下所示:
JMeter 命令行(非GUI)模式及分布式执行详解
JMeter 命令行(非GUI)模式及分布式执行详解
2、性能测试参数设置

初步调试通过后,依据测试场景所需进行性能测试设置,如下所示:
JMeter 命令行(非GUI)模式及分布式执行详解
3、执行性能测试

远程全部启动后,待测试执行完成,可查看性能测试聚合报告,如下图所示:
  JMeter 命令行(非GUI)模式及分布式执行详解
  总样本数 = 线程数 * 循环次数 * 执行机总数

样本计数逻辑:由 JMeter分布式执行原理可知,执行机(Slave)执行的测试脚本是由调度机(Controller)分发的,故每台执行机执行的测试脚本都是相同的,故而性能测试总样本数 = 测试脚本样本数 * 执行机总数。

为更好的模拟性能并发场景,还需要设置集合点,具体设置方法请参阅 JMeter设置集合点

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
暗箭伤人 暗箭伤人
7个月前
【www.ithunter.club】 20230922下午
不容易的2023年,我们一起努力【www.ithunter.club】(2023092208:00:00.8872062023092216:00:00.887206)1.人事招聘专员数名(可选远程或入职)2.招聘向坐标东京Yahoo、Shift、L
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这