【问题标题】:How to pack a JMeter test plan built from code into a jar using Maven?如何使用 Maven 将从代码构建的 JMeter 测试计划打包到 jar 中?
【发布时间】:2019-04-07 14:43:26
【问题描述】:

我正在尝试用 Java 构建 JMeter 测试计划。我似乎找不到太多关于这个过程的文档,而且我能找到的资源都使用 Maven 来构建 jar。我之前没有使用 Maven 的经验,无法正确配置 pom。

主要混淆点:

  • 如果我的 jar 放在 jmeter_home/lib/ext 中,是否会提供 ApacheJMeter_core 和 ApacheJMeter_http 等依赖项?

  • 似乎有多个具有类似目的的 Maven 插件(maven-jar、maven-assembly)?有没有最适合我的需求?

  • 如果我想在 jar 之外的位置(JMeter 目录中的其他位置)引用非 Java 资源,在配置 POM 时是否需要特别考虑?

  • 我应该将 jar 配置为可执行,还是 JMeter 提供类似脚本来处理 lib/ext jar?

我们将不胜感激任何对这些观点的见解。

这些资源一直在指导我,但我浪费了数小时试图解决这个看似微不足道的过程..

https://bitbucket.org/blazemeter/jmeter-from-code/

https://github.com/piotrbo/jmeterpoc

如果有人有更多关于在代码中构建 JMeter 测试计划的资源,请随时分享!

这是我的 pom.xml,我知道我在使用插件等方面可能存在一些冗余,但是当你已经攻击同一个问题几个小时而没有进展时就会发生这种情况:)

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sweber</groupId>
    <artifactId>jmeter-plugin</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>
    <name>jmeter-plugin</name>
    <url>http://maven.apache.org</url>
    <build>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>
                                com.sweber.Main
                            </mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <archive>
                                <manifest>
                                    <mainClass>
                                        com.sweber.Main
                                    </mainClass>
                                </manifest>
                            </archive>
                            <descriptorRefs>
                                <descriptorRef>jar-with-dependencies</descriptorRef>
                            </descriptorRefs>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>

    </build>

    <dependencies>

        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_core</artifactId>
            <version>5.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_java</artifactId>
            <version>5.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_http</artifactId>
            <version>5.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.0.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.0.1</version>
        </dependency>

        <dependency>
            <groupId>kg.apc</groupId>
            <artifactId>jmeter-plugins-casutg</artifactId>
            <version>2.7</version>
        </dependency>

    </dependencies>

</project>

【问题讨论】:

    标签: maven jmeter


    【解决方案1】:

    您需要在 POM 中添加 com.lazerycode.jmeter。

    https://github.com/jmeter-maven-plugin/jmeter-maven-plugin

    所以你把它添加到你的 pom 中:

    <plugin>
    <groupId>com.lazerycode.jmeter</groupId>
    <artifactId>jmeter-maven-plugin</artifactId>
    <version>2.9.0</version>
    <executions>
       <!-- Run JMeter tests -->
       <execution>
            <id>jmeter-tests</id>
            <goals>
                <goal>jmeter</goal>
            </goals>
       </execution>
       <!-- Fail build on errors in test -->
       <execution>
            <id>jmeter-check-results</id>
            <goals>
                <goal>results</goal>
            </goals>
       </execution>
    </executions>
    

    另外,如果您要进行 IDE 测试,而不仅仅是 mvn clean verify,则必须将 Jmeter 依赖项解压缩到目标目录。

    在项目根目录中使用:mvn com.lazerycode.jmeter:jmeter-maven-plugin:2.9.0:jmeter

    任何其他 mvn 插件的等效语句:mvn groupId:artifactId:version:goal(基于插件的 POM 结构)

    【讨论】:

    • 我看到 jmeter-maven-plugin 在 target/jmeter/testFiles 中搜索测试文件,但是如果我的测试计划是一个 jar 文件呢?它位于哪里,我需要做些什么不同的事情才能以这种方式运行测试?
    • 不确定你到底想要完成什么,但在 IDE 中或使用 mvn verify 将你的 JMX 文件加载到测试类中并通过典型的 J 使用它是最有意义的单元测试。顺便说一句,如果您在 Jmeter GUI 中创建了 JAR 并希望使用该测试计划,则可以将其作为 JMX 文件导入,假设您的 Engine 类考虑了依赖关系。使用 SDK 时,最好在 SDK 中创建测试计划,保存或加载以运行它。
    • 我想我想保留 jar 格式的原因是因为我试图使用 Apache poi 库从 excel 电子表格中读取测试参数,但不知道如何获得这样的在 JMeter 组件内部工作的依赖项,例如 bean shell 脚本。因此我选择尝试在代码中配置它。所以也许我真正的潜在困惑是在我的测试组件中使用外部库?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    相关资源
    最近更新 更多