Jenkins+Jmeter+Docker实现性能测试自动化

一、背景

通常做性能测试,都是按照以下流程进行:编写jmeter脚本-搭建测试环境-执行脚本-归纳测试结果。后三个步骤基本都是重复操作,完全可以通过自动化来实现,以提高测试效率。
本文介绍了如何通过Jenkins+Jmeter+Docker实现性能测试自动化。思路是先把Jmeter和依赖的JDK环境通过Docker做成镜像,通过Jenkins实现jmeter脚本拉取、环境搭建和脚本执行。至于测试结果监控,推荐使用Grafana+InfluxDB+Jmeter的监控平台,也可使用Jenkins的插件做结果展示。

二、实现步骤

2.1环境搭建

首先制作性能测试环境的镜像。
编写Dockerfile

FROM java:8

ENV http_proxy ""
ENV https_proxy ""

RUN mkdir /jmeter \
  && mkdir -p /jmeter/jmx \
  && mkdir -p /jmeter/report
RUN cd /jmeter

ENV JMETER_VERSION=5.2.1
ENV JMETER_HOME=/jmeter/apache-jmeter-${JMETER_VERSION}
ENV JMETER_PATH=${JMETER_HOME}/bin:${PATH}
ENV PATH=${JMETER_HOME}/bin:${PATH}

COPY apache-jmeter-${JMETER_VERSION}.tgz /jmeter

RUN cd /jmeter \
    && tar xvf apache-jmeter-${JMETER_VERSION}.tgz \
    && rm apache-jmeter-${JMETER_VERSION}.tgz

因为公司不能用外网,所以需要提前下好jmeter的安装包,以及java8的镜像。
把jmeter的安装包和Dockerfile文件放在同一个目录下,使用命令docker build -t jmeter5:v1 .制作镜像。

镜像.png

镜像制作好后可以用将镜像上传到公司的私有仓库,就可以实现自动环境搭建,而不需要手动拷贝、加载镜像了。

2.2 Jenkins配置

jenkins新建一个流水线项目。
pipeline命令:

pipeline {
    // 在节点上运行
    agent {label "node1"}

    stages {
        stage('执行测试') {
            agent {
                docker { image 'jmeter5:v1'
                            label "node1"
                            args "-v /jmeter/jmx:/jmeter/jmx"
                        }
            }
            steps {
                sh 'jmeter -n -Jthreadcount=5 -t jmeter/jmx/test.jmx -l /jmeter/report/result.jtl'
            }
        }
    }
}

pipeline语法说明:

  • agent:agent部分指定了整个流水线或特定的部分, 将会在Jenkins环境中执行的位置。本项目中Jenkins使用的集群部署方式,我指定本脚本在代理节点node1上执行。
  • agent-docker:表示使用给定的容器执行流水线或stage。
  • agent-docker-image:指定要使用的容器的镜像名,如果该节点没有此镜像,则会自动去拉取该镜像。
  • agent-docker-label:指定使用固定节点上的容器
  • agent-docker-args:运行容器的附加命令,这里我将容器目录挂在到节点目录上,只要将jmeter脚本拉取或拷贝到该节点目录下,容器内就能直接访问该脚本。

jmeter的命令行调用下次再说。

致此,整个搭建过程就结束了。使用时只需在Jenkins点击构建即可完成整个性能测试流程。

优化方向

其实在做性能测试的过程中是会修改脚本的,一般是启用、禁用某几个模块。如果可以直接在Jenkins上操作Jmeter的脚本就更方便了。目前想到的实现方法有两个,一个是直接在pipeline上定义Jmeter的模块作为参数,构建时用户可选择开启或关闭模块,之后通过代码修改脚本。另一种是直接做一个Jenkins插件,读取脚本的层级结构,再回显到Jenkins上。用户依然是通过勾选来选择自己要测试的部分。

你可能感兴趣的:(Jenkins+Jmeter+Docker实现性能测试自动化)