域名

为JMeter用户和测试者准备的六种Docker镜像

时间:2010-12-5 17:23:32  作者:数据库   来源:数据库  查看:  评论:0
内容摘要:【.com快译】众所周知,一套好的容器会像一把瑞士军刀那样,有着一整套非常实用的工具集可供使用。如果您是一名Apache JMeter™和Docker的用户,那么拥有一套可用于性能测试的Docker镜

【.com快译】众所周知,户和一套好的测试容器会像一把瑞士军刀那样,有着一整套非常实用的准种工具集可供使用。如果您是户和一名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。测试

1. 无GUI的准种JMeter(https://hub.docker.com/r/vmarrazzo/jmeter/)

JMeter镜像能够创建一个无GUI的JMeter执行容器。通过JMeter镜像,用户没必要再去设置诸如Java虚拟机和属性文件的环境,而只需要专注于创建测试脚本和测试资源(如数据文件)便可。

由于去除了各种GUI、文档和插件(当然您可以自行添加),JMeter镜像显得十分轻巧,您可以在需要运行JMeter时快速、服务器托管便捷地使用到它。

我自行开发了一个JMeter镜像,它不但功能丰富,而且灵活地适用于各种JMeter的测试项目:

轻量级 - 基于Alpine Linux(译者注:是由社区开发的、面向安全应用的轻量级Linux发行版)和OpenJDK,只有94Mb 支持Apache JMeter 4.0 – 这是JMeter的最新版本 插件可扩展性 - 您可以动态地通过Docker的卷(volume),向容器的执行添加各种插件 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 

2. InfluxDB(https://hub.docker.com/_/influxdb/)和Grafana(https://hub.docker.com/r/grafana/grafana/)

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  --rm 是在完成后自动删除容器,因此在重新启动期间并不会保留必要的容器信息 --name 是正运行中的容器名称,可以在Docker网络中被用作域名 --dit 使用本地shell在后台运行容器,也能被诸如远程ssh命令行所使用 --net 分配一个由Docker处理的高防服务器虚拟网络 -e 向最近创建的容器传递环境变量。我们在此做了如下配置: INFLUXDB_DB - 本地数据库名称 INFLUXDB_ADMIN_ENABLED、INFLUXDB_ADMIN_USER和INFLUXDB_ADMIN_PASSWORD – 为admin配置文件配置可用性 INFLUXDB_USER和INFLUXDB_USER_PASSWORD - 配置供Grafana使用的、标准的用户配置文件 -v 在主机上分配一个就算容器重启,也仍然存在的逻辑卷。使用该卷,我们可以为必要的数据限制磁盘空间

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  --rm 是在完成后自动删除容器,因此在重新启动期间并不会保留必要的容器信息 --name 是正运行中的容器名称,可以在Docker网络中被用作域名 --dit 使用本地shell在后台运行容器,也能被诸如远程ssh命令行所使用 --net 分配一个由Docker处理的虚拟网络 -e 传递GF_SECURITY_ADMIN_PASSWORD,即Grafana UI的密码 -v 在主机上分配一个就算容器重启,也仍然存在的逻辑卷。使用该卷,我们可以为必要的数据限制磁盘空间

当该容器运行时,我们可以将Grafana的配置作为数据源,来分配给InfluxDB执行。

后台监听器(Backend Listener,请参见:https://jmeter.apache.org/usermanual/component_reference.html#Backend_Listener)负责InfluxDB的具体实施,它可以执行与JMeter的集成。所以在测试执行JMeter,上传其统计信息到InfluxDB时,以及用Grafana完成测试之后,我们可以按需导出各种报告。

3.Selenium(https://hub.docker.com/u/selenium/)

Selenium镜像提供了一个现成的解决方案,以提高自动化的Web浏览器测试。Selenium虽然没有独立的镜像,但是它提供了适用于不同运行模式的多种镜像(如:Selenium Hub和Selenium Node)。

这些镜像可以轻松地与容器化的JMeter相集成,不过需要具备如下两个前提条件:

为运行中的JMeter安装 JMeter的WebDriver插件,请参见:https://www.blazemeter.com/blog/mixing-selenium-into-your-load-scenario?utm_source=blog&utm_medium=BM_blog&utm_campaign=top-6-docker-images-for-jmeter-users-and-performance-testers 将JMeter的脚本配置为RemoteWebDriver

如下命令可以快速地创建一个容器,以供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 

4.Jenkins-CI(https://hub.docker.com/r/jenkins/jenkins/)

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  -d 分离模式 -v 安装从主机处挂接的一个卷,并在容器重启时保留任务的配置 -p 导出Jenkins-CI UI用于监听主机的端口信息

由于没有Docker的卷,其配置文件夹在容器停止后将不复存在。因此为了保存Jenkins-CI的配置数据(或是在版本控制工具中进行跟踪),我们需要在容器和主机之间对卷进行配置。

Jenkins-CI可以通过如下两种方式来管理JMeter的执行:

通过jmeter-performance-plugin,在Jenkins-CI所运行的相同容器中执行JMeter,具体请参见:https://www.blazemeter.com/blog/how-to-use-the-jenkins-performance-plugin?utm_source=blog&utm_medium=BM_blog&utm_campaign=top-6-docker-images-for-jmeter-users-and-performance-testers 调用远程命令执行,以便另一个容器可以处理JMeter的执行

在通过其他工具从同一容器中执行JMeter时,您会碰到的唯一限制便是自己的资源。不过如果您能够使用一个额外的容器,则会简化资源处理的相对成本。

5.Taurus(https://hub.docker.com/r/blazemeter/taurus/)

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  --rm 在执行结束后删除容器的数据 -v(第一个) 将Taurus脚本卷挂载到主机上,并共享输入脚本 -v(第二个) 将Taurus的各个工件挂载到主机上,并共享工件的输出

6.注册服务器(https://docs.docker.com/registry/deploying/)

Docker注册服务器是一个用于存储各种镜像的本地镜像库。我们可以用它来集中那些被频繁使用的Docker镜像。籍此,您可以快速地搭建自己的工作网络,并大幅减少在获取镜像上所花费的时间。这是一款官方的Docker镜像,因此它作为标准化的Docker组件被官方支持和文档化。另外,它的定期更新不会给项目带来任何风险。

如下命令可以创建一个运行的容器,以便成为我们工作网络中的一个存储库。 

docker run -d --rm \  -p 5000:5000 \  -v $REGISTRY_VOLUME:/var/lib/registry \  --restart=always \  --name registry \  registry:2  -p 发布主机上的工作端口 --rm 在终止时移除容器的信息 -v 将卷与本地机器相连接,为存储在Docker镜像里的数据添加一个配置文件 --restart 用于在终止的情况下,更改容器的行为。在我的例子中,我将restart设为常规政策 --name 容器名

一个配置好的容器服务能够在较短的时间内,以推或拉的方式按需提供一台存储服务器。

如上所述,本文讨论了可供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

【译稿,合作站点转载请注明原文译者和出处为.com】

copyright © 2025 powered by 益强资讯全景  滇ICP备2023006006号-31sitemap