方式:1.jmeter脚本放在负载机中,然后Jenkins写shell命令
2.Jmeter脚本放在maven工程中,然后Jenkins执行maven verify,执行pom.xml
采用第二种方式,发现坑很多,记录一下。
参考资料:https://blog.csdn.net/tomoya_chen/article/details/72677336
https://blog.csdn.net/wanglin_lin/article/details/77963931
由于beanshell脚本依赖json.jar包,所以需要在pom.xml中添加json包,可是执行时会报错class:JsonObject not found in namespace,百度发现,json包还依赖common-beanutils,common-logging,commons-collections,commons-lang,net.sf.ezmorph。所以在pom.xml中都添加这几个包:
配置pom.xml:
UTF-8
${project.build.directory}\jmeter\results
${env.WORKSPACE}/Report/${env.BUILD_ID}/html
TestReport
junit
junit
3.8.1
test
org.json
json
20160810
commons-beanutils
commons-beanutils
1.7.0
commons-logging
commons-logging
1.0.3
commons-collections
commons-collections
3.2
commons-lang
commons-lang
2.1
net.sf.ezmorph
ezmorph
1.0.2
com.lazerycode.jmeter
jmeter-maven-plugin
2.1.0
xml
true
false
${jmeter.result.jtl.dir}
jmeter-tests
verify
jmeter
org.codehaus.mojo
xml-maven-plugin
1.0-beta-3
verify
transform
${jmeter.result.jtl.dir}
src\test\resources\jmeter-results-detail-report_21.xsl
${jmeter.result.html.dir}
html
net.sf.saxon
saxon
8.7
配置完成,执行,还是报错class:JsonObject not found in namespace
百度下,有另一种方式:将这几个包放在target/jmeter/lib/ext目录下,执行通过。
可是,用Jenkins执行时,goals需要填写maven clean,clean表示会清除target目录,这样就行不通了。
百度发现,可以在pom.xml中添加一段代码,将一系列在此插件内列出的artifacts ,将他们copy到一个特殊的地方,重命名或者去除其版本信息。这个可以解决远程仓库存在但是本地仓库不存在的依赖问题,copy操作可以用来将某个(些)maven artifact(s)拷贝到某个目录下。简单来说就是将这几个依赖包copy到特定的目录下(target/jmeter/lib/ext),如下:
org.apache.maven.plugins
maven-dependency-plugin
2.8
package
copy-dependencies
json,commons-beanutils,commons-logging,commons-collections,commons-lang,ezmorph
target/jmeter/lib/ext
完美解决。最终的pom.xml配置:
4.0.0
UTF-8
${project.build.directory}\jmeter\results
${env.WORKSPACE}/Report/${env.BUILD_ID}/html
TestReport
junit
junit
3.8.1
test
org.json
json
20160810
commons-beanutils
commons-beanutils
1.7.0
commons-logging
commons-logging
1.0.3
commons-collections
commons-collections
3.2
commons-lang
commons-lang
2.1
net.sf.ezmorph
ezmorph
1.0.2
com.lazerycode.jmeter
jmeter-maven-plugin
2.1.0
xml
true
false
${jmeter.result.jtl.dir}
jmeter-tests
verify
jmeter
org.codehaus.mojo
xml-maven-plugin
1.0-beta-3
verify
transform
${jmeter.result.jtl.dir}
src\test\resources\jmeter-results-detail-report_21.xsl
${jmeter.result.html.dir}
html
net.sf.saxon
saxon
8.7
org.apache.maven.plugins
maven-dependency-plugin
2.8
package
copy-dependencies
json,commons-beanutils,commons-logging,commons-collections,commons-lang,ezmorph
target/jmeter/lib/ext
Jenkins配置:
由于我Jmeter是4.0.0版本(脚本版本),所以依赖插件jmeter-maven-plugin选择了2.1.0,而Jenkins中,maven的版本得是3.1.1,不然会报错
jmeter-maven-plugin和maven版本不匹配。
邮件配置:
pom.xml配置:
${env.WORKSPACE}/Report/${env.BUILD_ID}/html
因为配置了上面这句话,所以当执行脚本后,会在Jenkins的这个目录下创建Report/buildid/html文件夹,然后把html报告存放在这里。
这个Html directory to archive:是指去哪里取报告,配置报告来源为Report/buildid/html:
构建后操作中Index page[s] 名称与build文件中
html的文件名一致。所以填写*.html
最后会在Jenkins/job/工作目录下创建一个文件夹Report/buildid/html,,然后里面有对应每个脚本的html报告。
然后将这个html报告再
Archiving at PROJECT level /var/jenkins/workspace/job/Report/{buildid}/html to /var/lib/jenkins/jobs/job/htmlreports/HTML_Report中,