【jenkins+jmeter+pipeline】使用pipeline方式,分布式执行jmeter脚本,并生成报告

1、首先准备执行参数

threadsnum---当前并发数(如果是多台slave机运行,最终并发数需要乘以台数)
duration---脚本执行持续时间,单位为秒
jmxname--jmx脚本存放路径
slave1Server---slave1的ip
slave2Server---slave2的ip
MasterServer--master的ip

二、脚本如下

pipeline {
    agent {
        label 'slave1'
    }
    
    environment{
        #定义脚本文件名称
        def ori_jmx_num_filename="/home/apache-jmeter-4.0/jmeterTest/thread_${threadsnum}_${duration}_${jmxname}"
        def jmx_num_filename="/home/apache-jmeter-4.0/jmeterTest/thread_${threadsnum}_${duration}_${jmxname}.jmx"
        #定义报告
        def jtl_filename="/home/apache-jmeter-4.0/jmeterTest/jtl_${threadsnum}_${duration}_${jmxname}.jtl"
        def web_filename="/home/apache-jmeter-4.0/jmeterResult/web_${threadsnum}_${duration}_${jmxname}"
        def jmx_filepath="/home/apache-jmeter-4.0/jmeterTest/${jmxname}.jmx"
    }
    
    
    stages {
            
       stage('kill jmeter') {
           agent {
                label "${MasterServer}"
            }
           steps{
           sh "if (ps -ef| grep java|grep ${jmxname})then (ps -ef| grep java|grep ${jmxname}| awk '{print \$2}'|xargs sudo kill -9) fi"
           sleep(2)
           }
        }
     
     #启动slave上的jmeter-server
    stage('start slave1') {
          agent {
               label "${slave1Server}"
             }
           steps{
           sh "if (ps -ef| grep java|grep jmeter|grep jdk)then (ps -ef| grep java|grep jmeter|grep jdk| awk '{print \$2}'|xargs sudo kill -9) fi"
           sleep(3)
           sh 'nohup /home/apache-jmeter-4.0/bin/jmeter-server &'
           sleep(5)
           }
         }

    stage('start slave2') {
           agent {
                 label "${slave2Server}"
           }
          steps{
        sh "if (ps -ef| grep java|grep jmeter|grep jdk)then (ps -ef| grep java|grep jmeter|grep jdk| awk '{print \$2}'|xargs sudo kill -9) fi"
          sleep(3)
          sh 'nohup /home/apache-jmeter-4.0/bin/jmeter-server &'
           sleep(5)
          }
        }
        
     stage('prepare script') {
           agent {
                label "${MasterServer}"
            }
           steps{
             echo "jmeter脚本准备开始……"
                sh 'sudo rm -rf ${jmx_num_filename} ${jtl_filename} ${web_filename}'
                //生成jmx带并发数的脚本
                sh 'export jmx_num_filename=${jmx_num_filename}'
                //生成一个jtl文件,用来存储执行完脚本数据
                sh 'export jtl_filename=${jtl_filename}'
                //新建一个文件夹存储生成的报告
                sh 'export web_filename=${web_filename}'
                //复制模版脚本到当前
                sh 'sudo cp -f ${jmx_filepath} ${jmx_num_filename}'
                //sed用来动态修改文件的内容,sed -i "" "s/thread_num/${num}/g" ${jmx_num_filename},-i强制修改,thread_num,需要被修改的字符串,${num}需要替换的并发数
                sh 'sudo sed -i "s/num_threads\">.*</num_threads\">${threadsnum}</g" ${jmx_num_filename}'
                sh 'sudo sed -i "s/ramp_time\">.*</ramp_time\">${ramptime}</g" ${jmx_num_filename}'
                sh 'sudo sed -i "s/duration\">.*</duration\">${duration}</g" ${jmx_num_filename}'
                echo "jmeter脚本准备结束……"
           }
        }
        
        stage('execute script'){
          agent {
                label "${MasterServer}"
            }
            steps{
                
            echo "jmeter脚本执行开始……"
            echo "当前执行的脚本是:${jmx_num_filename}"
            //执行静默压测命令,jmeter执行路径执行命令
            sh '/home/apache-jmeter-4.0/bin/jmeter -n -t ${jmx_num_filename} -r -l ${jtl_filename} ${remotes} -e -o ${web_filename}'
            sh 'sudo cp -r ${web_filename} ${WORKSPACE}'
            echo "jmeter脚本执行结束……"
            }
        }
        
   #生成测试报告     
   stage('publish report'){
          agent {
                label "${MasterServer}"
            }
    steps{                
        publishHTML (target: [
        allowMissing: false,
        alwaysLinkToLastBuild: false,
        keepAll: true,
        reportDir: 'web_${threadsnum}_${duration}_${jmxname}',
        reportFiles: 'index.html',
        reportName: "Summary Report"
    ])
        }
    }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值