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"
])
}
}
}
}