马上要国庆了,最近比较忙,但是感觉忙的效率很一般,之前写过ant的集成,这两天研究了下maven,其中核心的插件便是jmeter-maven-plugin,要想了解更多的朋友,可以自行去官网wiki学习,地址:https://github.com/jmeter-maven-plugin/jmeter-maven-plugin/wiki。下面是我实践的下记录,供参考。

jdk、jmeter、maven这些软件的安装以及环境变量的设置我这里不做介绍,只要在命令窗口分别输入jmeter -v    、java -version、mvn -v。能分别出来相应的版本说明环境没问题。

eclipse部分

1. 首先是打开eclipse,新建一个maven项目。

2. 依次在工程的src/test目录下新建jmeter文件夹和resources文件夹,然后将自己写的jmeter脚本放在jmeter文件夹下,生成报告的模版文件/meter.results.shanhe.me.xsl放在resources文件夹下

3. 如果properties文件有过更改,则把相关的propertie文件也复制到jmeter文件夹里,见上图,否自系统会使用默认的jmeter文件

maven部分

1.最好maven能连上公司的私服,这样下载jar会快点,下面是我maven的conf文件配置。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  5. <!--
  6. <localRepository>D:/COMPANY/repo</localRepository>
  7. -->
  8. <!-- 此处配置本地maven的仓库地址 -->
  9. <localRepository>F:\mywork\apache-maven-3.0.4-m2\repository</localRepository>
  10. <offline>false</offline>
  11.  
  12. <pluginGroups>
  13. <!-- pluginGroup
  14. | Specifies a further group identifier to use for plugin lookup.
  15. <pluginGroup>com.your.plugins</pluginGroup>
  16. -->
  17. </pluginGroups>
  18.  
  19. <profiles>
  20. <!-- profile
  21. | Specifies a set of introductions to the build process, to be activated using one or more of the
  22. | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
  23. | or the command line, profiles have to have an ID that is unique.
  24. |
  25. | An encouraged best practice for profile identification is to use a consistent naming convention
  26. | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
  27. | This will make it more intuitive to understand what the set of introduced profiles is attempting
  28. | to accomplish, particularly when you only have a list of profile id's for debug.
  29. |
  30. | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
  31. <profile>
  32. <id>jdk-1.4</id>
  33.  
  34. <activation>
  35. <jdk>1.4</jdk>
  36. </activation>
  37.  
  38. <repositories>
  39. <repository>
  40. <id>jdk14</id>
  41. <name>Repository for JDK 1.4 builds</name>
  42. <url>http://www.myhost.com/maven/jdk14</url>
  43. <layout>default</layout>
  44. <snapshotPolicy>always</snapshotPolicy>
  45. </repository>
  46. </repositories>
  47. </profile>
  48. -->
  49. <profile>
  50. <id>myProfile</id>
  51. <repositories>
  52. <repository>
  53. <id>myRepository</id>
  54. <name>Repository for me</name>
  55. <url>http://192.168.100.10/nexus/content/groups/public/</url>
  56. </repository>
  57. </repositories>
  58. </profile>
  59.  
  60. <profile>
  61. <id>sonar</id>
  62. <properties>
  63. <sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar</sonar.jdbc.url>
  64. <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
  65. <sonar.jdbc.username>sonar</sonar.jdbc.username>
  66. <sonar.jdbc.password>sonar</sonar.jdbc.password>
  67. <sonar.host.url>http://localhost:9000</sonar.host.url> <!-- Sonar服务器访问地址 -->
  68. </properties>
  69. </profile>
  70. <profile>
  71. <id>jdk-1.7</id>
  72. <activation>
  73. <activeByDefault>true</activeByDefault>
  74. <jdk>1.7</jdk>
  75. </activation>
  76. <properties>
  77. <maven.compiler.source>1.7</maven.compiler.source>
  78. <maven.compiler.target>1.7</maven.compiler.target>
  79. <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
  80. </properties>
  81. </profile>
  82. </profiles>
  83.  
  84. <activeProfiles>
  85. <activeProfile>myProfile</activeProfile>
  86. <activeProfile>sonar</activeProfile>
  87. </activeProfiles>
  88. <updatePolicy>always</updatePolicy>
  89. </settings>

2. 下面是关键的部分,即maven的pom文件配置。

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4.  
  5. <groupId>mavenjmeter</groupId>
  6. <artifactId>maven2jmeter</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <packaging>jar</packaging>
  9.  
  10. <name>maven2jmeter</name>
  11. <url>http://maven.apache.org</url>
  12.  
  13. <properties>
  14. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  15. <!--此文件路径是jenkins的路径,如果不用jenkins,则不能这样写,需要写项目的build路径,如: -->
  16. <!-- <jmeter.result.jtl.dir>${project.build.directory}\jmeter\results</jmeter.result.jtl.dir>
  17. <jmeter.result.html.dir>${project.build.directory}\jmeter\html</jmeter.result.html.dir>-->
  18. <jmeter.result.jtl.dir>${env.WORKSPACE}/Report/${env.BUILD_ID}/jtl</jmeter.result.jtl.dir>
  19. <jmeter.result.html.dir>${env.WORKSPACE}/Report/${env.BUILD_ID}/html</jmeter.result.html.dir>
  20. </properties>
  21.  
  22. <dependencies>
  23. </dependencies>
  24. <build>
  25. <plugins>
  26. <plugin>
  27. <!-- 核心插件,用来执行jmx脚本,注意版本号,2.1.0可以使用用jmeter3.1生成的脚本。最新的2.2.0使用jmeter3.2生成的脚本 -->
  28. <groupId>com.lazerycode.jmeter</groupId>
  29. <artifactId>jmeter-maven-plugin</artifactId>
  30. <version>2.1.0</version>
  31. <configuration>
  32. <!-- 增加jar包,需要先将jar注册到本地maven仓库,打开cmd使用如下命令-->
  33. <!--mvn install:install-file -Dfile=D:\GIT\ZyzxAPIAutoTest\TXPTAPIAutoTest\plugns\jmeter-plugins-json.jar -DgroupId=com.jmeter.chajian -DartifactId=jmeter-plugins-json -Dversion=2.6 -Dpackaging=jar -->
  34. <jmeterExtensions>
  35. <!-- jmeter扩展插件 json path assert -->
  36. <artifact>com.jmeter.chajian:jmeter-plugins-json:2.6</artifact>
  37. <!-- 本地自己写的jar-->
  38. <artifact>com.smrz:smrz-utils:1.0</artifact>
  39. </jmeterExtensions>
  40. <!-- 设置jmeter生成结果文件格式-->
  41. <resultsFileFormat>xml</resultsFileFormat>
  42. <!-- 设置忽略失败是否停止运行-->
  43. <ignoreResultFailures>true</ignoreResultFailures>
  44. <!--设置结果是否有时间戳-->
  45. <testResultsTimestamp>false</testResultsTimestamp>
  46. <testFilesIncluded>
  47. <!-- //指定运行的jmeter脚本 -->
  48. <jMeterTestFile>testmaven1.jmx</jMeterTestFile>
  49. <jMeterTestFile>testmaven2.jmx</jMeterTestFile>
  50. <!--
  51. //使用正则表达式
  52. <jMeterTestFile>test*.jmx</jMeterTestFile> -->
  53. </testFilesIncluded>
  54. <!-- 指定jmx运行目录
  55. <testFilesDirectory>D:\workspaceN\maven2jmeter\src\test\jmeter\case1</testFilesDirectory>
  56. -->
  57. <!-- 指定jtl生成目录 -->
  58. <resultsDirectory>${jmeter.result.jtl.dir}</resultsDirectory>
  59. </configuration>
  60. <executions>
  61. <execution>
  62. <id>jmeter-tests</id>
  63. <phase>verify</phase>
  64. <!--脚本所在的文件夹 -->
  65. <goals>
  66. <goal>jmeter</goal>
  67. </goals>
  68. </execution>
  69. </executions>
  70. </plugin>
  71. <plugin>
  72. <!--根据xsl模版把jtl文件转换成html,官网地址: http://www.mojohaus.org/xml-maven-plugin/examples/transform-saxon.html-->
  73. <groupId>org.codehaus.mojo</groupId>
  74. <artifactId>xml-maven-plugin</artifactId>
  75. <version>1.0-beta-3</version>
  76. <executions>
  77. <execution>
  78. <phase>verify</phase>
  79. <goals>
  80. <goal>transform</goal>
  81. </goals>
  82. </execution>
  83. </executions>
  84. <configuration>
  85. <transformationSets>
  86. <!-- 可以根据不同的模版,同事生成多个报告
  87. <transformationSet>
  88. <dir>${jmeter.result.jtl.dir}</dir>
  89. <stylesheet>src\test\resources\jmeter.results.shanhe.me.xsl</stylesheet>
  90. <outputDir>${jmeter.result.html.dir}</outputDir>
  91. <fileMappers>
  92. <fileMapper
  93. implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
  94. <targetExtension>html</targetExtension>
  95. </fileMapper>
  96. </fileMappers>
  97. </transformationSet> -->
  98. <transformationSet>
  99. <dir>${jmeter.result.jtl.dir}</dir>
  100. <stylesheet>src\test\resources\jmeter.results.shanhe.me.xsl</stylesheet>
  101. <outputDir>${jmeter.result.html.dir}</outputDir>
  102. <!-- 把jtl格式转传承html -->
  103. <fileMappers>
  104. <fileMapper
  105. implementation="org.codehaus.plexus.components.io.filemappers.FileExtensionMapper">
  106. <targetExtension>html</targetExtension>
  107. </fileMapper>
  108. </fileMappers>
  109. </transformationSet>
  110. </transformationSets>
  111. </configuration>
  112. <!-- using XSLT 2.0 -->
  113. <dependencies>
  114. <dependency>
  115. <groupId>net.sf.saxon</groupId>
  116. <artifactId>saxon</artifactId>
  117. <version>8.7</version>
  118. </dependency>
  119. </dependencies>
  120. </plugin>
  121. </plugins>
  122. </build>
  123. </project>

这里需要对pom文件做几点说明。

1. jmeter-maven-plugin插件的版本号一定要和本地jmx文件生成的jmeter版本号对应,不然到时候会碰到com.thoughtworks.xstream.converters.ConversionException或者空指针异常。

2. testFilesIncluded提供了灵活的脚本执行选择方式,可以指定具体文件或目录,也可以使用正则表达式

3. 如果有多个jmx文件,会生成多个jtl日志文件,同时生成的html报告也会有多个,这点不如ant,ant会把多个jmx的文件汇总到一个html文件里面。
4. 如果有多个xsl报告模版文件,则可以配置多个transformationSet,maven会根据配置的transformationSet同时生成多个html报告,这点可以根据自己的需求选择

5.增加jmeter官方第三方的扩展jar包,需要先将jar下载到本地,然后把该jar包注册到本地maven仓库,然后再调用即可,具体步骤是

  • 下载插件到本地
  • 解压后,将lib/ext中的jar包注册到本地maven仓库:命令为
  1. mvn install:install-file -Dfile=D:\GIT\ZyzxAPIAutoTest\TXPTAPIAutoTest\plugns\jmeter-plugins-json.jar -DgroupId=com.jmeter.chajian -DartifactId=jmeter-plugins-json -Dversion=2.6 -Dpackaging=jar
  • 在pom文件中,执行的时候将该文件复制到target的jmeter->lib->ext文件夹下,具体配置:
  1. <jmeterExtensions>
  2. <!-- jmeter扩展插件 json path assert -->
  3. <artifact>com.jmeter.chajian:jmeter-plugins-json:2.6</artifact>
  4. <!-- 本地自己写的jar-->
  5. <artifact>com.smrz:smrz-utils:1.0</artifact>
  6. </jmeterExtensions>
  • 自己写的jar包配置方法同上

执行部分

1. 打开命令窗口,进入到项目所在的路径,输入 mvn verify,或者在eclipse右键项目,run as->maven build…,输入verify命令。即可看到执行过程,最终build success后

2. 执行结果的所有文件,都会存放在target目录下,如:

jenkins集成部分

1. jenkins新建一个maven风格的项目,做如下配置,具体配置不再细说,和我之前的ant集成的文章类似,具体可以参考

ant+jmeter+jenkins+git持续集成以及邮件报告展示

1. 需要适当修改Root POM的pom文件位置,./代表jenkins的workspace的当前项目路径,因为我的maven2jmeter项目在git上还有上级目录,所以需要再加上maven2jmeter,如果从git拉取的直接是maven2jmeter项目,则不需要再加maven2jmeter,直接./pom.xml

2. html report路径是:Report/$BUILD_ID/html,$BUILD_ID代表动态根据每次的构建id,生成相应目录的文件夹,和pom文件的  <jmeter.result.html.dir>${env.WORKSPACE}/Report/${env.BUILD_ID}/html</jmeter.result.html.dir>对应

效果图

参考部分

1. 文中所用的的例子demo已上传至github:https://github.com/qiaoyeye/ApiautoTest.git

2. xsl转换报告插件官网:http://www.mojohaus.org/xml-maven-plugin/examples/transform-basic.html

3. jmeter-maven-plugin官网:https://github.com/jmeter-maven-plugin/jmeter-maven-plugin/wiki

4. 参考博客:http://blog.csdn.net/xujiamin123456/article/details/77451660

maven+jmeter+jenkins集成的更多相关文章

  1. Jmeter+Jenkins集成html报告显示问题

    在J meter+Jenkins集成生成的html报告时,出现如下问题:无法正常显示表格,detail内容无法折叠和展开操作. 解决方法:执行下列脚本行 在Jenkins :系统管理--脚本命令行 S ...

  2. Maven+Jmeter+Jenkins的持续集成的新尝试

    前言: 这又是一篇迟到很久的文章,四月身体欠佳,根本不在状态. 好了,回到正题,相信大家也在很多博客,看过很多类似乎的文章,那么大家来看看我是如何实现的? 准备工作: 创建一个maven工程 创建一个 ...

  3. jmeter-03 JMeter + Jenkins 集成

    一.准备JMeter 测试计划 mock_api.jmx 接口准备:http://10.1.102.75:8000/mock/api/jmeter 二.jenkins 插件准备  Performanc ...

  4. ANT+JMETER + Jenkins 集成1

    新建任务注意添加invoke Ant,新建成功后运行就可以啦

  5. windows : Jmeter自动化测试-eclipse+maven+jmeter

    前提 在window上已经安装maven并且在eclipse中配置好了maven,如果没有配置,参考文章   windows上安装maven及eclipse中配置maven 一.创建一个包含jmete ...

  6. Jenkins+maven+jmeter+eclipse搭建自动化测试平台

    一.准备工作 1.jmeter准备测试脚本 2.maven环境配置 3.eclipse创建maven项目 4.Jenkins集成项目 二.jmeter准备测试脚本 使用jmeter准备测试脚本(不管录 ...

  7. 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)

    前言     上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库 ...

  8. Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)

    上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库文件和版本,以 ...

  9. jenkins jmeter持续集成批处理jmx脚本

    这篇文章介绍jenkis jmeter的持续集成,利用jenkins定时任务去批处理执行jmeter的jmx脚本文件,并且生成测试报告 1:jmeter的安装这里我就不在赘述了,如有问题可参考我的jm ...

随机推荐

  1. 接口测试之接口api文档的重要性

    接口文档的特点 接口文档,顾名思义就是对接口说明的文档.好的接口文档包含了对接口URL,参数以及输出内容的说明,我们参照接口文档就能编写出一个个的测试用例.而且接口文档详细的话,测试用例编写简单,不会 ...

  2. OA项目_环境搭建

    OA项目现在要做成微服务,用的框架是springboot,所用的编程工具是idea,maven,做为一个程序员最关心的就是我需要在那个架包中编写代码,我们只需关注domain,repository,s ...

  3. Codeforces Round #533 (Div. 2) Solution

    A. Salem and Sticks 签. #include <bits/stdc++.h> using namespace std; #define N 1010 int n, a[N ...

  4. Java backup

    待补充 ........ 0:常用头文件(待补充) import java.util.Arrays; import java.util.HashSet; import java.util.TreeSe ...

  5. 深入理解jvm--Java中init和clinit区别完全解析(转)

    转自:http://blog.csdn.net/u013309870/article/details/72975536 init和clinit区别 ①init和clinit方法执行时机不同 init是 ...

  6. Python笔记 #15# Pandas: Missing Data

    10 Minutes to pandas import pandas as pd import numpy as np import matplotlib.pyplot as plt dates = ...

  7. RESTful源码笔记之RESTful Framework的APIview, Viewset总结分析

    0x00  引言 官方文档:http://www.django-rest-framework.org/drf为我们提供强大的通用view的功能,本博客对这些view进行简要的总结分析.首先,我们看一下 ...

  8. bzoj3629 / P4397 [JLOI2014]聪明的燕姿

    P4397 [JLOI2014]聪明的燕姿 根据唯一分解定理 $n=q_{1}^{p_{1}}*q_{2}^{p_{2}}*q_{3}^{p_{3}}*......*q_{m}^{p_{m}}$ 而$ ...

  9. -03-PetaLinux通过eMMC方式启动【Xilinx-Petalinux学习】

    前面说的我的硬件上有一颗eMMC的芯片,型号是MTFC4GACAJCN-4M IT,有4GB的容量. BOOT.bin的文件较小,只有不到3MB,但是image.ub的文件根据不同的需求,将来可能会越 ...

  10. mdio rgmii mac phy简单了解

    MDIO(Management Data Input/Output),对G比特以太网而言,串行通信总线称为管理数据输入输出 (MDIO). 该总线由IEEE通过以太网标准IEEE 802.3的若干条款 ...