前言

承接上文 - 使用maven运行jmeter测试脚本进行自动化接口测试 本次主要增强了在自动化测试阶段的配置项,以及使用 jmeter gui 界面时的自动配置项。 使得gui 界面下与 非gui下自动测试的jmx脚本能够不做任何变更,即可在两种不同的环境下运行。使用gui界面更容易对脚本进行调试和测试。 检测无误后即可放到自动化测试环境下运行。

完整的 pom.xml 配置

涉及到如何使用第三方jar文件,以及使用自己本地的jar文件。如何通过jmx_file参数传递要测试的文件名等。

<?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>top.yjp</groupId>
    <artifactId>jmeter-tools</artifactId>
    <version>1.0.1</version>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <java.version>1.8</java.version>
        <!-- 指定jmeter版本 -->
        <jmeter.version>5.4.3</jmeter.version>
        <!-- 指定jmeter-plugin版本 -->
        <jmeter-maven-plugin.version>3.5.0</jmeter-maven-plugin.version>
        <!-- 指定使用的mysql jdbc driver的版本 -->
        <mysql-driver.version>8.0.29</mysql-driver.version>
    </properties>
    <profiles>
        <profile>
            <!-- 定义测试环境 -->
            <id>test</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <testing.profile>test</testing.profile>
            </properties>
        </profile>
        <profile>
            <!-- 定义预发环境 -->
            <id>pre</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <testing.profile>pre</testing.profile>
            </properties>
        </profile>
    </profiles>
    <dependencies>
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_java</artifactId>
            <version>${jmeter.version}</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <!-- 命令行执行: mvn clean verify -->
                <!-- 文档及配置 https://github.com/jmeter-maven-plugin/jmeter-maven-plugin/wiki/ -->
                <groupId>com.lazerycode.jmeter</groupId>
                <artifactId>jmeter-maven-plugin</artifactId>
                <version>${jmeter-maven-plugin.version}</version>

                <configuration>
                    <!-- 使用特定的 jmeter 版本 -->
                    <jmeterVersion>${jmeter.version}</jmeterVersion>
                    <generateReports>true</generateReports>
                    <customPropertiesFiles>
                        <!-- 指定要使用的自定义属性文件 -->
                        <propertiesFile>src/test/resources/${testing.profile}.properties</propertiesFile>
                    </customPropertiesFiles>
                    <propertiesJMeter>
                        <log_level.jmeter>DEBUG</log_level.jmeter>
                        <!-- 定义自己的classpath加载路径 -->
                        <user.classpath>${project.basedir}/lib/jmeter-tools-${project.version}.jar</user.classpath>
                    </propertiesJMeter>
                    <propertiesUser>
                        <!-- 用户定义的变量,相当于 jmeter 的 -J选项传递的变量及值 -->
                        <file_path>${project.basedir}</file_path>
                    </propertiesUser>
                    <jmeterExtensions>
                        <!-- 此处定义的jar依赖,下载后将放置在jmeter/lib/ext文件夹下 -->
                        <artifact>mysql:mysql-connector-java:${mysql-driver.version}</artifact>
                    </jmeterExtensions>
                    <testPlanLibraries>
                        <!-- 此处定义的jar依赖,将从maven源下载后放到jmeter/lib下面 因此需要保证maven源有该artifact -->
<!--                        <artifact>mysql:mysql-connector-java:8.0.29</artifact> -->
                    </testPlanLibraries>
                    <testFilesIncluded>
                        <!-- 指定运行的jmeter脚本 可以使用通配符 例如: **/*.jmx 通过命令传递参数 -Djmx_file="**/test.jmx" 方式传递 -->
                        <!--suppress UnresolvedMavenProperty -->
                        <jMeterTestFile>${jmx_file}</jMeterTestFile>
                    </testFilesIncluded>
                </configuration>
                <executions>
                    <!-- Generate JMeter configuration -->
                    <execution>
                        <id>configuration</id>
                        <goals>
                            <goal>configure</goal>
                        </goals>
                    </execution>
                    <!-- Run JMeter tests -->
                    <execution>
                        <id>jmeter-tests</id>
                        <goals>
                            <goal>jmeter</goal>
                        </goals>
                        <configuration>
                            <testFilesDirectory>${project.basedir}</testFilesDirectory>
                        </configuration>
                    </execution>
                    <!-- Fail build on errors in test -->
                    <execution>
                        <id>jmeter-check-results</id>
                        <goals>
                            <goal>results</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

运行非gui环境的测试

例如要运行test.jmx这个测试脚本。 执行如下命令:

# 非图形界面下运行测试脚本test.jmx(使用test环境)
mvn clean verify -Ptest -Djmx_file="**/test.jmx"

# 非图形界面下运行测试脚本test2.jmx(使用pre环境)
mvn clean verify -Ppre -Djmx_file="src/test/jmeter/test.jmx"

运行gui图形界面

执行如下命令:

# 当你首次执行图形界面的时候,需要进行配置,运行configure
mvn jmeter:configure

# 只要配置configure完毕后,可以多次运行下面的命令开启jmeter图形界面
# 使用指定的环境(例如:test)
mvn jmeter:gui -Ptest

# 或者执行配置和gui并打开一个测试脚本
mvn jmeter:gui -Ptest -DguiTestFile=src/test/jmeter/test.jmx

这样你就可以在相同的环境,使用gui界面编写jmeter测试脚本,并进行调试了。

待解决

启动图形界面的时候,原本命令行 jmeter -t src/test/jmeter/test.jmx 这样直接打开一个测试脚本文件的命令,不太知道怎么用maven的形式传递过去。如果能够传递过去就更加的方便了,现在这种就只能是使用jmeter gui里的打开文件对话框去选择文件。

补充:阅读官网 https://github.com/jmeter-maven-plugin/jmeter-maven-plugin/wiki/Basic-Configuration 发现使用 guiTestFile 可以打开指定文件 例如:

mvn jmeter:configure jmeter:gui -DguiTestFile=src/test/jmeter/test.jmx

完美!!!