Jmeter +Maven+jenkins 接口性能全自动化测试

背景:

首先用jmeter录制或者书写性能测试的脚本,用maven添加相关依赖,把性能测试的代码提交到github,在jenkins配置git下载性能测试的代码,配置运行脚本和测试报告,配置运行失败自动发邮件通知,这样一来性能测试的job配置完成。接着,把性能测试的job配置成开发job的下游job,一旦开发有了新的代码提交运行开发自己的job后,就会自动触发我们性能测试的job。这样我们就实现了接口性能测试的全自动化,我们只需要关注测试失败的邮件!

1 环境搭建

下载安装 jdk &eclipse。

下载安装jenkins。

下载maven 并进行解压。

下载jmeter并解压。

2 准备性能测试的脚本

启动 jmeter (双击 jmeter解压目录下的bin\jmeter.bat)。

用jmeter书写test cases,并导出(推荐)。

或者你可以用jmeter录制脚本,确保运行通过后,导出。

当然你可以选择用badboy录制脚本,确保运行通过后,导出。

3 为性能测试脚本创建maven project

打开eclipse,并创建一个 maven project。

在src/test/目录下创建jmeter文件夹把准备好的性能测试的脚本复制到这个文件夹下。

在src/test/目录下创建resource文件夹,并把测试模板(E:\apache-jmeter-3.2\apache-jmeter-3.2\extras的如下文件)复制到这个resource文件下。

并把如下文件从apache-jmeter-3.2\bin目录下复制到src/test/jmeter文件里。

  • 在maven脚本里添加jmeter-maven-plugin相关依赖如下:


    4.0.0

    复制代码
      <groupId>com.performance.test</groupId>
      <artifactId>PushNotificationPerformanceTest</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>PushNotificationPerformanceTest</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>
          <ReportName>TestReport</ReportName>
      </properties>
    
      <dependencies>
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>3.8.1</version>
              <scope>test</scope>
          </dependency>
      </dependencies>
    
      <build>
          <plugins>
              <plugin>
                  <groupId>com.lazerycode.jmeter</groupId>
                  <artifactId>jmeter-maven-plugin</artifactId>
                  <version>2.1.0</version>
                  <executions>
                      <execution>
                          <id>jmeter-tests</id>
                          <goals>
                              <goal>jmeter</goal>
                          </goals>
                      </execution>
                  </executions>
              </plugin>
              <plugin>
                  <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-loadtest.xsl</stylesheet>
                              <outputDir>${jmeter.result.html.dir}</outputDir>
                              <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.shanhe.me.xsl</stylesheet>
                              <outputDir>${jmeter.result.html.dir1}</outputDir>
                              <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>

    复制代码

4 在eclipse运行性能测试脚本

  • 选中性能测试的project 右击,然后在下拉框中选择run as -》maven build ,然后在弹出的对话框的Goals 写上verify,最hou点击run(如下图)。

运行后会有测试结果文件如下图

5 在jenkins 运行性能测试脚本并配置测试结果

在jenkins上安装如下插件:

Maven Integration plugin Maven,用于jenkins可以创建maven job

Git plugin ,用于从github下载性能测试的代码;

Performance plugin ,用于显示性能报告;

HTML Publisher plugin ,用于显示相关接口测试结果的报告。

在jenkins创建maven job

在jenkins上配置运行脚本

在jenkins上配置测试结果报告

  • 在jenkins 配置jdk和maven路径。
  • 配置完了,点击build now,便开始运行,运行结果如下图:

总之:根据上面的步骤我们很容易就完成了对接口性能测试的全自动化过程!

ps:

关于显示测试结果:

  1. 如在jenkins使用html publisher查看报告时,发现显示不美观,不全的现象,很多东西显示不了,

解决这个问题可以在jenkins系统管理中输入以下脚本运行,就可以解决这个问题了

复制代码
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")复制代码

2.html结果好多为空,请把jmeter.property的相应的false改为true。 3.测试报告出现NaN 请在pom.xml里加上 using XSLT 2.0 依赖。


END绵薄之力

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
纳米软件3 小时前
干货分享:服务器电源动态负载测试(Dynamic Load)的示波器抓波与参数设置实战
自动化测试·ate测试·ate测试系统·电子测试测量·电子测试工具
自强的小白10 小时前
maven高级(聚合和私服)以及私服的上传和下载
java·maven
harmful_sheep15 小时前
maven多版本包导致java.lang.NoClassDefFoundError
java·maven
回眸不遇17 小时前
类型的区别和应用场景 nested 每个对象独立存储为隐藏的子文档 适合存储数组 查询的时候有特定的语法 nested查询 且字段要 ...
运维·jenkins
X1A0RAN2 天前
容器化部署 Jenkins 教程
运维·docker·jenkins
程序员三藏2 天前
自动化测试详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
BullSmall2 天前
jenkins 全局工具变更后,构建的任务为什么没有刷新过来
运维·jenkins
BullSmall2 天前
报错 libatomic.so.1: No such file or directory
jenkins
ji_shuke2 天前
从零深入:基于 Playwright + Pytest + Allure 的企业级 Web 端到端自动化测试框架实战
前端·自动化测试·docker·jenkins·pytest·allure·playwright