本文版权归xmeter.net所有,欢迎转载,转载请注明出处。
简介
在对JMeter做扩展的时候,需要参考JMeter的源代码实现,如何在集成开发环境里比较方便地查看代码就非常重要了。本文以Eclipse为例,介绍如何搭建JMeter 3.2的开发环境。
准备工作
1)JDK 8,JMeter 3.2是由Java写的,需要JDK 8以上的版本,因此操作系统先安装好JDK 8。安装完成后,在命令行中敲"java -version",查看输出的内容,如果大于1.8版本就可以了;否则请设置正确的JAVA_HOME和系统PATH(加入$JAVA_HOME/bin)。
2)Eclipse,作者使用的是Eclispe 4.5版本,不要太旧的版本应该都可以
3)Apache Ant,作者使用的版本是1.9.7,读者可以到http://ant.apache.org/bindownload.cgi上下载最新的版本,解压开之后,将$ANT_HOME/bin/加到系统PATH变量,打开命令行,运行"ant -version",如果安装正确应该能看到类似于这样的输出“Apache Ant(TM) version 1.9.7 compiled on April 9 2016”。
4)Git,JMeter 3.2的源代码在github上,读者可以checkout任意版本的源代码,通过Git管理的本地代码可以清晰地告诉你哪些地方有更改,进行版本的恢复等,避免出现误改导致的本地开发环境无法运行。如果读者觉得这些都不是问题,可以不用准备Git,直接下载源代码的压缩文件包。如果安装Git,请读者自行参考网上相应的文章进行安装,本文不再赘述。
Eclipse工作空间的配置
首先下载源代码,打开网站https://github.com/apache/jmeter,JMeter缺省的代码分支为trunk,最新的代码都在此分支上,我们需要3.2版本可以从tag列表中看到,单击“Branch: trunk”按钮,在下拉列表框中选择Tags > v3_2,就能够看到v3_2版本。如下图所示,
然后选择“Clone or download”,如果想使用Git,则单击下拉对话框中显示的“复制”按钮;如果想直接下载源代码,就点击“Download ZIP”按钮。如下图所示,
使用Git,请在命令行中输入,
git clone git@github.com:apache/jmeter.git
命令行输出如下所示。
进入下载的JMeter的工作区目录,使用下面的命令切换到v3_2代码tag,执行结果如下图所示。
cd $workspace/jmeter
git checkout tags/v3_2
运行git log,检查代码历史,确信是在3.2标签上。如下图所示,当前代码的最后历史为2017年4月13日,为3.2发布的时间点。
git log
运行下列Ant命令,设置Eclipse工作空间。
ant setup-eclipse-project
运行该命令的时候,会提示要不要下载依赖的JAR包,敲入y继续。当出现下列提示的时候,设置Eclipse工作空间的步骤完成。
打开Eclipse,创建一个新的工作空间,然后点击“File → Import → Existing projects into Workspace”,如下图所示。
如果之前的步骤都正确的话,导入的项目不会有任何错误,如下图所示。
编译、打包JMeter,如下图所示,右击“Build.xml > Run As > Ant Build”,该步骤是为了编译生成JMeter的库。
在Eclipse中右击NewDriver.java > Run As > Java Application, 会报以下错误。
java.lang.Throwable: Could not access /Users/rockyjin/Documents/workspace/demo_jmeter/ws/lib
at org.apache.jmeter.NewDriver.(NewDriver.java:101)
java.lang.Throwable: Could not access /Users/rockyjin/Documents/workspace/demo_jmeter/ws/lib/ext
at org.apache.jmeter.NewDriver.(NewDriver.java:101)
java.lang.Throwable: Could not access /Users/rockyjin/Documents/workspace/demo_jmeter/ws/lib/junit
at org.apache.jmeter.NewDriver.(NewDriver.java:101)
ERROR StatusLogger Unable to access file:/Users/rockyjin/Documents/workspace/demo_jmeter/ws/bin/log4j2.xml
java.io.FileNotFoundException: /Users/rockyjin/Documents/workspace/demo_jmeter/ws/bin/log4j2.xml (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.(FileInputStream.java:138)
at java.io.FileInputStream.(FileInputStream.java:93)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
at java.net.URL.openStream(URL.java:1045)
at org.apache.logging.log4j.core.config.ConfigurationFactory.getInputFromUri(ConfigurationFactory.java:307)
at org.apache.logging.log4j.core.config.ConfigurationFactory$Factory.getConfiguration(ConfigurationFactory.java:476)
at org.apache.logging.log4j.core.config.ConfigurationFactory$Factory.getConfiguration(ConfigurationFactory.java:420)
at org.apache.logging.log4j.core.config.ConfigurationFactory.getConfiguration(ConfigurationFactory.java:265)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:613)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:122)
at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
at org.apache.jmeter.JMeter.(JMeter.java:109)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at java.lang.Class.newInstance(Class.java:442)
at org.apache.jmeter.NewDriver.main(NewDriver.java:246)
ERROR StatusLogger Reconfiguration failed: No configuration found for '659e0bfd' at 'null' in 'null'
15:17:06.067 [main] ERROR org.apache.jmeter.JMeter - An error occurred:
java.lang.RuntimeException: Could not read JMeter properties file:/Users/rockyjin/Documents/workspace/demo_jmeter/ws/bin/jmeter.properties
at org.apache.jmeter.util.JMeterUtils.loadJMeterProperties(JMeterUtils.java:203) ~[core/:?]
at org.apache.jmeter.JMeter.initializeProperties(JMeter.java:709) ~[core/:?]
at org.apache.jmeter.JMeter.start(JMeter.java:436) [core/:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_73]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_73]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_73]
at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_73]
at org.apache.jmeter.NewDriver.main(NewDriver.java:248) [core/:?]
An error occurred: Could not read JMeter properties file:/Users/rockyjin/Documents/workspace/demo_jmeter/ws/bin/jmeter.properties
打开NewDriver的Run Configuration,调整配置“Working directory”配置为“${workspace_loc:jmeter}/bin”,如下图所示。
修改完成后,点击“Run”按钮,JMeter 3.2就可以成功运行了。如果想调试,在想要调试的代码行打好断点,以调试方式启动应用,就可以对JMeter代码进行调试。