眾所周知,一套好的容器會像一把瑞士軍刀那樣,有著一整套非常實用的工具集可供使用。如果您是一名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