1. 下载Jmeter源码
可以从Apache官网下载zip包后解压得到源码。源码的结构如图所示:
2.修改如下文件名称
打开命令行,切换到放置源码的地方,将下图中的两个文件名称修改一下,使其可以当做Eclipse工程导入IDEA。
3. 导入项目
导入之后,可以看到如下的目录结构:
4. 安装依赖
由于jmeter使用的是Ant来管理依赖的,我们需要安装Ant插件来安装依赖包。如下图所示:
在Ant Build中导入build.xml文件。
然后,执行Ant的download_jars命令下载jar包,时间可能较长,耐心等待一下:)
5. 执行install,并加入依赖
6. 尝试运行
Jmeter的启动入口是\src\core\org\apache\jmeter\NewDriver.java文件:
运行时候有很大概率会遇到如下错误:
java.lang.Throwable: Could not access D:\Workspace\IdeaWorkspace\lib
at org.apache.jmeter.NewDriver.<clinit>(NewDriver.java:106)
java.lang.Throwable: Could not access D:\Workspace\IdeaWorkspace\lib\ext
at org.apache.jmeter.NewDriver.<clinit>(NewDriver.java:106)
java.lang.Throwable: Could not access D:\Workspace\IdeaWorkspace\lib\junit
at org.apache.jmeter.NewDriver.<clinit>(NewDriver.java:106)
很显然是没有找到依赖包,点击跳转到106行去可以看到:
File[] libDirs = new File[] { new File(JMETER_INSTALLATION_DIRECTORY + File.separator + "lib"),// $NON-NLS-1$ $NON-NLS-2$
new File(JMETER_INSTALLATION_DIRECTORY + File.separator + "lib" + File.separator + "ext"),// $NON-NLS-1$ $NON-NLS-2$
new File(JMETER_INSTALLATION_DIRECTORY + File.separator + "lib" + File.separator + "junit")};// $NON-NLS-1$ $NON-NLS-2$
for (File libDir : libDirs) {
File[] libJars = libDir.listFiles((dir, name) -> name.endsWith(".jar"));
if (libJars == null) {
new Throwable("Could not access " + libDir).printStackTrace(); // NOSONAR No logging here
continue;
}
//......
可以看到是这里JMETER_INSTALLATION_DIRECTORY为空,再往上查找看到此变量的初始化位置,是从tmpDir变量获取而来:
tmpDir = System.getProperty("jmeter.home","");// Allow override $NON-NLS-1$ $NON-NLS-2$
if (tmpDir.length() == 0) {
File userDir = new File(System.getProperty("user.dir"));// $NON-NLS-1$
//可将此行代码改为 //tmpDir = userDir.getAbsoluteFile().getAbsolutePath();
tmpDir = userDir.getAbsoluteFile().getParent();
}
注意此处我使用的是Windows系统的电脑,不同系统会略有差异。
7. 界面语言设置
将jmeter.properties中的语言,设置为英文,改变下面这个位置的编码:
就可以看到熟悉的界面了:
8. 验证代码生效
这里找到Help-About Apache Jmeter菜单对应的方法,添加一行代码来验证一下。
在界面操作可以查看log,已经正常起作用了:
......
INFO | keytool found at 'keytool'
INFO | HTTP(S) Test Script Recorder SSL Proxy will use keys that support embedded 3rd party resources in file D:\Workspace\IdeaWorkspace\apache-jmeter-5.1.1\bin\proxyserver.jks
INFO | Default base='D:\Workspace\IdeaWorkspace\apache-jmeter-5.1.1'
INFO | Note: Sample TimeStamps are START times
INFO | sampleresult.default.encoding is set to ISO-8859-1
INFO | sampleresult.useNanoTime=true
INFO | sampleresult.nanoThreadSleep=5000
你点击了帮助-关于。。。
到此,IDEA中编译和运行Jmeter源码到此为止,开始愉快地学习源码吧…
遗留问题:不管在jmeter.properties中改变字符编码为中文,还是在界面上设置成中文,总有一大部分乱码。然而下载已经打包好的则可以在界面上正常修改。猜测可能还有地方需要修改字符集,暂时还没有找到根源。:|