0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Docker在JMeter分布式測(cè)試中的作用

馬哥Linux運(yùn)維 ? 來(lái)源:cnblogs ? 2024-02-25 09:33 ? 次閱讀

一個(gè)JMeter實(shí)例可能無(wú)法產(chǎn)生足夠的負(fù)載來(lái)對(duì)你的應(yīng)用程序進(jìn)行壓力測(cè)試。如本網(wǎng)站所示,一個(gè)JMeter實(shí)例將能夠控制許多其他的遠(yuǎn)程JMeter實(shí)例,并對(duì)你的應(yīng)用程序產(chǎn)生更大的負(fù)載。JMeter使用Java RMI[遠(yuǎn)程方法調(diào)用]來(lái)與分布式網(wǎng)絡(luò)中的對(duì)象進(jìn)行交互。JMeter主站和從站的通信如下圖所示:

efeae98e-d311-11ee-a297-92fbcf53809c.png

我們需要為每個(gè)Slave/Server打開(kāi)2個(gè)端口

Server_port=1099
server.rmi.localport=50000

在客戶機(jī)上打開(kāi)一個(gè)端口,讓從機(jī)將結(jié)果發(fā)送給主機(jī)。

client.rmi.localport=60000

通過(guò)在多臺(tái)機(jī)器上運(yùn)行JMeter的多個(gè)實(shí)例作為服務(wù)器,我們可以根據(jù)需要產(chǎn)生大量的負(fù)載。

f001d234-d311-11ee-a297-92fbcf53809c.png

Docker

docker在這里有什么用?

Docker有點(diǎn)像一個(gè)虛擬機(jī)。但與虛擬機(jī)不同的是,Docker不是創(chuàng)建一個(gè)完整的虛擬操作系統(tǒng),而是允許應(yīng)用程序使用與它們所運(yùn)行的系統(tǒng)相同的Linux內(nèi)核,只要求應(yīng)用程序與主機(jī)上尚未運(yùn)行的東西一起運(yùn)送。這使性能得到了極大的提升,并減少了應(yīng)用程序的大小

Docker是一個(gè)基礎(chǔ)設(shè)施的管理者。它能夠?qū)⒁粋€(gè)軟件和它的所有依賴物打包成一個(gè)容器來(lái)運(yùn)行。你可以將打包成docker鏡像的軟件部署到任何安裝了docker的機(jī)器上。它將軟件與硬件分離,因此開(kāi)發(fā)者可以放心,應(yīng)用程序?qū)⒃谌魏螜C(jī)器上運(yùn)行,無(wú)論該機(jī)器是否有任何定制的設(shè)置,可能與用于編寫(xiě)和測(cè)試代碼的機(jī)器不同。

Docker在JMeter分布式測(cè)試中的作用

如果我們看一下上面的設(shè)置--要做分布式負(fù)載測(cè)試--我們需要1個(gè)主站和N個(gè)從站來(lái)產(chǎn)生巨大的負(fù)載。每臺(tái)JMeter從機(jī)都需要安裝特定版本的Java和JMeter。特定的端口應(yīng)被打開(kāi),JMeter服務(wù)器應(yīng)運(yùn)行,準(zhǔn)備并等待主站發(fā)送指令。

手動(dòng)設(shè)置一些機(jī)器可能看起來(lái)很容易。如果我們要為50臺(tái)、100臺(tái)、1000臺(tái)機(jī)器做這件事呢?想象一下,如果我們將來(lái)需要在所有的機(jī)器上升級(jí)JMeter版本,會(huì)發(fā)生什么?這就是docker出現(xiàn)的原因。

我們基本上在一個(gè)叫做Dockerfile的文件中設(shè)置了JMeter分布式測(cè)試的整個(gè)基礎(chǔ)設(shè)施。檢查這些dockerfile,并閱讀注釋以了解每一步的作用。

Dockerfile用于JMeter基礎(chǔ):

在分布式測(cè)試中,所有的環(huán)境都要有相同版本的Java、JMeter和插件等。主站和從站之間的唯一區(qū)別是暴露的端口和運(yùn)行的進(jìn)程。因此,讓我們創(chuàng)建一個(gè)Docker文件,其中有主站和從站的所有共同步驟。讓我們把它稱為jmbase鏡像,我們需要做以下工作來(lái)建立我們的基礎(chǔ)鏡像。

我們需要Java8 - 所以讓我們打開(kāi)jdk-8-jre瘦身版,以保持盡可能小的體積。

我們可能需要一些實(shí)用程序,如wget、unzip、telnet等。所以讓我們安裝它們。

我們需要最新版本的JMeter。為版本創(chuàng)建一個(gè)變量--這樣以后的維護(hù)就會(huì)更容易。

添加一個(gè)包含所有插件的文件夾。

添加一個(gè)包含樣本測(cè)試的文件夾。

# Use Java 8 slim JRE
FROM openjdk:8-jre-slim
MAINTAINER TestAutomationGuru

# JMeter version
ARG JMETER_VERSION=3.3

# Install few utilities
RUN apt-get clean && 
    apt-get update && 
    apt-get -qy install 
                wget 
                telnet 
                iputils-ping 
                unzip

# Install JMeter
RUN   mkdir /jmeter 
      && cd /jmeter/ 
      && wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz 
      && tar -xzf apache-jmeter-$JMETER_VERSION.tgz 
      && rm apache-jmeter-$JMETER_VERSION.tgz

# ADD all the plugins
ADD jmeter-plugins/lib /jmeter/apache-jmeter-$JMETER_VERSION/lib

# ADD the sample test
ADD sample-test sample-test

# Set JMeter Home
ENV JMETER_HOME /jmeter/apache-jmeter-$JMETER_VERSION/

# Add JMeter to the Path
ENV PATH $JMETER_HOME/bin:$PATH

用于JMeter客戶端/主站的Dockerfile

Master dockerfile應(yīng)繼承自基礎(chǔ)鏡像,并應(yīng)暴露60000端口:

# Use vinsdocker base image
FROM vinsdocker/jmbase
MAINTAINER TestAutomationGuru

# Ports to be exposed from the container for JMeter Master
EXPOSE 60000

Dockerfile for JMeter Server / Slave:

服務(wù)器docker文件應(yīng)該從基礎(chǔ)鏡像中繼承,并且應(yīng)該暴露1099和50000端口。jmeter-server應(yīng)該正在運(yùn)行

# Use vinsdocker base image
FROM vinsdocker/jmbase
MAINTAINER TestAutomationGuru

# Ports to be exposed from the container for JMeter Slaves/Server
EXPOSE 1099 50000

# Application to run on starting the container
ENTRYPOINT $JMETER_HOME/bin/jmeter-server 
                        -Dserver.rmi.localport=50000 
                        -Dserver_port=1099

正如你在上面的Dockerfile中看到的,如果我們需要改變Java/JMeter的版本/端口,我只需要更新dockerfile,Docker會(huì)處理剩下的事情。

我已經(jīng)將這些Dockerfile推送到vinsdocker賬戶下的docker hub中。因此,任何人都可以提取這些文件并建立JMeter分布式測(cè)試基礎(chǔ)設(shè)施。

確保docker已經(jīng)安裝在你的機(jī)器上。一旦安裝完畢,剩下的就很容易了。你只需要遵循這里的步驟。
逐一運(yùn)行以下命令:

sudo docker run -dit --name slave01 vinsdocker/jmserver /bin/bash
sudo docker run -dit --name slave02 vinsdocker/jmserver /bin/bash
sudo docker run -dit --name slave03 vinsdocker/jmserver /bin/bash

Docker會(huì)自動(dòng)提取我上傳的docker鏡像,并為JMeter服務(wù)器創(chuàng)建3個(gè)容器。如果你需要更多的容器,繼續(xù)執(zhí)行上述命令,只需改變?nèi)萜髅Q即可。

運(yùn)行下面的命令,為JMeter主服務(wù)器創(chuàng)建一個(gè)容器

sudo docker run -dit --name master vinsdocker/jmmaster /bin/bash

運(yùn)行下面的命令可以看到所有正在運(yùn)行的容器和打開(kāi)的端口等:

sudo docker ps –a

f0294c56-d311-11ee-a297-92fbcf53809c.png

運(yùn)行下面的命令來(lái)獲得這些容器的IP地址列表:

sudo docker inspect --format '{{ .Name }} => {{ .NetworkSettings.IPAddress }}' $(sudo docker ps -a -q)

f05dbac2-d311-11ee-a297-92fbcf53809c.png

我在docker鏡像中包含了一個(gè)運(yùn)行了30秒的樣本測(cè)試,其中有5個(gè)并發(fā)用戶,你可以在容器中看到。路徑。/sample-test/sample-test.jmx

如果 - 你需要從主機(jī)復(fù)制任何文件到docker容器 - 你可以發(fā)出以下命令。例如:我把測(cè)試復(fù)制到我的JMeter主容器中。這個(gè)命令將把我的本地jmeter測(cè)試(docker-test.jmx)復(fù)制到主容器的這個(gè)路徑中:

/jmeter/apache-jmeter-3.3/bin/docker-test.jmx

sudo docker exec -i master sh -c 'cat > /jmeter/apache-jmeter-3.3/bin/docker-test.jmx' < docker-test.jmx

用下面的命令進(jìn)入容器內(nèi)部,我們可以看到文件是否被成功復(fù)制了:

sudo docker exec -it master /bin/bash

讓我們?cè)谥鞣?wù)器上運(yùn)行測(cè)試,看看它是否工作正常[不是在分布式模式下]。Docker容器將能夠運(yùn)行JMeter測(cè)試,因?yàn)樗鼡碛羞\(yùn)行JMeter測(cè)試的所有軟件和依賴:

jmeter -n -t sample-test/sample-test.jmx
Creating summariser 
Created the tree successfully using sample-test/sample-test.jmx
Starting the test @ Thu Dec 21 1759 UTC 2017 (1513876499683)
Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
summary +      1 in 0001 =    1.5/s Avg:   265 Min:   265 Max:   265 Err:     0 (0.00%) Active: 1 Started: 1 Finished: 0
summary +    336 in 0029 =   11.4/s Avg:   112 Min:    87 Max:   325 Err:     0 (0.00%) Active: 5 Started: 5 Finished: 0
summary =    337 in 0030 =   11.2/s Avg:   113 Min:    87 Max:   325 Err:     0 (0.00%)
summary +      4 in 0000 =  210.5/s Avg:    97 Min:    93 Max:   109 Err:     0 (0.00%) Active: 0 Started: 5 Finished: 5
summary =    341 in 0030 =   11.3/s Avg:   113 Min:    87 Max:   325 Err:     0 (0.00%)
Tidying up ...    @ Thu Dec 21 1730 UTC 2017 (1513876530127)
... end of run

就這樣了?,F(xiàn)在我們已經(jīng)準(zhǔn)備好使用docker容器在分布式中運(yùn)行我們的測(cè)試。我們只需要添加-R[slave01,slave02,slave03]

jmeter -n -t sample-test/sample-test.jmx -R172.17.0.5,172.17.0.6,172.17.0.7
Creating summariser 
Created the tree successfully using sample-test/sample-test.jmx
Configuring remote engine: 172.17.0.5
Configuring remote engine: 172.17.0.6
Configuring remote engine: 172.17.0.7
Starting remote engines
Starting the test @ Thu Dec 21 1748 UTC 2017 (1513875708955)
Remote engines have been started
Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
summary +      4 in 0011 =    0.4/s Avg:   182 Min:    98 Max:   232 Err:     0 (0.00%) Active: 15 Started: 15 Finished: 0
summary +   1021 in 0020 =   51.5/s Avg:   111 Min:    85 Max:   283 Err:     0 (0.00%) Active: 0 Started: 15 Finished: 15
summary =   1025 in 0030 =   33.7/s Avg:   111 Min:    85 Max:   283 Err:     0 (0.00%)
Tidying up remote @ Thu Dec 21 1720 UTC 2017 (1513875740196)
... end of run

如果你已經(jīng)注意到,我們?cè)谕慌_(tái)主機(jī)上創(chuàng)建了所有的容器。也就是說(shuō),JMeter和JMeter從機(jī)都在同一臺(tái)機(jī)器上運(yùn)行。因此,所有的系統(tǒng)資源將被這些容器共享。

f0726f80-d311-11ee-a297-92fbcf53809c.png

總結(jié)
在這篇文章中,我們的目的是使用Docker來(lái)創(chuàng)建JMeter分布式測(cè)試基礎(chǔ)設(shè)施。如果你按照上面的步驟,你就會(huì)明白,使用docker創(chuàng)建測(cè)試基礎(chǔ)設(shè)施是非常容易和快速的。我們把整個(gè)基礎(chǔ)設(shè)施寫(xiě)在一個(gè)文件中,可以進(jìn)行版本控制。然后我們從該文件中創(chuàng)建一個(gè)實(shí)例(容器)。Docker確保該容器具有所有的軟件和依賴性等。你可能會(huì)問(wèn),在一臺(tái)機(jī)器上運(yùn)行多個(gè)jmeter服務(wù)器實(shí)例以產(chǎn)生更多的負(fù)載是否可以?不,這是不可以的。這根本沒(méi)有幫助。事實(shí)上,一個(gè)JMeter實(shí)例比在同一主機(jī)上運(yùn)行多個(gè)JMeter實(shí)例能夠產(chǎn)生更多的負(fù)載。

那么,為什么我們要使用docker并做這些事呢?正如我上面所說(shuō),我們?cè)谶@里的目的是了解docker在JMeter測(cè)試中的作用。當(dāng)我們使用AWS/Digitalocean這些云計(jì)算服務(wù)提供商時(shí),我們可以理解docker的真正用途,在那里你可以按需創(chuàng)建任意數(shù)量的虛擬機(jī)。

審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8701

    瀏覽量

    84561
  • ip地址
    +關(guān)注

    關(guān)注

    0

    文章

    285

    瀏覽量

    16913
  • 負(fù)載測(cè)試
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    9436
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    446

    瀏覽量

    11738

原文標(biāo)題:基于Docker的JMeter分布式壓測(cè)

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    分布式軟件系統(tǒng)

    降到最低。負(fù)載各處理機(jī)之間分擔(dān),可以避免臨界瓶頸。 4、當(dāng)現(xiàn)有機(jī)構(gòu)已存在幾個(gè)數(shù)據(jù)庫(kù)系統(tǒng),而且實(shí)現(xiàn)全局應(yīng)用的必要性增加時(shí),就可以由這些數(shù)據(jù)庫(kù)自下而上構(gòu)成分布式數(shù)據(jù)庫(kù)系統(tǒng)。 5、相等規(guī)模的分布
    發(fā)表于 07-22 14:53

    LED分布式恒流原理

    需要恒流,但是電流的大小取決于應(yīng)用環(huán)境,LED照明智能化發(fā)展是關(guān)鍵,分布式恒流技術(shù)充份預(yù)留智能化接口。分布式LED驅(qū)動(dòng)設(shè)計(jì),驅(qū)動(dòng)回搜、色溫可調(diào)、灰度控制都要變得方便。這是
    發(fā)表于 03-09 16:47

    分布式整流橋測(cè)試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

    分布式整流橋測(cè)試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
    發(fā)表于 08-07 00:20

    分布式能源有哪些優(yōu)勢(shì)? 超級(jí)電容

    的燃?xì)廨啓C(jī)、內(nèi)燃機(jī)、微型汽輪機(jī)發(fā)電、太陽(yáng)能光伏發(fā)電,以天然氣、氫氣為燃料的燃料電池發(fā)電、生物質(zhì)能發(fā)電、小型風(fēng)力發(fā)電等都可以分布式能源系統(tǒng)推廣利用。 `
    發(fā)表于 04-27 11:40

    如何設(shè)計(jì)分布式干擾系統(tǒng)?

    什么是分布式干擾系統(tǒng)?分布式干擾系統(tǒng)是一種綜合化、一體化、小型化、網(wǎng)絡(luò)化和智能化系統(tǒng),是將眾多體積小,重量輕,廉價(jià)的小功率偵察干擾機(jī)裝置易于投放的小型平臺(tái)上,撒布接近***擾目標(biāo)空
    發(fā)表于 08-08 06:57

    docker分布式zabbix安裝流程

    docker安裝分布式zabbix
    發(fā)表于 10-24 07:33

    分布式系統(tǒng)的優(yōu)勢(shì)是什么?

    當(dāng)討論分布式系統(tǒng)時(shí),我們面臨許多以下這些形容詞所描述的 同類型: 分布式的、刪絡(luò)的、并行的、并發(fā)的和分散的。分布式處理是一個(gè)相對(duì)較新的領(lǐng)域,所以還沒(méi)有‘致的定義。與順序計(jì)算相比、并行的、并發(fā)的和
    發(fā)表于 03-31 09:01

    HarmonyOS應(yīng)用開(kāi)發(fā)-分布式設(shè)計(jì)

    設(shè)計(jì)理念HarmonyOS 是面向未來(lái)全場(chǎng)景智慧生活方式的分布式操作系統(tǒng)。對(duì)消費(fèi)者而言,HarmonyOS 將生活場(chǎng)景的各類終端進(jìn)行能力整合,形成“One Super Device”,以實(shí)現(xiàn)
    發(fā)表于 09-22 17:11

    求一種獨(dú)特的DCS分布式系統(tǒng)的測(cè)試方案

    本文介紹一種獨(dú)特的DCS分布式系統(tǒng)的測(cè)試方案,對(duì)分布一個(gè)網(wǎng)絡(luò)多臺(tái)電腦上的各個(gè)系統(tǒng)模塊(每臺(tái)電腦運(yùn)行多個(gè)系統(tǒng)模塊)同時(shí)
    發(fā)表于 04-26 06:57

    RTX分布式實(shí)時(shí)仿真系統(tǒng)的應(yīng)用是什么?

    基于反射內(nèi)存實(shí)時(shí)局域網(wǎng)的特點(diǎn)是什么?基于反射內(nèi)存卡實(shí)時(shí)局域網(wǎng)的實(shí)現(xiàn)機(jī)制RTX分布式實(shí)時(shí)仿真系統(tǒng)的應(yīng)用
    發(fā)表于 05-19 06:46

    HDC2021技術(shù)分論壇:如何高效完成HarmonyOS分布式應(yīng)用測(cè)試?

    2.0發(fā)布以來(lái),開(kāi)發(fā)者測(cè)試和上架HarmonyOS分布式應(yīng)用過(guò)程遇到很多挑戰(zhàn)和困難??傮w可歸納為以下三點(diǎn):分布式應(yīng)用上架
    發(fā)表于 12-13 14:55

    如何高效完成HarmonyOS分布式應(yīng)用測(cè)試?

    2.0發(fā)布以來(lái),開(kāi)發(fā)者測(cè)試和上架HarmonyOS分布式應(yīng)用過(guò)程遇到很多挑戰(zhàn)和困難??傮w可歸納為以下三點(diǎn):分布式應(yīng)用上架
    發(fā)表于 12-13 18:07

    如何使用Jmeter進(jìn)行分布式測(cè)試;檢索日志?

    使用 Jmeter 進(jìn)行分布式測(cè)試;檢索日志
    發(fā)表于 05-10 13:00

    分布式電源對(duì)配電網(wǎng)影響

    34節(jié)點(diǎn)配電網(wǎng)算例的說(shuō)明 研究分布式電源對(duì)配電網(wǎng)網(wǎng)損的影響 分布式電源容量對(duì)網(wǎng)損的影響 分布式電源位置對(duì)網(wǎng)損的影響 分布式電源對(duì)配電網(wǎng)電壓支撐作用
    發(fā)表于 01-07 11:27 ?6次下載
    <b class='flag-5'>分布式</b>電源對(duì)配電網(wǎng)影響

    分布式系統(tǒng)交通監(jiān)控工程的創(chuàng)新應(yīng)用案例

    隨著城市化進(jìn)程的加速和交通流量的不斷增長(zhǎng),交通監(jiān)控工程維護(hù)交通秩序、保障交通安全方面發(fā)揮著越來(lái)越重要的作用。訊維分布式系統(tǒng)憑借其強(qiáng)大的分布式處理能力和高度的集成性,
    的頭像 發(fā)表于 03-18 16:14 ?377次閱讀