你笑的时候全世界陪你一起笑,你哭的时候只有你一个人哭

Jmeter-maven-plugin配置自动化性能测试方法(一)

上一篇 / 下一篇  2017-08-17 14:44:42 / 个人分类:性能测试

一、     性能项目编写

Jmeter-maven-pluginmaven编译过程中默认从<basedir>\src\test\jmeter下搜索jmx测试计划,并在verify阶段执行测试计划,最后把执行的日志结果保存在<project.build.directory>\jmeter\results下。

对于jmeter内置支持的sampler来说jmeter-maven-plugin只需要维护好测试计划即可,但java request的请求还需要提前把发压的jar拷贝到jmeterlib\ext目录下,发压jar依赖的所有jar放到lib下。经过多次尝试决定将编写java request的项目与jmeter-maven-plugin的项目分开,因为java request的测试接口可能会增加、减少,或调整传入参数数量、取值范围等,接口调用的工作可以让项目内的性能测试工程师专职维护,jmeter-maven-plugin的项目不需要编写脚本,仅维护测试用例和发压数据,在jenkins上通过配置参数实现一键发压,让项目组内任何测试工程师执行。

1.Jmeter java request项目

Jmeter java request项目的编写可参见《神州买卖车性能测试脚本编写方法》,pom文件中将jmeter升级为3.1,由于被测接口需要,还需多依赖一个servlet-api,另外将maven命令改为clean install,将项目的jar installmaven本地仓库中(jmeter-maven-plugin项目中会用到)。

2.Jmeter-maven-plugin项目

Jmeter-maven-plugin项目不维护任何接口调用的代码,只通过配置实现依赖jar的复制,并配合jenkins实现对测试计划中相关参数的赋值,以实现性能自动化。

1) 项目组织结构

项目组织结构如下:

在项目的main/resources下新建data目录,里面存放接口发压用到的参数化文件,文件名最好与接口名一致。在test下新建jmeter目录,jmeter-maven-plugin插件默认会从这里搜索所有jmx测试计划,测试计划名最好与接口名一致。

2) pom.xml

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">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ucar.perf</groupId>

    <artifactId>jmeter-ucoms-jenkins</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <dependencies>

        <dependency>

            <groupId>com.ucar.perf</groupId>

            <artifactId>jmeter-ucoms</artifactId>

            <version>0.0.1-SNAPSHOT</version>

        </dependency>

    </dependencies>

    <build>

        <plugins>

            <plugin>

                <artifactId>maven-dependency-plugin</artifactId>

                <version>2.10</version>

                <executions>

                    <execution>

                        <id>copy-dependencies</id>

                        <phase>package</phase>

                        <goals>

                            <goal>copy-dependencies</goal>

                        </goals>

                    </execution>

                </executions>

                <configuration>

                    <overWriteSnapshots>true</overWriteSnapshots>

                    <overWriteReleases>true</overWriteReleases>

                    <overWriteIfNewer>true</overWriteIfNewer>

                    <outputDirectory>${project.build.directory}/jmeter/lib</outputDirectory>

                </configuration>

            </plugin>

            <plugin>

                <groupId>com.lazerycode.jmeter</groupId>

                <artifactId>jmeter-maven-plugin</artifactId>

                <version>2.1.0</version>

                <executions>

                    <execution>

                        <id>jmeter-tests</id>

                        <phase>verify</phase>

                        <goals>

                            <goal>jmeter</goal>

                        </goals>

                    </execution>

                </executions>

                <configuration>

                    <downloadExtensionDependencies>false</downloadExtensionDependencies>

                    <testFilesIncluded>

    <jMeterTestFile>getBookOrderDetailByNo.jmx</jMeterTestFile>

                    </testFilesIncluded>

                    <propertiesUser>

    <parameterFilePath>${project.build.outputDirectory}/data/</parameterFilePath>

                    </propertiesUser>

                    <resultsFileNameDateFormat>yyyy-MM-dd</resultsFileNameDateFormat>

                    <resultsFileFormat>csv</resultsFileFormat>

                    <jmeterExtensions>

                        <artifact>com.ucar.perf:jmeter-ucoms:0.0.1-SNAPSHOT</artifact>

                    </jmeterExtensions>

                    <jMeterProcessJVMSettings>

                        <xms>128</xms>

                        <xmx>128</xmx>

                    </jMeterProcessJVMSettings>

                </configuration>

            </plugin>

        </plugins>

    </build>

</project>

Dependency里只依赖java request里要用到的jar,因为上一步编译时已经installmaven本地仓库了,因此这里可以从本地仓库中获取。

l Build下使用maven-dependency-plugin将依赖的jar复制到${project.build.directory}/jmeter/lib下;

l jmeter-maven-plugin下通过<jmeterExtensions>java requestjar复制到jmeter/lib/ext下(即dependency里依赖的jar);

l 通过<testFilesIncluded>指定jmx测试计划的名字(与jenkins结合时这里可以用参数指定);

l 通过<propertiesUser>jmeteruser.properties中添加用户级别的参数,配合测试计划中添加相同的用户参数,让jmeter可以找到参数化文件的路径,这里添加parameterFilePath指向编译后的参数化文件路径${project.build.outputDirectory}/data/(在jenkins机器上执行发压时必须指定这个路径,因为参数化文件会放到编译输出的路径下,如果调用远程发压机则不需在这里指定,而需要通过jenkins里的插件将参数化文件复制到发压机指定目录下);

l jmeter-maven-plugin执行发压时将启动新的java进程,通过<jMeterProcessJVMSettings>可以添加各种jvm的参数,这里指定jvm heap最大最小都为128m

Maven命令为clean verify

3) jmx测试计划

参数化设置中将参数化文件命改为${parameterFilePath}getBookOrderDetailByNo.dat

同时添加User Defined Variables,添加自定义的参数parameterFilePathValue${__P(parameterFilePath,)},表示从jmeterproperties文件中取值:

pom中面已通过<propertiesUser>jmeteruser.properties文件中增加了参数parameterFilePathjmeter执行时这里就被替换成了具体的参数化文件路径。


TAG:

 

评分:0

我来说两句

Open Toolbar