Jenkins自动化执行jmeter脚本

方式: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目录,这样就行不通了。

Jenkins自动化执行jmeter脚本_第1张图片

百度发现,可以在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版本不匹配。

Jenkins自动化执行jmeter脚本_第2张图片

邮件配置:

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自动化执行jmeter脚本_第3张图片

 

最后会在Jenkins/job/工作目录下创建一个文件夹Report/buildid/html,,然后里面有对应每个脚本的html报告。

Jenkins自动化执行jmeter脚本_第4张图片

然后将这个html报告再

Archiving at PROJECT level /var/jenkins/workspace/job/Report/{buildid}/html to /var/lib/jenkins/jobs/job/htmlreports/HTML_Report中,

你可能感兴趣的:(jmeter)