我正在Maven项目中使用JMeter Java代码运行.jmx文件。我已经使用blazemeter录制了一个.jmx文件。请参考下面我尝试过的代码。
package com.solitera.automation.controller;
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.collections.HashTree;
import java.io.File;
import java.io.FileInputStream;
public class JMeterFromExistingJMX {
public static void main(String[] argv) throws Exception {
// JMeter Engine
StandardJMeterEngine jmeter = new StandardJMeterEngine();
// Initialize Properties, logging, locale, etc.
JMeterUtils.loadJMeterProperties("D:/apache-jmeter-5.1.1/bin/jmeter.properties");
JMeterUtils.setJMeterHome("D:/apache-jmeter-5.1.1");
JMeterUtils.initLogging();// you can comment this line out to see extra log messages of i.e. DEBUG level
JMeterUtils.initLocale();
// Initialize JMeter SaveService
SaveService.loadProperties();
// Load existing .jmx Test Plan
/* FileInputStream in = new FileInputStream("D:/Ecllipse_project_workspace2/slt_automation/src/test/jmeter/slt_autoMa_Test.jmx");
HashTree testPlanTree = SaveService.loadTree(in);
in.close();*/
HashTree testPlanTree = SaveService.loadTree(new File("D:/apache-jmeter-5.1.1/extras/slt_autoMa_Test.jmx"));
// Run JMeter Test
jmeter.configure(testPlanTree);
jmeter.run();
}
}
在Eclipse中作为Java应用程序运行后->输出为:
SLF4J:类路径包含多个SLF4J绑定。 SLF4J:找到 绑定 [jar:file:/ C:/Users/rajan/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/ org / slf4j / impl / StaticLoggerBinder 。类] SLF4J:找到绑定 [jar:file:/ C:/Users/rajan/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.12.1/log4j-slf4j-impl-2.12.1.jar!/ org /slf4j/impl/StaticLoggerBinder.class] SLF4J:请参见http://www.slf4j.org/codes.html#multiple_bindings 说明。 SLF4J:实际绑定类型 [ch.qos.logback.classic.util.ContextSelectorStaticBinder] 18:56:16.586 [main] WARN org.apache.jmeter.util.JMeterUtils-异常'null' 在获取布尔属性:'server.exitaftertest'时发生, 默认为:false 18:56:16.594 [main]警告 org.apache.jmeter.util.JMeterUtils-发生“空”异常 正在获取布尔属性:'jmeterengine.remote.system.exit', 默认为:false 18:56:16.594 [main]警告 org.apache.jmeter.util.JMeterUtils-发生“空”异常 正在获取布尔属性:'jmeterengine.stopfail.system.exit', 默认值为:true 18:56:16.594 [main]警告 org.apache.jmeter.util.JMeterUtils-发生“空”异常 获取布尔属性:'jmeterengine.force.system.exit',默认 到:假18:56:16.610 [main]信息org.apache.jmeter.util.JMeterUtils -将语言环境设置为en_IN 18:56:17.109 [main] INFO org.apache.jmeter.save.SaveService-测试计划(JMX)版本:2.2。 Testlog(JTL)版本:2.2 18:56:17.148 [main]信息 org.apache.jmeter.save.SaveService-使用SaveService属性文件 编码UTF-8 18:56:17.156 [main]警告 org.apache.jmeter.save.SaveService-无法注册转换器: org.apache.jmeter.protocol.http.util.HTTPResultConverter java.lang.ClassNotFoundException: org.apache.jmeter.protocol.http.util.HTTPResultConverter位于 java.net.URLClassLoader.findClass(URLClassLoader.java:382)在 java.lang.ClassLoader.loadClass(ClassLoader.java:424)在 sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:349)在 java.lang.ClassLoader.loadClass(ClassLoader.java:357)在 java.lang.Class.forName0(本机方法),位于 java.lang.Class.forName(Class.java:264)在 org.apache.jmeter.save.SaveService.registerConverter(SaveService.java:285) 在 org.apache.jmeter.save.SaveService.registerConverter(SaveService.java:260) 在org.apache.jmeter.save.SaveService.initProps(SaveService.java:246) 在org.apache.jmeter.save.SaveService。(SaveService.java:165) 在 com.solitera.automation.controller.JMeterFromExistingJMX.main(JMeterFromExistingJMX.java:75) 18:56:17.157 [main] INFO org.apache.jmeter.save.SaveService-使用 SaveService属性版本5.0 18:56:17.175 [main]警告 org.apache.jmeter.save.SaveService-无法注册转换器: org.apache.jmeter.protocol.http.sampler.HTTPSamplerBaseConverter java.lang.ClassNotFoundException: org.apache.jmeter.protocol.http.sampler.HTTPSamplerBaseConverter位于 java.net.URLClassLoader.findClass(URLClassLoader.java:382)在 java.lang.ClassLoader.loadClass(ClassLoader.java:424)在 sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:349)在 java.lang.ClassLoader.loadClass(ClassLoader.java:357)在 java.lang.Class.forName0(本机方法),位于 java.lang.Class.forName(Class.java:264)在 org.apache.jmeter.save.SaveService.registerConverter(SaveService.java:285) 在 org.apache.jmeter.save.SaveService.registerConverter(SaveService.java:260) 在org.apache.jmeter.save.SaveService.initProps(SaveService.java:246) 在org.apache.jmeter.save.SaveService。(SaveService.java:165) 在 com.solitera.automation.controller.JMeterFromExistingJMX.main(JMeterFromExistingJMX.java:75) 18:56:17.181 [main] INFO org.apache.jmeter.save.SaveService-正在加载 文件:D:\ apache-jmeter-5.1.1 \ extras \ slt_autoMa_Test.jmx异常 线程“主” java.lang.IllegalArgumentException:加载XML时出现问题 来自:'D:\ apache-jmeter-5.1.1 \ extras \ slt_autoMa_Test.jmx'。原因: CannotResolveClassException: org.apache.jmeter.protocol.http.control.HeaderManager
Detail:com.thoughtworks.xstream.converters.ConversionException: ----调试信息---- cause-exception:com.thoughtworks.xstream.converters.ConversionException原因消息 :头等舱类: org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:67) 类:org.apache.jmeter.save.ScriptWrapper required-type:org.apache.jmeter.save.ScriptWrapper 转换器类型:org.apache.jmeter.save.ScriptWrapperConverter 路径:/ jmeterTestPlan / hashTree / hashTree / HeaderManager 行号:14版本:5.2.1 -------------------------------位于org.apache.jmeter.save.SaveService.readTree(SaveService.java:459)在 org.apache.jmeter.save.SaveService.loadTree(SaveService.java:432)在 com.solitera.automation.controller.JMeterFromExistingJMX.main(JMeterFromExistingJMX.java:82) 引起原因:com.thoughtworks.xstream.converters.ConversionException: ----调试信息---- cause-exception:com.thoughtworks.xstream.converters.ConversionException原因消息 :头等舱类: org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:67) 类:org.apache.jmeter.save.ScriptWrapper required-type:org.apache.jmeter.save.ScriptWrapper 转换器类型:org.apache.jmeter.save.ScriptWrapperConverter 路径:/ jmeterTestPlan / hashTree / hashTree / HeaderManager 行号:14版本:5.2.1 -------------------------------位于org.apache.jmeter.save.ScriptWrapperConverter.createConversionException(ScriptWrapperConverter.java:102) 在 org.apache.jmeter.save.ScriptWrapperConverter.unmarshal(ScriptWrapperConverter.java:96) 在 com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) 在 com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:72) 在 com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) 在 com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) 在 com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134) 在 com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32) 在com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1487)处 com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1467)在 com.thoughtworks.xstream.XStream.fromXML(XStream.java:1338)位于 org.apache.jmeter.save.SaveService.readTree(SaveService.java:449)... 另外2个原因: com.thoughtworks.xstream.converters.ConversionException: ----调试信息----原因除外:com.thoughtworks.xstream.mapper.CannotResolveClassException 原因消息: org.apache.jmeter.protocol.http.control.HeaderManager类
:org.apache.jorphan.collections.ListedHashTree required-type: org.apache.jorphan.collections.ListedHashTree转换器类型: org.apache.jmeter.save.converters.HashTreeConverter路径
:/ jmeterTestPlan / hashTree / hashTree / HeaderManager行号
:14 ------------------------------- com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:77) 在 com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:72) 在 com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) 在 com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) 在 com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readBareItem(AbstractCollectionConverter.java:132) 在 com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:117) 在 org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:67) 在 com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) 在 com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:72) 在 com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) 在 com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) 在 org.apache.jmeter.save.ScriptWrapperConverter.unmarshal(ScriptWrapperConverter.java:94) ... 12更多原因: com.thoughtworks.xstream.mapper.CannotResolveClassException: org.apache.jmeter.protocol.http.control.HeaderManager位于 com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:81) 在 com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125) 在 com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55) 在 com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125) 在 com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88) 在 com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125) 在 com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79) 在 com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125) 在 com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74) 在 com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125) 在 com.thoughtworks.xstream.mapper.SecurityMapper.realClass(SecurityMapper.java:71) 在 com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125) 在 org.apache.jmeter.save.SaveService $ XStreamWrapper $ 1.realClass(SaveService.java:98) 在 com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:125) 在 com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:47) 在 com.thoughtworks.xstream.core.util.HierarchicalStreams.readClassType(HierarchicalStreams.java:29) 在 com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readBareItem(AbstractCollectionConverter.java:131) 在 com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:117) 在 org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:67) 在 com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) ...还有23
pom.xml文件
<!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_core -->
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>5.2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.11.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.lazerycode.jmeter</groupId>
<artifactId>jmeter-maven-plugin</artifactId>
<version>2.9.0</version>
<executions>
<execution>
<id>jmeter-tests</id>
<goals>
<goal>jmeter</goal>
</goals>
</execution>
</executions>
<configuration>
<overrideRootLogLevel>debug</overrideRootLogLevel>
<propertiesUser>
<jmeter.save.saveservice.output_format>xml</jmeter.save.saveservice.output_format>
</propertiesUser>
<testResultsTimestamp>false</testResultsTimestamp>
<ignoreResultFailures>true</ignoreResultFailures>
</configuration>
</plugin>
<!-- <plugin>
<groupId>com.lazerycode.jmeter</groupId>
<artifactId>jmeter-analysis-maven-plugin</artifactId>
<version>1.0.4</version>
<executions>
<execution>
<goals>
<goal>analyze</goal>
</goals>
<phase>verify</phase>
</execution>
</executions>
<configuration>
source file that contains jmeter result data. Needs to be XML format
or a GZIPed XML format
<source>D:\Ecllipse_project_workspace2\slt_automation\target\jmeter\results\*</source>
directory where to store analysis report files. At least a file "summary.txt"
will be stored here.
<targetDirectory>D:\Ecllipse_project_workspace2\slt_automation\target\jmeter\reports</targetDirectory>
<logsDirectory>D:\Ecllipse_project_workspace2\slt_automation\target\jmeter\logs</logsDirectory>
<processAllFilesFound>true</processAllFilesFound>
</configuration>
</plugin> -->
<plugin>
<groupId>com.lazerycode.jmeter</groupId>
<artifactId>jmeter-analysis-maven-plugin</artifactId>
<version>1.0.4</version>
<executions>
<execution>
<goals>
<goal>analyze</goal>
</goals>
<phase>verify</phase>
</execution>
</executions>
<configuration>
<!-- source file that contains jmeter result data. Needs to be XML format
or a GZIPed XML format -->
<source>${project.build.directory}/jmeter/results/*</source>
<!-- directory where to store analysis report files. At least a file "summary.txt"
will be stored here. -->
<targetDirectory>${project.build.directory}/jmeter/reports</targetDirectory>
<processAllFilesFound>true</processAllFilesFound>
</configuration>
</plugin>
<plugin>
<groupId>de.codecentric</groupId>
<artifactId>jmeter-graph-maven-plugin</artifactId>
<version>0.1.0</version>
<configuration>
<inputFile>${project.build.directory}/jmeter/results/slt_autoMa_Test.csv</inputFile>
<graphs>
<graph>
<pluginType>ResponseTimesOverTime</pluginType>
<width>800</width>
<height>600</height>
<outputFile>${project.build.directory}/jmeter/results/slt_autoMa_Test.png</outputFile>
</graph>
</graphs>
</configuration>
</plugin>
</plugins>
</build>
答案 0 :(得分:2)
从错误中您可能会发现您的测试正在使用HTTP Header Manager,并且您没有提供此类的ApacheJMeter_http
软件包。
临时解决方案是将下一个Maven dependency添加到您的 pom.xml :
<!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_http -->
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_http</artifactId>
<version>5.2.1</version>
</dependency>
我还建议从您的 pom.xml 中删除这些httpcore
和xstream
依赖性,因为Maven会将它们作为JMeter Core和HTTP软件包的transitive dependencies 。
根据测试性质,您可能需要其他软件包JMeter Plugins,因此很难说出您还需要什么。