【文章】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