本文编译这部分内容基本来源于网上。debug相关内容为本人根据实际情况整理。
JMeter5.2开始,使用gradle代替了原来ant,所以基于源码的本地环境搭建略有不同。JMeter 5.4.1使用的gradle文件不是build.gradle文件,而是build.gradle.kts。
下面是在IDEA打开JMeter工程的步骤说明。
启动idea,点击File -> open,选中jmeter源码目录下build.gradle.kts
选择“Open as Project”
确保“Create separate module per source set” 和 “Use default gradle wrapper”选中,然后点击ok。(这两项不一定会有,可能和IDEA版本有关)
随后idea会自动开始下载JMeter所需依赖,等待执行完成。
注意 这里不要对Gradle设置阿里云镜像,否则会出现依赖加载不成功,在checksum时,会有部分依赖报错,开始前建议暂时取消Gradle的镜像。
为了不使用ali的gradle仓库,我把~/.gradle下的init.gradle(使用了ali的gradle库)重命名为init.gradle.bak了,这样gradle在运行的时候不再使用ali的库。
依赖下载完成后,所需的依赖是在gradle的cache目录下,我们需要执行命令打包构建,将所需的依赖复制一份到jmeter源码目录的lib目录下。在Terminal中执行(gradle需要先配置环境变量)gradlew runGui
。或在gradle任务下的developement下执行runGUI,以便在工程根目录下的lib下生成相关jar。
执行完成后,会打开构建好的jmeter GUI界面。查看lib目录,jar包也已复制完成。在调试之前,先关闭打开的JMeter界面。
下面是debug设置的操作说明:
在IDEA中,快捷键cmd+shift+f或double shift(mac电脑),搜索找到NewDriver类。
点击小锤子旁边的 Add Configuration…
增加Application设置,在VM options中加入 -Djmeter.home=xxx(JMeter源码目录),点击ok。
对于jmeter 5.4.1 ,为了debug jmeter,我是这样设置的:
vm option:
-Djmeter.home=/Users/lizhiqiang/Test/src/jmeter -cp .;/Users/lizhiqiang/Test/src/jmeter
classname:
org.apache.jmeter.NewDriver
environment variables:
JMETER_HOME=/Users/lizhiqiang/Test/src/jmeter
生成lib下相关jar(如果之前已经执行过runGUI,不需要再执行)
修改代码
因为代码逻辑设定,所以为了启动debug,需要修改少量代码。如果不修改代码,debug的时候会报错。因此在line 87行添加一行:tmpDir = null; //lizhiqiang debug
。(可能是我的野路子)。记得这行代码在正式发布的时候去除或注释掉!
修改后这段代码是这样的:
tmpDir = null; //lizhiqiang debug
if (tmpDir == null) {
tmpDir = System.getenv("JMETER_HOME");
}
这样,程序将使用环境变量JMETER_HOME定义的目录.
尝试使用过下面的命令,但可能都不是正确的方式,因为后面尝试了都不能将jmeter启动起来,最终还是按照之前提过的方法,不实用ali的仓库进行构建。
#检查校验和:构建完成后才检查校验和
./gradlew clean build -Djava.awt.headless=true -PchecksumFailOn=build_finish
-PchecksumFailOn=build_finish
#不检查校验和,也不测试
./gradlew clean build -Djava.awt.headless=true -PchecksumIgnore -x test
下面是默认执行gradle build
时出现的错误。这些校验和相关的错误要解决,否则可能后面还是不能运行成功。解决的方法在前面提过,就是不要使用ali的仓库(至少在我的实践看来是这样的。原因可能还是因为某些依赖的包不再ali的仓库里):
错误信息:
Checksum/PGP violations detected on resolving configuration :src:testkit-wiremock:compileClasspath
No PGP signature (.asc file) found for artifact:
下面的错误不记得是如何消除的了,但比较确定的一点是,没有checksum相关的错误后,下面的错误也没了:
Create separate module per source set
Task :src:components:autostyleJavaCheck FAILED
src:bshclient:autostyleJavaCheck FAILED
Task :src:testkit-wiremock:compileJava FAILED
java/org/apache/jorphan/gui/DynamicStyle.java使用了未经检查或不安全的操作
构建文档: