JMeter 源码解读 [1] - 配置开发环境

准备环境

  1. 操作系统 MacOS Mojave
  2. JDK 1.8
  3. Git
  4. Apache Ant (Mac 的化可以用 brew install ant 的方式来安装), 版本用最新的就好了
  5. Intellij 个人认为最好的Java IDE, 下载一个最新的版本就好了

clone代码到本地目录下

> git clone git@github.com:apache/jmeter.git

###进入到jmeter目录,下载第三方依赖 Jar

> ant download_jars

download_jars任务完成后,确认一下lib目录下已经有了需要的依赖Jar 文件了

###用 Intellij 直接打开 JMeter

如果之前安装intellij 时已经把idea添加到了command line的可以,可以在Jmeter目录下直接通过命令行打开

> idea .

###配置 IDE

添加 Jar 到 classpath ,点击右上角的蓝色按钮,选择Project Settings -> Library,选择+ ,并选择Java, 然后选择lib后点击确认, 这样就把之前download_jars下载到lib中的所有jar添加到了classpath 中

设置classpath

配置环境变量

JmeterMain函数入口在org.apache.jmeter.NewDriver这个class,在完成 classpath 设置后就可以直接运行,但是会报很多Runtime的Exception,我们需要再做一些设置

  1. 设置 jmeter.properties. 如果是用ant打包的话会把相关的resource 都打到Jar包内,但是如果通过源码来运行的话,需要显示指定一下jmeter.properties 否则会报错,提示找不到配置文件。方法就是修改运行的配置,增加一个命令行参数,手动设置jmeter.propreties, 在这里我用的是绝对路径

    配置jmeter.properties

  1. 修改一下jmeter.properties, 把第37行注释打开就好,否则系统界面会是一堆乱码的界面,这里我选择的方式是改成英文就好了

    language=en
  1. 最后改动一下org.apache.jmeter.NewDriver中第83行代码,设置一下当前jmeter目录的绝对路径 (之前想用System Property来设置,好像没什么小姑哦,就直接改源代码好了)
if (tok.countTokens() == 1
|| (tok.countTokens() == 2 // Java on Mac OS can add a second entry to the initial classpath
&& OS_NAME_LC.startsWith("mac os x")// $NON-NLS-1$
)
) {
File jar = new File(tok.nextToken());
try {
tmpDir = jar.getCanonicalFile().getParentFile().getParent();
} catch (IOException e) {
tmpDir = null;
}
} else {// e.g. started from IDE with full classpath
tmpDir = System.getProperty("jmeter.home","/Users/ylshao/code/github/jmeter");// 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().getParent();
}
}

大功告成

好了,现在启动一下org.apache.jmeter.NewDriver 这个入口程序,就可以看到熟悉的Jmeter 界面了

设置classpath

问题解答

  1. 过程中如果遇到一些test目录提示编译失败的化,可以直接在Project Settings - Module中把他们删除掉就好了,反正源码分析暂时也用不到
Author: 妞爸爸
Link: http://markshao.github.io/2019/03/03/jmeter-source-code-initenviroment/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.