本文为在霍格沃兹测试开发学社中学习到的一些技术,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~

霍格沃兹启发

技术分享 | 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脚本

jenkins执行windows bat jenkins执行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执行windows bat jenkins执行jmeter脚本_jmeter_02


Jenkins参数化构建

3.1参数化构建过程->文件参数

jenkins执行windows bat jenkins执行jmeter脚本_shell脚本_03

  • shell脚本中的$params 是上一个步骤中填写的参数名称

shell脚本做如下的调整:

原头部:

jenkins执行windows bat jenkins执行jmeter脚本_自动化_04


调整为:

# s* 是执行shell脚本时传递进来的参数
for num in $*;
do
    echo ${num}
  • 构建执行
  • 构建结果

jenkins执行windows bat jenkins执行jmeter脚本_jenkins_05


只需Docker,环境问题再也不是测开路上的『坑』