InfluxDB&Grafana&Shell性能自动化测试平台搭建

安装Docker

MAC平台
Windows平台
Ubuntu平台
Centos7平台

安装并启用influxDB

安装influxDB
1
2
3
4
5
6
7
8
9
10
# 安装
docker install influxdb
# 启动容器
docker run -d -p 8086:8086 -p 8083:8083 --name=jmeterdb influxdb
# 进入容器内部
docker exec -it jmeterdb bash
# 进入influxdb命令行
flux
# 创建jmeter数据库
create database jmeter;
Jmeter设置

添加Backend Listener【后端监听器】

只需修改三个字段:

  • influxdbUrl:修改为实际的influxdb地址
  • application:应用名称
  • testTitle:测试标题
检查jmeter和数据库是否正常连接

jmeter中添加Http请求,并执行测试
influxdb后台中查询是否有产生数据:

1
2
3
4
5
6
7
8
# 进入容器内部
docker exec -it jmeterdb bash
# 进入influxdb命令行
flux
# 使用jmeter数据库
use jmeter
# 查询数据
select * from jmeter

性能监控平台Grafana部署及初始化

grafana部署

Grafana官网

1
2
3
4
# 安装
docker install grafana/grafana
# 启动容器
docker run -d -p 3000:3000 --name=jmeterGraf grafana/grafana
平台初始化设置
  1. 本地登录地址:http://localhost:3000
  2. 默认用户名/密码:admin/admin
  3. 在Web平台中添加influxdb数据库
  4. JMeter Dashboard设置 填入其中的JSON内容

使用Grafana平台进行自动化压测实践

  1. 对被测的jmeter脚本的线程数进行参数化设置
    该设置主要用于在后面脚本中进行线程数的修改,从而达到执行不同并发下的测试

  2. 测试脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #!/usr/bin/env bash
    export jmx_template="jmeterScript"
    export suffix=".jmx"
    export jmx_template_filename="${jmx_template}${suffix}"
    export os_type=`uname`

    # 需要在系统变量中定义jmeter根目录的位置,如下
    export jmeter_path="/opt/apache-jmeter/"

    # 清空nohup.out
    cat /dev/null > nohup.out

    # 强制杀掉JMeter进程
    killJMeter()
    {
    pid=`ps -ef|grep jmeter|grep java|awk '{print $2}'`
    echo "jmeter Id list :$pid"
    if [[ "$pid" = "" ]]
    then
    echo "no jmeter pid alive"
    else
    kill -9 $pid
    fi
    }

    # 设置执行5次测试,每次的线程数分别是【10、20、30、40、50】
    # 每次测试的持续时间,由jmeter脚本中的调度器【Scheduler】的持续时间(秒)【Duration(seconds)】来定
    thread_number_array=(10 20 30 40 50)
    for num in "${thread_number_array[@]}"
    do
    # 生成对应压测线程的jmx文件
    export jmx_filename="${jmx_template}_${num}${suffix}"
    export jtl_filename="test_${num}.jtl"

    rm -f ${jmx_filename} ${jtl_filename}
    cp ${jmx_template_filename} ${jmx_filename}
    echo "生成jmx压测脚本 ${jmx_filename}"

    if [[ "${os_type}" == "Darwin" ]]; then
    # Mac下执行该语句
    sed -i "" "s/thread_num/${num}/g" ${jmx_filename}
    else
    # Linux下执行该语句
    sed -i "s/thread_num/${num}/g" ${jmx_filename}
    fi

    # JMeter 静默压测
    nohup ${jmeter_path}/bin/jmeter -n -t ${jmx_filename} -l ${jtl_filename} &
    sleep 65
    killJMeter
    rm -f ${jmx_filename}
    done
    echo "自动化压测全部结束"
  3. 测试结果的展现