【发布时间】:2020-04-25 14:48:33
【问题描述】:
我在我的 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 [主要] 警告 org.apache.jmeter.util.JMeterUtils - 异常“空” 获取布尔属性时发生:'server.exitaftertest', 默认为:false 18:56:16.594 [main] WARN org.apache.jmeter.util.JMeterUtils - 发生异常“null”时 获取布尔属性:'jmeterengine.remote.system.exit', 默认为:false 18:56:16.594 [main] WARN org.apache.jmeter.util.JMeterUtils - 发生异常“null”时 获取布尔属性:'jmeterengine.stopfail.system.exit', 默认为:true 18:56:16.594 [main] WARN org.apache.jmeter.util.JMeterUtils - 发生异常“null”时 获取布尔属性:'jmeterengine.force.system.exit',默认 to: false 18:56:16.610 [main] INFO org.apache.jmeter.util.JMeterUtils - 将语言环境设置为 en_IN 18:56:17.109 [main] INFO org.apache.jmeter.save.SaveService - 测试计划 (JMX) 版本:2.2。 测试日志(JTL)版本:2.2 18:56:17.148 [main] INFO org.apache.jmeter.save.SaveService - 使用 SaveService 属性文件 编码 UTF-8 18:56:17.156 [main] WARN 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] WARN 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 中的异常 线程“main”java.lang.IllegalArgumentException:加载 XML 时出现问题 来自:'D:\apache-jmeter-5.1.1\extras\slt_autoMa_Test.jmx'。原因: 无法解决类异常: org.apache.jmeter.protocol.http.control.HeaderManager
详细信息:com.thoughtworks.xstream.converters.ConversionException: ---- 调试信息 ---- cause-exception : com.thoughtworks.xstream.converters.ConversionException cause-message :第一jmeter类: org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:67) 类:org.apache.jmeter.save.ScriptWrapper 所需类型: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 cause-message :第一jmeter类: org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:67) 类:org.apache.jmeter.save.ScriptWrapper 所需类型: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 所需类型: org.apache.jorphan.collections.ListedHashTree 转换器类型: org.apache.jmeter.save.converters.HashTree 转换器路径
: /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>
【问题讨论】: