51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2941|回复: 2
打印 上一主题 下一主题

Jenkins中集成jmeter-maven插件

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-19 14:27:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
第一步.先在maven工程中单独使用jmeter-maven插件0.环境

    Windows7 64bit
    SUN JDK 1.7 64bit
    eclipse v3.7
    m2e v1.0.100.20110804-1717
    eclipse中外挂maven 3.02

      注意: 由于jmeter-maven插件运行时自动会引入jmeter所需的类库,所以机器上不需要单独安装jmeter。

1.在POM.xml文件加入
  1. <build>
  2.         ...
  3.         <plugins>
  4.                 <plugin>
  5.                     <groupId>com.lazerycode.jmeter</groupId>
  6.                     <artifactId>jmeter-maven-plugin</artifactId>
  7.                     <version>1.8.2-SNAPSHOT</version>
  8.                     <configuration>
  9.                             <resultsFileFormat>xml</resultsFileFormat>
  10.                             <ignoreResultFailures>true</ignoreResultFailures>
  11.                         <testResultsTimestamp>false</testResultsTimestamp>
  12.                         </configuration>
  13.                     <executions>
  14.                         <execution>
  15.                             <id>jmeter-tests</id>
  16.                             <phase>verify</phase>
  17.                             <goals>
  18.                                 <goal>jmeter</goal>
  19.                             </goals>
  20.                         </execution>
  21.                     </executions>
  22.         <plugins>
  23.         ...
  24. <build>
复制代码
如果出现找不到构件(artifact)的情况,考虑切换一下Maven Repository,最直接的方法是在POM中加入类似如下代码。
  1. <pluginRepositories>
  2.                 <pluginRepository>
  3.                         <id>Codehaus repository</id>
  4.                         <url>http://repository.codehaus.org/</url>
  5.                         <releases>
  6.                                 <enabled>true</enabled>
  7.                                 <updatePolicy>always</updatePolicy>
  8.                         </releases>
  9.                         <snapshots>
  10.                                 <enabled>true</enabled>
  11.                                 <updatePolicy>always</updatePolicy>
  12.                         </snapshots>
  13.                 </pluginRepository>
  14.         </pluginRepositories>
复制代码
2.新建scr/test/jmeter目录(这是jmeter-maven插件默认找jmeter的jmx文件的位置,若要更改在POM中作配置),把已经测试好的jmeter文件如test1.jmx拷贝进去。

在Eclipse中Run Configurations -> Maven Build  -> new中Goals输入框填入 verify,确定。

笔者在运行过程曾遇到异常

  1. [ERROR] Failed to execute goal com.lazerycode.jmeter:jmeter-maven-plugin:1.8.1:jmeter (jmeter-tests) on project mytodo: Execution jmeter-tests of goal com.lazerycode.jmeter:jmeter-maven-plugin:1.8.1:jmeter failed. NullPointerException -> [Help 1]
  2. org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.lazerycode.jmeter:jmeter-maven-plugin:1.8.1:jmeter (jmeter-tests) on project mytodo: Execution jmeter-tests of goal com.lazerycode.jmeter:jmeter-maven-plugin:1.8.1:jmeter failed.
  3.         at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:225)
  4.         at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
  5.         at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
  6.         at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
  7.         at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
  8.         at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
  9.         at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
  10.         at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)
  11.         at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
  12.         at org.apache.maven.cli.MavenCli.execute(MavenCli.java:534)
  13.         at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
  14.         at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
  15.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  16.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  17.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  18.         at java.lang.reflect.Method.invoke(Method.java:601)
  19.         at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
  20.         at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
  21.         at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
  22.         at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
  23. Caused by: org.apache.maven.plugin.PluginExecutionException: Execution jmeter-tests of goal com.lazerycode.jmeter:jmeter-maven-plugin:1.8.1:jmeter failed.
  24.         at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:116)
  25.         at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
  26.         ... 19 more
  27. Caused by: java.lang.NullPointerException
  28.         at com.lazerycode.jmeter.JMeterAbstractMojo.setJMeterResultFileFormat(JMeterAbstractMojo.java:382)
  29.         at com.lazerycode.jmeter.JMeterMojo.execute(JMeterMojo.java:43)
  30.         at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:107)
  31.         ... 20 more
复制代码

查找资料未解决后,找到com.lazerycode.jmeter.JMeterAbstractMojo类第382行中,setJMeterResultFileFormat中对应的代码:

  1. protected void setJMeterResultFileFormat() {
  2.         if (resultsFileFormat.toLowerCase().equals("csv")) {
  3.                 propertiesJMeter.put("jmeter.save.saveservice.output_format", "csv");
  4.                 resultsOutputIsCSVFormat = true;
  5.         }
  6.         else {
  7.                 propertiesJMeter.put("jmeter.save.saveservice.output_format", "xml");
  8.                 resultsOutputIsCSVFormat = false;
  9.         }
  10. }
复制代码

断定是propertiesJMeter为null所致,为什么这个对象没初始化,答案目前不得而知。于是去github把jmeter-maven插件最新代码clone到本地,使用new初始化propertiesJMeter对象,在eclipse中重新打包,得到jmeter-maven-plugin-1.8.2-SNAPSHOT.jar,再把POM.xml中jmeter-maven-plugin插件版本从1.8.1更换为1.8.2-SNAPSHOT,再次运行mvn verify ,就看到打印出Build Success字样。

第二步.在Jenkins中集成使用jmeter-maven插件0.环境

    CentOS Linux 6.0 x64
    SUN JDK 1.7 64bit
    Jenkins ver. 1.529

1.在安装Jenkins中安装Performance Plugin

2.在需要集成jmeter-maven插件的工程配置页面,构建后操作加入一个Publish Performance test result report,如图所示

说明:Performance report是指展现的报告种类,目前支持JMeter和JUnit
              如果指定为JMeter需要指出JMeter测试结果集目录,**代表pom.xml所在目录
        Performance threshold是指标记本次构建为Unstable和Failed时所需的最低测试错误百分比

3.在MAVEN Build的Goals中填入verify。
注意事项:如果JMeter性能测试比较耗时,就不能把它放在这里执行,因为它会导致Jenkins构建时间过长。对此,可提前手工使用命令执行,例如:
  1. $ jmeter -n -p user.properties -t my_test_plan.jmx -l my_results.jtl
复制代码

也可把它做成Linux Crontab脚本。还有一种方式是,利用Jenkins的周期性构建功能,勾选Build periodically复选框,设定一个定时执行间隔。

4.执行Jenkins构建,观察结果。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-26 20:16 , Processed in 0.068651 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表