实战一中记录了一些常用的控件,及脚本使用中遇到的问题,接下来我再记录下其他问题以供查阅。
1.分布式
因为jmeter运行是要占用压力机资源,如果单独一个压力机,无法完成更大的压力,所以有了分布式
分布式简单来讲就是一个master服务和若干个slave服务,master主机通过与slave服务进行通信,向slave服务发送指令运行请求命令,并将结果返回到master
在master机器上将bin目录下的jmeter.properties打开,修改remote__hosts中添加slave的ip地址,当多个slave时,以,隔开
修改slave文件中的jmeter_server文件RMI_HOST_DEF=-Djava.rmi.server.hostname=本机ip。按理说这样就ok了,但是往往运行slave的jmeter-server后在maste上启动远程主机会出现这样那样的错,先排查下防火墙,这里需要关闭防火墙,在然后需要看一下slave的网卡有几块,以window为例,ipconfig,往往能看到好几块网卡,对应的ip也有几个,所以最简单粗暴的方法--在控制面板把其他网卡暂时禁用。
分布式的另一个问题是参数化,前文介绍过参数化的时候参数化文档对应的路径,win和linux,macos,不太一样,这里也是简单粗暴的方法--将参数化文件放到jmeter的bin目录下。
2.无界面
如果启动jmeter,稍微注意,就能看到一段话,意思大概是,gui界面不适用于做压力测试,所以需要用一个no-gui模式
那么jmeter怎么通过no-gui模式运行呢?
通过运行jmeter -?查看jmeter的参数都有什么。
如一下命令:
jmeter -n -t xx.jmx -l xx.jtl -j xx.log
-n no-gui模式
-t 要运行的jmx文件
-l 生成jtl报告
-l 成成日志文件
在命令行中运行以上命令即可。
这种方式运行基本满足了无界面的运行方式,但是我想更好的让jmeter为我所用
写一个bat文件如何?
@echo off
rem 生成当前日期
set date=%date:~0,4%%date:~5,2%%date:~8,2%
if "%time:~0,2%" lss "10" (set hour=0%time:~1,1%) else (set hour=%time:~0,2%)
set time=%hour%%time:~3,2%%time:~6,2%
set d=%date%%time%
echo 当前时间: %d%
set ReportPath=E:\压力测试\debug\%d%\
set jmeterPath=C:\jmeter\apache-jmeter-3.1
mkdir %ReportPath%
echo %ReportPath%
rem 执行Jmeter
call C:\jmeter\apache-jmeter-3.1\bin\jmeter.bat -Jworkspace=%ReportPath% -n -t F:\xx.jmx -l %ReportPath%\result.jtl -e -o %ReportPath%\Report
rem 生成监听器截图rem call java -jar %jmeterPath%\lib\ext\CMDRunner.jar --tool Reporter --generate-png %ReportPath%\CPUMemory.png --input-jtl %ReportPath%\CPUMemory.jtl --plugin-type PerfMon
pause
这个bat文件是不是就稍微好点儿了。