【问题标题】:jmeter property expansion not working with maven artifactsjmeter 属性扩展不适用于 Maven 工件
【发布时间】:2016-04-12 19:16:45
【问题描述】:

在 java 1.7 上运行 jmeter 2.13

我有一个测试用例,它由简单的 groovy 脚本采样器组成,它接受一个指定为 ${__P(var,foo)} 和 printlns args[0] 的参数。我可以下载 apache jmeter 2.13 并运行测试用例,并按预期打印出“foo”。但是,如果我使用 maven 工件构建 jmeter,相同的 .jmx 测试用例会输出“${__P(var,foo)}”。所以它似乎没有将参数识别为变量。我的 pom 文件如下:

<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/xsd/maven-4.0.0.xsd">
<parent>
    <artifactId>jicd-4.2-tools-onboarding</artifactId>
    <groupId>com.ticomgeo.jicd42</groupId>
    <version>0.2.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>onboarding-tests</artifactId>
<packaging>jar</packaging>

<name>validation-tests</name>
<url>http://maven.apache.org</url>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <jmeter-version>2.13</jmeter-version>
</properties>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_core</artifactId>
        <version>${jmeter-version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-math3</artifactId>
                <groupId>commons-math3</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-pool2</artifactId>
                <groupId>commons-pool2</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_components</artifactId>
        <version>${jmeter-version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-math3</artifactId>
                <groupId>commons-math3</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-pool2</artifactId>
                <groupId>commons-pool2</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_java</artifactId>
        <version>${jmeter-version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-math3</artifactId>
                <groupId>commons-math3</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-pool2</artifactId>
                <groupId>commons-pool2</groupId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter</artifactId>
        <version>${jmeter-version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-math3</artifactId>
                <groupId>commons-math3</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-pool2</artifactId>
                <groupId>commons-pool2</groupId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_config</artifactId>
        <version>${jmeter-version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-math3</artifactId>
                <groupId>commons-math3</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-pool2</artifactId>
                <groupId>commons-pool2</groupId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_report</artifactId>
        <!-- <version>${jmeter-version}</version> -->
        <version>2.12</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-math3</artifactId>
                <groupId>commons-math3</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-pool2</artifactId>
                <groupId>commons-pool2</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_functions</artifactId>
        <version>${jmeter-version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-math3</artifactId>
                <groupId>commons-math3</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-pool2</artifactId>
                <groupId>commons-pool2</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_monitors</artifactId>
        <version>${jmeter-version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-math3</artifactId>
                <groupId>commons-math3</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-pool2</artifactId>
                <groupId>commons-pool2</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_mail</artifactId>
        <version>${jmeter-version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-math3</artifactId>
                <groupId>commons-math3</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-pool2</artifactId>
                <groupId>commons-pool2</groupId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_junit</artifactId>
        <version>${jmeter-version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-math3</artifactId>
                <groupId>commons-math3</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-pool2</artifactId>
                <groupId>commons-pool2</groupId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>jorphan</artifactId>
        <version>${jmeter-version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-math3</artifactId>
                <groupId>commons-math3</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-pool2</artifactId>
                <groupId>commons-pool2</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter</artifactId>
        <version>${jmeter-version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-math3</artifactId>
                <groupId>commons-math3</groupId>
            </exclusion>
            <exclusion>
                <artifactId>commons-pool2</artifactId>
                <groupId>commons-pool2</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- fix jmeter build bug -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-math3</artifactId>
        <version>3.4.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
        <version>2.3</version>
    </dependency>

    <!-- groovy -->
    <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-all</artifactId>
        <version>2.4.6</version>
    </dependency>
    <!-- appgeo -->
    <dependency>
        <groupId>com.ticomgeo.jicd42</groupId>
        <artifactId>appgeo-jaxb</artifactId>
    </dependency>

    <dependency>
        <groupId>com.techma.nxm</groupId>
        <artifactId>nextmidas</artifactId>
        <classifier>sys</classifier>
        <version>3.0.1</version>
    </dependency>

    <dependency>
        <groupId>gov.oio.jicd42</groupId>
        <artifactId>app-geo-api</artifactId>
        <version>2.0.3</version>
    </dependency>

    <!-- <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_parent</artifactId> 
        <version>${jmeter-version}</version> </dependency> -->
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>appassembler-maven-plugin</artifactId>
            <version>1.4</version>
            <configuration>
                <configurationDirectory>config</configurationDirectory>
                <!-- Copy the contents from "/src/main/config" to the 
                    target configuration directory in the assembled application -->
                 <copyConfigurationDirectory>true</copyConfigurationDirectory>
                <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
                <repositoryLayout>flat</repositoryLayout>
                <repositoryName>lib</repositoryName>
                <programs>
                    <program>
                         <mainClass>org.apache.jmeter.NewDriver</mainClass>
                        <name>validationTest</name>
                    </program>
                </programs>
            </configuration>
            <executions>
                <execution>
                    <configuration>
                        <extraJvmArguments />
                    </configuration>
                    <id>create-executables</id>
                    <phase>package</phase>
                    <goals>
                        <goal>assemble</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptors>
                    <descriptor>src/main/assembly/bin.xml</descriptor>
                </descriptors>
            </configuration>
            <executions>
                <execution>
                    <id>bin</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

【问题讨论】:

    标签: maven properties jmeter


    【解决方案1】:

    您很可能有一些包装问题,这与 JMeter 或 Maven 无关,因为我无法使用 JMeter Maven Plugin 重现您的问题

    示例pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.jmeter.test</groupId>
        <artifactId>onboarding-tests</artifactId>
        <version>1.0-SNAPSHOT</version>
        <build>
            <plugins>
                <plugin>
                    <groupId>com.lazerycode.jmeter</groupId>
                    <artifactId>jmeter-maven-plugin</artifactId>
                    <version>1.10.1</version>
                    <executions>
                        <execution>
                            <id>jmeter-tests</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>jmeter</goal>
                            </goals>
                        </execution>
                    </executions>
                    <dependencies>
                        <dependency>
                            <groupId>org.codehaus.groovy</groupId>
                            <artifactId>groovy-all</artifactId>
                            <version>2.4.6</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    </project>
    

    样本输出:

    [INFO] -------------------------------------------------------
    [INFO]  P E R F O R M A N C E    T E S T S
    [INFO] -------------------------------------------------------
    [INFO]
    [INFO]
    [info]
    [debug] JMeter is called with the following command line arguments: -n -t /private/tmp/jmeter-maven/src/test/jmeter/example.jmx -l /private/tmp/jmeter-maven/target/jmeter/results/20160413-example.jtl -d /private/tmp/jmeter-maven/target/jmeter -j /private/tmp/jmeter-maven/target/jmeter/logs/example.jmx.log
    [info] Executing test: example.jmx
    [debug] Creating summariser <summary>
    [debug] Created the tree successfully using /private/tmp/jmeter-maven/src/test/jmeter/example.jmx
    [debug] Starting the test @ Wed Apr 13 06:39:54 CEST 2016 (1460522394158)
    [debug] Waiting for possible shutdown message on port 4445
    [debug] foo
    [debug] summary =      1 in   0.3s =    2.9/s Avg:   282 Min:   282 Max:   282 Err:     0 (0.00%)
    [debug] Tidying up ...    @ Wed Apr 13 06:39:55 CEST 2016 (1460522395204)
    [debug] ... end of run
    [info] Completed Test: example.jmx
    [INFO]
    [INFO] Test Results:
    [INFO]
    [INFO] Tests Run: 1, Failures: 0
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    

    所以也许值得考虑切换到该插件而不是手动触发 JMeter 测试,因为您可能会错过重要的配置步骤。

    参考资料:

    【讨论】:

    • JMeter 需要从源代码构建。我个人不同意它,但它是我的任务。从工件构建是从源代码构建的第一步。我还有另一个打包问题,GUI 不会从构建输出中加载。是否有关于包装/类加载器问题的讨论?
    【解决方案2】:

    好的,找到答案了。我正在使用 appassembler 插件。这会将所有 jar 放入类路径中。我依靠 jmeter 来找到它的插件。我将插件移动到一个单独的目录并将 search_paths jmeter 属性设置为该目录,即

    search_paths=../apache
    

    这不仅解决了属性未解析的问题,而且还解决了 GUI 未运行的问题。

    An error occurred: No action handlers found - check JMeterHome and libraries
    

    请注意,仅添加 appassembler 生成的 lib 目录不起作用。在这种情况下发生了以下错误:

    An error occurred: class "org.bouncycastle.cms.BaseDigestCalculator"'s signer information does not match signer information of other classes in the same package
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 2014-08-26
      • 2011-06-25
      • 2017-09-01
      • 2012-10-03
      • 2021-01-07
      • 2018-08-29
      相关资源
      最近更新 更多