我的Maven项目中无法使用Java代码运行jmeter测试文件

时间:2020-01-08 04:44:54

标签: java spring maven jmeter

我正在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>

1 个答案:

答案 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 中删除这些httpcorexstream依赖性,因为Maven会将它们作为JMeter Core和HTTP软件包的transitive dependencies


根据测试性质,您可能需要其他软件包JMeter Plugins,因此很难说出您还需要什么。