【文章】Jmeter+Maven+Jenkins

Jmeter+Maven+Jenkins是当前国内测试行业比较流行的做法,要实现该自动化框架,需先在本地进行搭建,测试无误后,再放到Jenkins上去进行持续集成。那么接下来我们将一步步来实现。首先介绍下用的软件版本:Eclipse 2019-03 (4.11.0),JDK 1.8.0_171 ,Maven 3.6.1,Jmeter V5.0。这些软件的安装与配置就不在该篇文章中过多描述了,开门见山,直接进入正题。

1、打开Eclipse新建Maven项目

 

 

 

 

 

项目新建最开始的目录结构是这样的。

 

2、修改目录结构及其相关配置

1)删除src/test/java目录下的文件,实际过程中用不到。

2)在src/test目录下新建一个jmeter的目录,用来存放jmeter脚本、配置文件、参数化文件

3)在src/test目录下新建一个resources的目录,用来存放资源文件,比如XSL样式表文件jmeter.results.shanhe.me.xsl、jmeter-results-detail-report.xsl、jmeter-results-detail-report_21.xsl、jmeter-results-report.xsl、jmeter-results-report_21.xsl(注意:如何找到这些样式文件?找到jmeter安装目录的extras文件夹,v5.0版本只含有jmeter-results-detail-report_21.xsl、jmeter-results-report_21.xsl)

4)修改项目jdk版本,引入本地最新的jdk

修改后的目录结构是这样的。

 

3、把脚本、参数化文件、配置文件放入src/test/jmeter目录中

*.jmx是调试过脚本文件,用例文件夹中包含参数化文件csv或者txt,各种properties文件来自于jmeter安装目录bin文件夹中。

 

4、把jmeter-results-detail-report_21.xsl、jmeter-results-report_21.xsl放入到resources文件夹中

现在目录结构是这样的。

 

5、接下来,重头戏来了,如何配置pom.xml,该文件是maven的引入jar包、插件的重要配置文件。

刚开始时,该XML文件是这样的。

 

1)将junit版本从3.8.1改成4.10,3.*的版本太老了

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
2)在properties中加入jtl、html的存放路径

jtl后缀文件是jmeter执行后产生的结果文件,如果参数不配置,那么生成的就是csv文件。

html是jtl文件通过XSL样式表文件转化的结果。

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 测试结果存放路径 -->

<jmeter.result.jtl.dir>${project.build.directory}\jmeter\results</jmeter.result.jtl.dir>
<!-- 测试报表存放路径 -->

<jmeter.result.html.dir>${project.build.directory}\jmeter\html</jmeter.result.html.dir>

</properties>
3)加入jmeter-maven-plugin组件,该组件是联系maven与jmeter的核心,没有该组件无法通过maven构建jmeter脚本进行测试

其中

<resultsFileFormat>jtl</resultsFileFormat>

<resultsFileFormat>xml</resultsFileFormat>

这2个配置项很重要。

<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>
<configuration>
<resultsFileFormat>jtl</resultsFileFormat> <!--jmx脚本文件生成相应jtl文件-->
</configuration>
</execution>
<!-- 设置ignoreResultFailures,必须把 jmeter-check-results加上-->
<execution>
<id>jmeter-check-results</id>
<goals>
<goal>results</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 指定jmeter版本 -->
<jmeterVersion>5.0</jmeterVersion>
<!-- 设置jmeter生成结果文件格式 -->
<resultsFileFormat>xml</resultsFileFormat>
<!-- 设置忽略失败是否停止运行 -->
<ignoreResultFailures>true</ignoreResultFailures>
<!--设置结果是否有时间戳 -->
<testResultsTimestamp>true</testResultsTimestamp>
<testFilesIncluded>
<!-- //指定运行的jmeter脚本 -->
<jMeterTestFile>发布会系统测试.jmx</jMeterTestFile>
</testFilesIncluded>
<!-- 指定jtl生成目录 -->
<resultsDirectory>${jmeter.result.jtl.dir}</resultsDirectory>
</configuration>
</plugin>
</plugins>
</build>
4)在jmeter.properties进行修改jmeter.save.saveservice.output_format=xml

 

5)再加入xml-maven-plugin组件,该组件能将jtl文件转换成html报表

<plugin>
<!--根据xsl模版把jtl文件转换成html -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>xml-maven-plugin</artifactId>
<version>1.0-beta-3</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>transform</goal>
</goals>
</execution>
</executions>
<configuration>
<transformationSets>
<transformationSet>
<dir>${jmeter.result.jtl.dir}</dir>
<stylesheet>src\test\resources\jmeter-results-report_21.xsl</stylesheet>
<outputDir>${jmeter.result.html.dir}</outputDir>
<!-- 把jtl格式转传承html -->
<fileMappers>
<fileMapper
implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
<targetExtension>html</targetExtension>
</fileMapper>
</fileMappers>
</transformationSet>
<transformationSet>
<dir>${jmeter.result.jtl.dir}</dir>
<stylesheet>src\test\resources\jmeter-results-detail-report_21.xsl</stylesheet>
<outputDir>${jmeter.result.html.dir1}</outputDir>
<!-- 把jtl格式转传承html -->
<fileMappers>
<fileMapper
implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
<targetExtension>html</targetExtension>
</fileMapper>
</fileMappers>
</transformationSet>
</transformationSets>
</configuration>
<!-- using XSLT 2.0 -->
<dependencies>
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>saxon</artifactId>
<version>8.7</version>
</dependency>
</dependencies>
</plugin>
6)现在开始尝试运行一下了,在eclipse里面找到pom.xml文件右键run as ->Maven buil,Goals里填入verify,运行结果如下

 

 

 

忽略这2个警告:Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor,因为和提供的XSL样式表文件版本有关系。

7)打开本地(项目路径)autotest\target\jmeter\html 、(项目路径)autotest\target\jmeter\html1,查看报表

html:

 

html1:

 

发现红框的问题吗?图片没加载出来,怎么处理?

到jmeter安装目录的extras文件夹中,找到collapse.png、expand.png文件,复制到autotest\target\jmeter\html1的文件夹中,然后刷新html报表。

 

图标就变过来了。

6、Jmeter属性的设置的3种方式。

第一种,就是我们所用的,将jmeter.properties、saveservice.properties、system.properties、upgrade.properties、user.properties复制到项目中,进行修改。

第二种,直接在pom.xml文件中进行配置,放在<configuration>节点下。

第三种,混合配置

现在将第二种的属性配置贴出来,不做讲解。

<propertiesJMeter>
<CookieManager.save.cookies>true</CookieManager.save.cookies>
<overrideRootLogLevel>debug</overrideRootLogLevel>
<sampleresult.default.encoding>utf-8</sampleresult.default.encoding>
<jmeter.save.saveservice.data_type>true</jmeter.save.saveservice.data_type>
<jmeter.save.saveservice.label>true</jmeter.save.saveservice.label>
<jmeter.save.saveservice.response_code>true</jmeter.save.saveservice.response_code>
<jmeter.save.saveservice.response_data>true</jmeter.save.saveservice.response_data>
<jmeter.save.saveservice.response_data.on_error>true</jmeter.save.saveservice.response_data.on_error>
<jmeter.save.saveservice.response_message>true</jmeter.save.saveservice.response_message>
<jmeter.save.saveservice.successful>true</jmeter.save.saveservice.successful>
<jmeter.save.saveservice.thread_name>true</jmeter.save.saveservice.thread_name>
<jmeter.save.saveservice.time>true</jmeter.save.saveservice.time>
<jmeter.save.saveservice.subresults>true</jmeter.save.saveservice.subresults>
<jmeter.save.saveservice.assertions>true</jmeter.save.saveservice.assertions> <!--对jmeter.properties的属性值进行部分修改-->
<jmeter.save.saveservice.latency>true</jmeter.save.saveservice.latency>
<jmeter.save.saveservice.connect_time>true</jmeter.save.saveservice.connect_time>
<jmeter.save.saveservice.samplerData>true</jmeter.save.saveservice.samplerData>
<jmeter.save.saveservice.responseHeaders>true</jmeter.save.saveservice.responseHeaders>
<jmeter.save.saveservice.requestHeaders>true</jmeter.save.saveservice.requestHeaders>
<jmeter.save.saveservice.encoding>true</jmeter.save.saveservice.encoding>
<jmeter.save.saveservice.bytes>true</jmeter.save.saveservice.bytes>
<jmeter.save.saveservice.sent_bytes>true</jmeter.save.saveservice.sent_bytes>
<jmeter.save.saveservice.url>true</jmeter.save.saveservice.url>
<jmeter.save.saveservice.filename>true</jmeter.save.saveservice.filename>
<jmeter.save.saveservice.hostname>true</jmeter.save.saveservice.hostname>
<jmeter.save.saveservice.thread_counts>=true</jmeter.save.saveservice.thread_counts>
<jmeter.save.saveservice.sample_count>true</jmeter.save.saveservice.sample_count>
<jmeter.save.saveservice.idle_time>true</jmeter.save.saveservice.idle_time>
</propertiesJMeter>
7、大家可能有些奇怪,你为啥就知道在pom.xml中配置jmeter属性,其实这个不难,毕竟凡事都有因果。推荐2个网站,其实就是jmeter-maven-plugin、xml-maven-plugin官方网站。

https://github.com/jmeter-maven-plugin/jmeter-maven-plugin/wiki/Advanced-Configuration

http://www.mojohaus.org/xml-maven-plugin/index.html

如果你jmeter-maven-plugin可以对应哪些jmeter版本,也可以去上面查看。

8、如果你需要删除不必要的脚本,因为maven项目时会把src/test/jmeter下的测试脚本复制到target/jmeter/testFiles路径下,这2个路径下的脚本都要删除。

9、最后贴下完整的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>com.selftest</groupId>
<artifactId>autointerface</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>autointerface</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 测试结果存放路径 -->
<jmeter.result.jtl.dir>${project.build.directory}\jmeter\results</jmeter.result.jtl.dir>
<!-- 测试报表存放路径 -->
<jmeter.result.html.dir>${project.build.directory}\jmeter\html</jmeter.result.html.dir>
<jmeter.result.html.dir1>${project.build.directory}\jmeter\html1</jmeter.result.html.dir1>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</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>
<configuration>
<resultsFileFormat>jtl</resultsFileFormat> <!--jmx脚本文件生成相应jtl文件-->
</configuration>
</execution>
<!-- 设置ignoreResultFailures,必须把 jmeter-check-results加上-->
<execution>
<id>jmeter-check-results</id>
<goals>
<goal>results</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 指定jmeter版本 -->
<jmeterVersion>5.0</jmeterVersion>
<!-- 设置jmeter生成结果文件格式 -->
<resultsFileFormat>xml</resultsFileFormat>
<!-- 设置忽略失败是否停止运行 -->
<ignoreResultFailures>true</ignoreResultFailures>
<!--设置结果是否有时间戳 -->
<testResultsTimestamp>true</testResultsTimestamp>
<testFilesIncluded>
<!-- //指定运行的jmeter脚本 -->
<jMeterTestFile>发布会系统测试.jmx</jMeterTestFile>
</testFilesIncluded>
<!-- 指定jtl生成目录 -->
<resultsDirectory>${jmeter.result.jtl.dir}</resultsDirectory>
</configuration>
</plugin>
<plugin>
<!--根据xsl模版把jtl文件转换成html -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>xml-maven-plugin</artifactId>
<version>1.0-beta-3</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>transform</goal>
</goals>
</execution>
</executions>
<configuration>
<transformationSets>
<transformationSet>
<dir>${jmeter.result.jtl.dir}</dir>
<stylesheet>src\test\resources\jmeter-results-report_21.xsl</stylesheet>
<outputDir>${jmeter.result.html.dir}</outputDir>
<!-- 把jtl格式转传承html -->
<fileMappers>
<fileMapper
implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
<targetExtension>html</targetExtension>
</fileMapper>
</fileMappers>
</transformationSet>
<transformationSet>
<dir>${jmeter.result.jtl.dir}</dir>
<stylesheet>src\test\resources\jmeter-results-detail-report_21.xsl</stylesheet>
<outputDir>${jmeter.result.html.dir1}</outputDir>
<!-- 把jtl格式转传承html -->
<fileMappers>
<fileMapper
implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
<targetExtension>html</targetExtension>
</fileMapper>
</fileMappers>
</transformationSet>
</transformationSets>
</configuration>
<!-- using XSLT 2.0 -->
<dependencies>
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>saxon</artifactId>
<version>8.7</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>

————————————————
版权声明:本文为CSDN博主「lujinquan90」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lujinquan90/article/details/92988908

posted @ 2020-01-13 15:29  天青色wy  阅读(154)  评论(0编辑  收藏  举报