前言
最近在做性能测试,性能测试方案中要求使用Linux服务器做压力机,压力发起工具使用JMeter,所以需要在Linux中安装JMeter。
准备
Jmeter是Java开发的,需要依赖JDK环境,因此我们需提前安装好JDK。
CentOS 7.3 64位
JDK 1.8(可参考文章:Linux下安装JDK 1.8)
下载JMeter安装包
Jmeter是Java开发的,需要依赖JDK环境,因此我们需提前安装好JDK。
Jmeter是开源的工具,我们直接到官网下载即可,本次安装的版本是 5.1.1
。
最新版本下载地址:https://jmeter.apache.org/download_jmeter.cgi
历史版本下载地址:https://archive.apache.org/dist/jmeter/binaries/
下载后缀为 .tgz
或 .zip
都是可以的,我们可以在Linux通过 wget
命令下载Jmeter安装包,或者下载后再传到Linux。
我这里下载的安装包版本是 apache-jmeter-5.2.1.tgz
。
安装JMeter
#新建jmeter文件夹 mkdir jmeter #下载安装文件 或 上传已下载好的文件到jmeter目录下 wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.2.1.tgz #解压文件 tar -xzvf apache-jmeter-5.2.1.tgz
本次解压的目录为:usr/local/jmeter/apache-jmeter-5.2.1
配置环境
#配置启动参数 #打开配置文件 vim /etc/profile #将下列代码复制到文件的最后 export JMETER_HOME=/usr/local/jmeter/apache-jmeter-5.2.1 export PATH=${JMETER_HOME}/bin:$PATH
添加好后保存,执行source /etc/profile,重新加载配置文件。最后,通过jmeter --version查看安装的Jmeter版本,验证安装成功。
OK,到这里,Jmeter已经安装完成,可以开始使用了!
Linux中使用JMeter进行压测
1.在windows系统中设置好压测场景和数据,保存到jmx文件中
2.将jmx文件上传到服务器jmeter的bin目录下
3.执行压测命令
./jmeter.sh -n -t test.jmx -l result02.jtl
遇到的问题问题:
1.在进行压力测试时,为了降低网络带宽对响应时间的影响,通常高并发时会采用在Windows上使用JMeter编写好测试脚本-xxx.jmx;将脚本上传到相同局域网的Linux服务器,使用JMeter对应命令进行压力测试的方法。测试有时会遇到如下报错:Error in NonGUIDriver java.lang.IllegalStateException: Could not find the TestPlan class!
问题原因:
保存测试脚本时只保存了Testplan下的部分节点,导致生成的测试脚本只是“testplan”下面的某些元素,,不包括需要运行测试所需的“TestPlan”元素。
解决方案:
在保存测试脚本时,保存整个测试计划,以下两种方式保存测试脚本,可以避免上述报错产生。
1.在文件菜单中单击“保存测试计划”或“保存测试计划为”选项;
2.鼠标选中测试计划节点,直接点击工具栏上的“保存测试计划”按钮
问题2:执行jmeter -n -t xxx.jmx -l result.jtl时,提示如下错误
Error in NonGUIDriver java.lang.IllegalArgumentException: Problem loading XML from:'/usr/local/jmeter/apache-jmeter-5.2.1/bin/客户权益账单查询.jmx'.
Cause:
CannotResolveClassException: kg.apc.jmeter.threads.SteppingThreadGroup
Detail:com.thoughtworks.xstream.converters.ConversionException:
---- Debugging information ----
cause-exception : com.thoughtworks.xstream.converters.ConversionException
cause-message :
first-jmeter-class : org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:67)
class : org.apache.jmeter.save.ScriptWrapper
required-type : org.apache.jmeter.save.ScriptWrapper
converter-type : org.apache.jmeter.save.ScriptWrapperConverter
path : /jmeterTestPlan/hashTree/hashTree/kg.apc.jmeter.threads.SteppingThreadGroup
line number : 881
version : 5.2.1
-------------------------------
An error occurred: Error in NonGUIDriver Problem loading XML from:'/usr/local/jmeter/apache-jmeter-5.2.1/bin/客户权益账单查询.jmx'.
Cause:
CannotResolveClassException: kg.apc.jmeter.threads.SteppingThreadGroup
Detail:com.thoughtworks.xstream.converters.ConversionException:
---- Debugging information ----
cause-exception : com.thoughtworks.xstream.converters.ConversionException
cause-message :
first-jmeter-class : org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:67)
class : org.apache.jmeter.save.ScriptWrapper
required-type : org.apache.jmeter.save.ScriptWrapper
converter-type : org.apache.jmeter.save.ScriptWrapperConverter
path : /jmeterTestPlan/hashTree/hashTree/kg.apc.jmeter.threads.SteppingThreadGroup
line number : 881
version : 5.2.1
-------------------------------
原因分析:
脚本中使用了jp@gc - Stepping Thread Group,jmeter的文件中没有使用包含对应的插件包
解决办法:
上传插件包到lib/ext目录下,上传好后再执行jmeter -n -t xxx.jmx result.jtl,便能成功执行
问题3:执行jmeter -n -t xxx.jmx -l result.jtl时,报java.lang.IllegalArgumentException: File Realtimequeryofrights.txt must exist and be readable
原因分析:在windows中使用jmeter时,参数脚本路径是绝对路径,比如D:apache-jmeter-5.2.1in,但是在Linux中这个路径是找不到的
解决办法:
用windows打开jmeter的脚本,自定义2个变量,分别为path_win和path_linux,然后将路径填充进去,当使用windows来跑脚本时,需要在CSV数据文件设置参数路径为${path_win},但要去Linux跑脚本时,需要改成${path_linux}