【.com快速翻译】众所周知,一个好的容器就像一把瑞士军刀,拥有一套非常有用的工具供其使用。如果你是ApacheJMeter?和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.JMeterwithoutGUI(https://hub.docker.com/r/vmarrazzo/jmeter/)JMeter镜像可以创建一个没有GUI的JMeter执行容器。使用JMeter镜像,用户不再需要搭建Java虚拟机、属性文件等环境,只需专注于创建测试脚本和测试资源(如数据文件)。由于去掉了各种GUI、文档和插件(当然你也可以自己添加),JMeter镜像非常轻量级,当你需要运行JMeter时可以快速方便地使用它。我自己开发了一个JMeter镜像,它不仅功能丰富,而且可以灵活用于各种JMeter测试项目:轻量级——基于AlpineLinuxLinuxdistro)和OpenJDK,只有94Mb支持ApacheJMeter4.0——这是最新版本JMeterPlugin的可扩展性——可以通过Dockervolumes动态添加各种??插件到容器的执行中JMeter命令行——由于镜像不过滤任何JMeter命令参数,所以它可以允许多种运行模式image可以用来搭建容器集群我们来看几个例子:下面的例子命令是操作一个容器执行一个jmx脚本。注意jmx脚本必须和容器在同一台机器上执行。测试完成后,容器会停止,并在执行机器上留下报告和各种日志文件。exporttimestamp=$(date+%Y%m%d_%H%M%S)&&\exportvolume_path=&&\exportjmeter_path=/mnt/jmeter&&\dockerrun\--volume"${volume_path}":${jmeter_path}\jmeter\-n<任何jmeterargs序列>\-t${jmeter_path}/\-l${jmeter_path}/tmp/result_${timestamp}.jtl\-j${jmeter_path}/tmp/jmeter_${timestamp}.log第二条命令是执行一个JMeter容器作为客户端传递要执行的脚本。参数“-R”传递了JMeter服务器实例的IP地址。dockerrun\--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-c2-)\-t${jmeter_path}/\-l${jmeter_path}/client/result_${timestamp}.jtl\-j${jmeter_path}/client/jmeter_${timestamp}.log2。InfluxDB(https://hub.docker.com/_/influxdb/)和Grafana(https://hub.docker.com/r/grafana/grafana/)InfluxDB和Grafana镜像都提供了一个开源的、时间系列数据库功能。这两个强大的网络工具可以收集结构化数据并对其进行分析。它们可以一起使用或单独使用。每个InfluxDB数据集都将包含几个由字段集和时间戳组成的键值对。InfluxDB没有外部依赖性,但提供类似于SQL语言的内置的、以时间为中心的功能。该组件可用于收集JMeter统计信息。以下命令在自定义Docker网络中执行InfluxDB容器。dockerrun--rm\--nameinfluxdb\-dit\--net$TIME_SERIES_NET\-eINFLUXDB_DB=db0\-eINFLUXDB_ADMIN_ENABLED=true\-eINFLUXDB_ADMIN_USER=admin\-eINFLUXDB_ADMIN_PASSWORD=passw0rd\-eINFLUXDB_USER=grafana\-eINFLUXDBv_assDBWORD$FLUXDBv_assDBWORD/VAR_USER/lib/influxdb\influxdb--rm是完成后自动删除容器,所以重启时不会保留必要的容器信息--name是运行容器的名称,可以在Docker网络中用作域名--dit使用本地shell在后台运行容器,也可以被远程ssh等命令使用--net分配由Docker处理的虚拟网络-e将环境变量传递给最近创建的容器。在这里,我们配置了以下内容:INFLUXDB_DB-本地数据库名称INFLUXDB_ADMIN_ENABLED、INFLUXDB_ADMIN_USER和INFLUXDB_ADMIN_PASSWORD-配置管理员配置文件的可用性INFLUXDB_USER和INFLUXDB_USER_PASSWORD-配置标准用户配置文件供Grafana使用-v即使容器重新启动,也会在主机上分配一个配置文件,还有逻辑卷仍然存在。使用此卷,我们可以限制必要数据的磁盘空间。Grafana是一个强大的数据分析和导出工具。Grafana并没有直接连接到JMeter,但是可以通过Docker加入到我们的进程中。以下命令可以执行Grafana容器:dockerrun--rm\--name=grafana\-dit\--net$TIME_SERIES_NET\-p3000:3000\-eGF_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,这是GrafanaUI的密码-v在宿主机上分配一个即使容器重启,它仍然保持存在的逻辑卷。使用此卷,我们可以限制必要数据的磁盘空间。当容器运行时,我们可以使用Grafana的配置作为数据源分配给InfluxDB执行。后端监听器(BackendListener,参见: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虽然没有独立的镜像,但是提供了多种适用于不同运行模式的镜像(例如:SeleniumHub和SeleniumNode)。这些图像可以很容易地与容器化的JMeter集成,但需要以下两个先决条件:为运行的JMeter安装JMeterWebDriver插件,参见: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协议观察测试的执行情况。dockerrun\-d-p${port4Driver}:4444-p${port4VNC}:5900\--shm-size=2g\selenium/standalone-chrome-debug:3.14.0-beryllium####ORdockerrun\-d-p${port4Driver}:4444-p${port4VNC}:5900\--shm-size=2g\selenium/standalone-firefox-debug:3.14.0-beryllium4.Jenkins-CI(https://hub.docker.com/r/jenkins/jenkins/)Jenkins镜像与现有的基于Docker的架构集成以自动构建。Jenkins镜像受到社区的广泛支持并定期更新。Jenkins-CI通常作为服务器端应用程序运行以管理许多不同的任务。Jenkins-CI可以管理JMeter测试脚本的调度、执行和结果历史记录。以下命令可以运行一个Jenkins-CI容器:dockerrun\-d\-v${jenkins_home}:/var/jenkins_home\-p8080:8080\jenkins/jenkins:lts-dseparatemode-vinstallfromthehostAvolume,并保留容器重启时任务的配置-p导出Jenkins-CIUI监听宿主机使用的端口信息由于Docker没有volume,容器重启后其配置文件夹将不存在停了。所以为了保存Jenkins-CI的配置数据(或者在版本控制工具中跟踪),我们需要配置容器和宿主机之间的volume。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/)和工具,例如硒。因此,该镜像包括所有必要的依赖项,同时提供定期更新和支持,让用户专注于自己的测试。以下命令可用于运行Taurus。dockerrun\--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/)Dockerregistry是一个本地存储库,用于存储各种镜像。我们可以用它来集中经常使用的Docker镜像。通过这种方式,您可以快速构建自己的工作网络,并大大减少获取图像所花费的时间。这是一个官方的Docker镜像,因此它被官方支持并记录为一个标准化的Docker组件。此外,它的定期更新不会给项目带来任何风险。以下命令创建一个正在运行的容器作为我们工作网络上的存储库。dockerrun-d--rm\-p5000:5000\-v$REGISTRY_VOLUME:/var/lib/registry\--restart=always\--nameregistry\registry:2-p在主机上发布工作端口--rmonterminate-v将卷附加到本地机器,并为存储在Docker映像中的数据添加配置文件--restart用于在终止时更改容器的行为。就我而言,我将重启设置为通用策略--name容器名称配置好的容器服务可以在短时间内以推送或拉取的方式按需提供存储服务器。如上所述,本文讨论了一些可用于JMeter性能测试的重要Docker映像。如果需要,在创建自己的JMX文件后,将其上传到BlazeMeterutm_source=blog&utm_medium=BM_blog&utm_campaign=top-6-docker-images-for-jmeter-users-and-performance-testers)以获得可扩展性、高级分析和各种协作功能.原标题:JMeter用户和性能测试人员的Top6DockerImages,作者:VincenzoMarrazzo