如何实现Maven构建的JMeter项目跨主机免重建运行?
实现JMeter Maven项目的可移植运行方案
1. 调整Maven配置,打包完整运行包
修改项目的pom.xml,添加maven-assembly-plugin插件,让构建产物包含所有JMeter依赖、测试脚本、配置文件及必要的目录结构:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>org.apache.jmeter.NewDriver</mainClass> <!-- JMeter主类 --> </manifest> </archive> <includeBaseDirectory>true</includeBaseDirectory> <files> <!-- 包含JMeter测试脚本 --> <file> <source>${Project.jmx}</source> <outputDirectory>/testFiles</outputDirectory> </file> <!-- 包含自定义启动脚本 --> <file> <source>run-jmeter.sh</source> <outputDirectory>/</outputDirectory> <fileMode>0755</fileMode> </file> <file> <source>run-jmeter.bat</source> <outputDirectory>/</outputDirectory> </file> </files> <descriptors> <!-- 自定义目录结构,创建logs、results空目录 --> <descriptor>assembly.xml</descriptor> </descriptors> </configuration> </execution> </executions> </plugin> </plugins> </build>
同时在项目根目录创建assembly.xml,定义目录结构:
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd"> <id>dist</id> <formats> <format>zip</format> <format>tar.gz</format> </formats> <fileSets> <fileSet> <directory>${project.build.directory}/logs</directory> <outputDirectory>/logs</outputDirectory> </fileSet> <fileSet> <directory>${project.build.directory}/results</directory> <outputDirectory>/results</outputDirectory> </fileSet> <fileSet> <directory>${project.build.directory}/testFiles</directory> <outputDirectory>/testFiles</outputDirectory> </fileSet> </fileSets> </assembly>
2. 编写跨平台启动脚本
- Linux/Mac脚本(run-jmeter.sh):
#!/bin/bash java -jar ${PWD}/jmeter-project-1.0-SNAPSHOT-jar-with-dependencies.jar \ -JNrOperators=$1 \ -JProject.jmx=testFiles/$2 \ -Jtarget=$3 \ -l results/result.jtl \ -j logs/jmeter.log
- Windows脚本(run-jmeter.bat):
@echo off java -jar %cd%\jmeter-project-1.0-SNAPSHOT-jar-with-dependencies.jar ^ -JNrOperators=%1 ^ -JProject.jmx=testFiles/%2 ^ -Jtarget=%3 ^ -l results/result.jtl ^ -j logs/jmeter.log
3. 在主机A构建并打包
执行构建命令,生成包含所有依赖的归档包:
mvn clean verify "-DNrOperators=3" -DProject.jmx=Myproject.jmx -Dtarget=Test
构建完成后,target目录下会生成类似jmeter-project-1.0-SNAPSHOT-dist.zip或jmeter-project-1.0-SNAPSHOT-dist.tar.gz的归档包,这就是完整的可移植运行包。
4. 主机B上直接运行
- 将归档包复制到主机B的任意目录,解压:
# Linux/Mac tar -zxvf jmeter-project-1.0-SNAPSHOT-dist.tar.gz # Windows 直接解压zip文件 - 进入解压后的目录,执行启动脚本(确保主机B已安装兼容版本的JDK):
# Linux/Mac ./run-jmeter.sh 3 Myproject.jmx Test # Windows run-jmeter.bat 3 Myproject.jmx Test
关键注意事项
- 主机B不需要安装Maven,仅需安装与主机A版本兼容的JDK(JMeter对JDK版本有要求,需提前确认)
- 所有动态参数(如
NrOperators、Project.jmx)都通过启动脚本传入,避免硬编码到构建产物中 - 若测试脚本依赖外部资源,需确保这些资源也被包含在归档包内
内容的提问来源于stack exchange,提问作者Tocotti
相关产品推荐
相关产品推荐

