压测篇04:使用Jenkins执行JMeter脚本

1,524 阅读3分钟

前置步骤:现在小程序还没有上线,直接在线上进行的压测。我们公司有个压测的服务器,使用跳板机登录后选择该服务器,上传脚本至/home/dev_root/qa/jmeter_load_test目录下(专门存放脚本的目录),上传命令为rz,下载命令为sz。(下载文件夹dir里的所有文件:sz dir/*)注:macOS上直接使用rz或者sz指令会卡死,下载shell工具就可以下载

一、Jenkins构建项目

登录web端Jenkins,默认端口8080,点击新建,填写Item名称,选择构建一个自由风格的软件项目,点击ok即创建成功

二、配置项目参数

点击项目名进入该项目,点击配置按钮进入配置页:

  1. 勾选参数化构建过程,点击添加参数,选择所需参数的填写方式,如选择String Parameter对应字符串输入,choice对应下拉框选项,填写 1)自行定义的字段名; 2)如有默认值可填写; 3)添加对字段含义的描述

  2. 点击增加构建步骤,选择Execute shell,添加执行shell脚本

cd /home/dev_root/qa/test_software/apache-jmeter-4.0/bin
if [ -e /home/dev_root/qa/jmeter_load_test/result.jtl ]
then
	rm /home/dev_root/qa/jmeter_load_test/result.jtl
fi

if [ -e /home/dev_root/qa/jmeter_load_test/result ]
then
	rm -r /home/dev_root/qa/jmeter_load_test/result
	mkdir /home/dev_root/qa/jmeter_load_test/result
fi

source /etc/profile

if [[ ${evn_name} == 'Online' ]]
then
	if [[ ${file_name} == 'separate_step' ]]
    then  
	  file='separate_step.jmx'
     elif [[ ${file_name} == 'bigeye' ]]
    then
  	  file='bigeye.jmx'   
    else
	  file='testAi.jmx'	 
    fi
fi
exefile='test_script.jmx'
cp /home/dev_root/qa/jmeter_load_test/${file} /home/dev_root/qa/jmeter_load_test/test_script.jmx
cp /home/dev_root/qa/jmeter_load_test/${exefile} /home/dev_root/qa/jmeter_load_test/${exefile}.tmp

sed -i 's/<stringProp name=\"'ThreadGroup.num_threads\"'>5</<stringProp name=\"'ThreadGroup.num_threads\"'>'${thread_num}'</g' /home/dev_root/qa/jmeter_load_test/${exefile}
sed -i 's/<stringProp name=\"'ThreadGroup.duration\"'>120</<stringProp name=\"'ThreadGroup.duration\"'>'${duration}'</g' /home/dev_root/qa/jmeter_load_test/${exefile}
./jmeter -n -t /home/dev_root/qa/jmeter_load_test/${exefile} -l /home/dev_root/qa/jmeter_load_test/result.jtl -e -o /home/dev_root/qa/jmeter_load_test/result_${BUILD_NUMBER}
cp -r /home/dev_root/qa/jmeter_load_test/result_${BUILD_NUMBER} /home/dev_root/qa/test_software/apache-tomcat-8.5.31/webapps/JmeterTestResult
sleep 3
sed -i 's/<stringProp name=\"'ThreadGroup.num_threads\"'>'${thread_num}'</<stringProp name=\"'ThreadGroup.num_threads\"'>5</g' /home/dev_root/qa/jmeter_load_test/${exefile}
sed -i 's/<stringProp name=\"'ThreadGroup.duration\"'>'${duration}'</<stringProp name=\"'ThreadGroup.duration\"'>120</g' /home/dev_root/qa/jmeter_load_test/${exefile}
cd /home/dev_root/qa/jmeter_load_test
sed "s/JmeterTestResult\/result\/index.html/JmeterTestResult\/result_${BUILD_NUMBER}\/index.html/g" content_bak.html >content.html
python jmeter_mail.py ${to_mails} ${evn_name}
cp /home/dev_root/qa/jmeter_load_test/${exefile}.tmp /home/dev_root/qa/jmeter_load_test/${exefile}
   

其中最关键的是: ./jmeter -n -t jmeter文件名 -l 结果文件 -e -o 结果存放目录

-t : 执行测试文件所在的位置及文件名

-n : 非GUI 模式执行JMeter

-r : 远程将所有agent启动用在分布式测试场景下,不是分布式测试只是单点就不需要-r

-l : 指定生成测试结果的保存文件, jtl 文件格式

-e : 测试结束后,生成测试报告

-o : 指定测试报告的存放位置

-o 指定的文件及文件夹,必须不存在 ,否则执行会失败

以上脚本的功能就是选择所需执行的JMeter脚本,可选择执行环境(evn_name),执行脚本名(file_name),配置最大并发数(thread_num),执行时长(duration)和发送结果的邮件地址(to_mails),这些参数都是在参数化构建中自行定义的。

注:BUILD_NUMBER是Jenkins自带的参数名,Jenkins有哪些参数可以在Execute shell的command框下方点击See the list of available environment variables查看

3、使用Jenkins执行压测脚本

配置完成后,点击Build with Parameters,可配置相应参数,如filename选择自己想要跑的脚本名称,一开始可配置duration为10秒,测试脚本是否可以正常跑起来。

配置完成后点击开始构建。构建过程中可点击当前构建的console output查看实时控制台输出,如有明显问题可随时停止压测。

4、查看结果报告

构建完成后,会自动发送一个测试结果到配置的邮件里(收不到的时候记得去垃圾箱里查看下)

点击“详细日志点击此处”可跳转:http://localhost:8080/JmeterTestResult/result_330/index.html。 330是build号,可手动修改build号查看每次build的结果。 比较重要的指标就是Average:平均耗时和Throughout:吞吐量