众所周知,一套好的容器会像一把瑞士军刀那样,有着一整套非常实用的工具集可供使用。如果您是一名Apache JMeter™和Docker的用户,那么拥有一套可用于性能测试的Docker镜像和容器是非常必要的。本文将向您推荐6种可用于性能测试的Docker镜像。
在开始之前,为了简化维护、隔离系统、并提高安全性,请您直接通过Docker来安装这些工具,而不要将它们安装到您的计算机环境中。你可以通过链接:https://www.blazemeter.com/blog/make-use-of-docker-with-jmeter-learn-how?utm_source=blog&utm_medium=BM_blog&utm_campaign=top-6-docker-images-for-jmeter-users-and-performance-testers,来了解更多如何在本地安装Docker。
JMeter镜像能够创建一个无GUI的JMeter执行容器。通过JMeter镜像,用户没必要再去设置诸如Java虚拟机和属性文件的环境,而只需要专注于创建测试脚本和测试资源(如数据文件)便可。
由于去除了各种GUI、文档和插件(当然您可以自行添加),JMeter镜像显得十分轻巧,您可以在需要运行JMeter时快速、便捷地使用到它。
我自行开发了一个JMeter镜像,它不但功能丰富,而且灵活地适用于各种JMeter的测试项目:
下面让我们来看几个例子:
下面示例的命令是操纵一个容器来执行某个jmx脚本。注意该jmx脚本必须在与容器相同的机器上被执行。在测试完毕后,容器会停止下来,并在执行机上留下报告和各种日志文件。
export timestamp=$(date +%Y%m%d_%H%M%S) && \
export volume_path=<where files are on host> && \
export jmeter_path=/mnt/jmeter && \
docker run \
--volume "${volume_path}":${jmeter_path} \
jmeter \
-n <any sequence of jmeter args> \
-t ${jmeter_path}/<jmx_script> \
-l ${jmeter_path}/tmp/result_${timestamp}.jtl \
-j ${jmeter_path}/tmp/jmeter_${timestamp}.log
第二命令是执行一个作为客户端的JMeter容器,以传递要执行的脚本。其中参数“-R”传递的是JMeter服务器实例的IP地址。
docker run \
--net $TEST_NET --ip $CLIENT_IP \
-v "${volume_path}":${jmeter_path} \
--rm \
jmeter \
-n -X \
-Jclient.rmi.localport=7000 \
-R $(echo $(printf ",%s" "${SERVER_IPS[@]}") | cut -c 2-) \
-t ${jmeter_path}/<jmx_script> \
-l ${jmeter_path}/client/result_${timestamp}.jtl \
-j ${jmeter_path}/client/jmeter_${timestamp}.log
InfluxDB和Grafana镜像都提供了一种开源的、时序的数据库功能。这两种功能强大的Web工具能够收集结构化的数据,并进行分析。它们既可以被放在一起使用,又可以被单独使用。
每个InfluxDB数据集都会包含几个由字段集和时间戳组成的“键-值”对。InfluxDB没有外部依赖性,却能提供一个类似于SQL语言的、内置的、以时间为中心(time-centric)的功能。该组件可以被用于收集JMeter的统计数据。
以下命令是在一个定制的Docker网络中执行InfluxDB容器。
docker run --rm \
--name influxdb \
-dit \
--net $TIME_SERIES_NET \
-e INFLUXDB_DB=db0 \
-e INFLUXDB_ADMIN_ENABLED=true \
-e INFLUXDB_ADMIN_USER=admin \
-e INFLUXDB_ADMIN_PASSWORD=passw0rd \
-e INFLUXDB_USER=grafana \
-e INFLUXDB_USER_PASSWORD=dbpassw0rd \
-v $INFLUXDB_VOLUME:/var/lib/influxdb \
influxdb
Grafana则是用于数据分析和导出的强大工具。Grafana并不直接连到JMeter,但它可以通过Docker被加到我们的进程中。
如下命令可以执行Grafana容器:
docker run --rm \
--name=grafana \
-dit \
--net $TIME_SERIES_NET \
-p 3000:3000 \
-e GF_SECURITY_ADMIN_PASSWORD =adminpassw0rd \
-v $GRAFANA_VOLUME:/var/lib/grafana \
grafana/grafana
当该容器运行时,我们可以将Grafana的配置作为数据源,来分配给InfluxDB执行。
后台监听器(Backend Listener,请参见:https://jmeter.apache.org/usermanual/component_reference.html#Backend_Listener)负责InfluxDB的具体实施,它可以执行与JMeter的集成。所以在测试执行JMeter,上传其统计信息到InfluxDB时,以及用Grafana完成测试之后,我们可以按需导出各种报告。
Selenium镜像提供了一个现成的解决方案,以提高自动化的Web浏览器测试。Selenium虽然没有独立的镜像,但是它提供了适用于不同运行模式的多种镜像(如:Selenium Hub和Selenium Node)。
这些镜像可以轻松地与容器化的JMeter相集成,不过需要具备如下两个前提条件:
如下命令可以快速地创建一个容器,以供Selenium测试终端(浏览器+驱动)。在该测试中,由于选择了Selenium的调试镜像,我们可以通过VNC协议来观察测试的执行。
docker run \
-d -p ${port4Driver}:4444 -p ${port4VNC}:5900 \
--shm-size=2g \
selenium/standalone-chrome-debug:3.14.0-beryllium
#### OR
docker run \
-d -p ${port4Driver}:4444 -p ${port4VNC}:5900 \
--shm-size=2g \
selenium/standalone-firefox-debug:3.14.0-beryllium
Jenkins镜像通过与现有的、基于Docker的架构相集成,以实现构建上的自动化。Jenkins镜像能够广泛地被社区所支持,并定期被更新。Jenkins-CI常被作为服务器端应用运行起来,以管理许多不同的任务。Jenkins-CI可以管理JMeter测试脚本的调度、执行和结果的历史信息。
如下命令可运行一个Jenkins-CI容器:
docker run \
-d \
-v ${jenkins_home}:/var/jenkins_home \
-p 8080:8080 \
jenkins/jenkins:lts
由于没有Docker的卷,其配置文件夹在容器停止后将不复存在。因此为了保存Jenkins-CI的配置数据(或是在版本控制工具中进行跟踪),我们需要在容器和主机之间对卷进行配置。
Jenkins-CI可以通过如下两种方式来管理JMeter的执行:
在通过其他工具从同一容器中执行JMeter时,您会碰到的唯一限制便是自己的资源。不过如果您能够使用一个额外的容器,则会简化资源处理的相对成本。
Taurus镜像运行的是开源的Taurus。它自动、且恰当地包装了JMeter、Gatling(https://gatling.io/)、Locust.io(https://locust.io/)、Grinder(http://grinder.sourceforge.net/)和Selenium等工具。因此该镜像包括了所有必要的依赖项,同时能够定期提供更新与支持,让用户能够专注于自身的测试。
如下命令可以用来运行Taurus。
docker run \
--rm \
-v ${scripts_directory}:/bzt-configs \
-v ${artifacts_directory}:/tmp/artifacts \
blazemeter/taurus
Docker注册服务器是一个用于存储各种镜像的本地镜像库。我们可以用它来集中那些被频繁使用的Docker镜像。籍此,您可以快速地搭建自己的工作网络,并大幅减少在获取镜像上所花费的时间。这是一款官方的Docker镜像,因此它作为标准化的Docker组件被官方支持和文档化。另外,它的定期更新不会给项目带来任何风险。
如下命令可以创建一个运行的容器,以便成为我们工作网络中的一个存储库。
docker run -d --rm \
-p 5000:5000 \
-v $REGISTRY_VOLUME:/var/lib/registry \
--restart=always \
--name registry \
registry:2
一个配置好的容器服务能够在较短的时间内,以推或拉的方式按需提供一台存储服务器。
如上所述,本文讨论了可供JMeter性能测试的一些重要的Docker镜像。如果您愿意,可以在创建好了自己的JMX文件之后,将其上传到BlazeMeter(译者注:是一个连续性测试平台,请参见http://info.blazemeter.com/testing-landing-page2?utm_source=blog&utm_medium=BM_blog&utm_campaign=top-6-docker-images-for-jmeter-users-and-performance-testers),以获取可扩展性、高级的分析和各种协作能力。
原文标题:Top 6 Docker Images for JMeter Users and Performance Testers,作者:Vincenzo Marrazzo
原文转自:developer.51cto.com/art/201811/587041.htm