本文为在霍格沃兹测试开发学社中学习到的一些技术,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~
霍格沃兹启发
技术分享 | Jenkins 如何参数化job ? 性能课程-电商压测实战
jmeter +jenkins 实现压测自动化
- 霍格沃兹启发
- 一、shell脚本实现jmeter压测自动化
- 1.1 编写jmeter脚本
- 1.2 编写shell脚本
- 二、jenkins持续集成
- 2.1 shell脚本上传码云
- 2.2 jenkins创建任务
- 三、Jenkins参数化构建
- 3.1参数化构建过程->文件参数
- shell脚本做如下的调整:
一、shell脚本实现jmeter压测自动化
1.1 编写jmeter脚本
1.2 编写shell脚本
#!/usr/bin/env bash
# 压测脚本模板中设定的压测时间为60s
export jmx_template="demo"
export suffix=".jmx"
export jmx_template_filename="${jmx_template}${suffix}"
export os_type=`uname`
export jmxFile="jmx"
export jtlFile="jtl"
echo "自动化压测开始"
# 压测并发数列表 ,用来替换jmeter脚本中的设置的thread_num 变量
thread_number_array=( 10 11)
for num in "${thread_number_array[@]}"
do
# 生成对应压测线程的jmx文件
export jmx_filename="${jmxFile}/${jmx_template}_${num}${suffix}"
export jtl_filename="${jtlFile}/test_${num}.jtl"
export web_report_path_name="web_report_${num}"
# 把历史重复的文件删除
rm -f ${jmx_filename} ${jtl_filename}
rm -rf ${web_report_path_name}
cp ${jmx_template_filename} ${jmx_filename}
echo "生成jmx压测脚本 ${jmx_filename}"
if [[ "${os_type}" == "Darwin" ]]; then
# thread_num 为jmx文件中需要替换的关键字
sed -i "" "s/thread_num/${num}/g" ${jmx_filename}
else
sed -i "s/thread_num/${num}/g" ${jmx_filename}
fi
# jmeter 静默压测
echo "静默压测_${num}"
jmeter -n -t ${jmx_filename} -l ${jtl_filename}
# 生成web压测报告
echo "生成web压测报告_${num}"
jmeter -g ${jtl_filename} -e -o ${web_report_path_name}
echo "jmeter -g ${jtl_filename} -e -o ${web_report_path_name}"
done
echo "自动化压测全部结束"
二、jenkins持续集成
2.1 shell脚本上传码云
shell脚本上传码云🐜,在此不再讲述
2.2 jenkins创建任务
jenkins-持续集成-创建job
三、Jenkins参数化构建
在上述的方法中,在脚本中写死指定了执行的线程数量,如图所示是 先执行10个线程,之后再执行11个线程。在实际的工作中,线程数量往往是不断变动的,我们总不能每次都修改脚本,上传git,拉取构建吧?!
Jenkins参数化构建
3.1参数化构建过程->文件参数
- shell脚本中的$params 是上一个步骤中填写的参数名称
shell脚本做如下的调整:
原头部:
调整为:
# s* 是执行shell脚本时传递进来的参数
for num in $*;
do
echo ${num}
- 构建执行
- 构建结果
只需Docker,环境问题再也不是测开路上的『坑』