一、背景
通常做性能测试,都是按照以下流程进行:编写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 .
制作镜像。

镜像制作好后可以用将镜像上传到公司的私有仓库,就可以实现自动环境搭建,而不需要手动拷贝、加载镜像了。
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上。用户依然是通过勾选来选择自己要测试的部分。
网友评论