jMeter3.3 --概述 學習1
apache jMeter 是一個開源的工具,用於量度應用程式的效能。它本來是用於測試web 應用程式的,但是由於jMeter的擴充套件的功能,於是就能夠支援其他測試功能啦。
Apache jMeter 可以測試靜態資源,動態資源,動態web應用的效能。
它可以模擬高負載的一個伺服器,伺服器叢集,大量的使用者,網路等等,用於測試應用的強度;通過不同載入型別,全面分析軟體效能。
特點如下
原文連結:http://jmeter.apache.org/index.html
1.0 Overview
當你使用jMeter時,通常都會遵循如下處理過程。
1.0.1 構建測試計劃
你可以在GUI Mode下執行jMeter。然後從瀏覽器或原生應用中錄製應用,步驟:file -> Template... ->record
當然你也可以手動的建立,但是需要確保你知道測試計劃要素的每一個概念
1.0.2 測試執行
準備好你的測試計劃後,你就可以開始負載測試了。第一步就需要配置jmeter執行的injectors(在其他的負載測試工具裡面也是需要配置這些的):
如果你準備好了這些就可以在命令列模式(Non-GUI Mode)裡開始負載測試啦
注意:負載測試是不能執行在GUI Mode下的
使用Non GUI Mode你可以生成一個CVS或XML檔案,讓jMeter在負載測試的最後生成一個HTML報告。jMeter預設情況下會提供一個負載測試的總結。當然你可以使用Backend Listener來獲取一個實時動態的結果。
1.0.3 測試分析
負載測試完成後,你可以使用一個html報告來分析你的負載測試。
1.0.4 開始使用
安裝
如果你想要做資料庫測試(JDBC testing),那麼你需要配置JDBC驅動。jMeter並不自帶JDBC驅動。
jMeter包含了JMS API的jar包,但是並不包含JMS客戶端的執行,如果你想要做JMS測試,你需要從JMS供應商那裡下載相應的jar包。
建立測試計劃
jmeter版本需要與對應的java版本一致,具體可參考原文。
原文連結:http://jmeter.apache.org/usermanual/get-started.html
1.2 可選項
用於擴充套件jMeter。
1.2.1 java編譯器
如果你是想要擴充套件jMeter或者是開發jMeter外掛,那麼你需要完整的JDK 8 或者更高。
1.2.2 SAX XML解析器
jMeter自帶Apache的Xerces XML解析器。你可以通過這個可選項自行配置不同的XML解析器,但是這就需要你在jMeter的classpath路徑裡面加入第三方的解析器,並更新jMeter.properties檔案。
1.2.3 支援郵箱
jMeter可以擴充套件郵箱,用來發送測試結果。它具有POP3(S)/IMAP(S)例項和SMTP(S)例項。
1.2.4 SSL加密
使用SSL加密(https)來測試web伺服器,需要給jMeter提供SSL,所需要的java版本也需要在1.4以上。如果你的java版本不支援SSL,那麼你可以加入外部工具來執行,包括引入加密包,該加package需要jMeter的classpath路徑上。當然你還需要更新system.properties,用於註冊SSL供應商。
jMeter HTTP 預設是在協議層TLS。這個是可以在jMeter的屬性(jmeter.properties或者user.properties裡面的https.default.protocol)裡面配置的。
jMeter的http例項接受所有的證書,不管證書是否受信任,是否過期等。
如果伺服器需要一個客戶端的證書,......
你也可以使用SSL Manager來更好的控制認證。
這部分詳見原文吧。
1.2.5 JDBC driver
如果你想要做JDBC測試的話,你需要增加你的資料庫驅動到jMeter的classpath裡面。需要確保檔案是jar包而不是zip包。
1.2.6 JMS driver
jMeter目前包含了Apache Gernoimo的JMS API,所以你需要從JMS供應商那裡增加相應的JMS客戶端執行jar包
1.2.7 ActiveMQ JMS庫
你需要增加activemq-all -X.X.X.jar 到你的classpath裡面。詳情參考原文。
1.3 安裝
1.4 執行
windows系統,點選bin目錄下的jMeter.bat,Unix系統點選jMeter檔案,jMeter的GUI模式就會出現。
GUI模式只能被用在建立測試指令碼,負載測試必須使用非GUI模式。
bin目錄下的一些額外指令碼(windows指令碼檔案需要執行在win2000以上):
LAST關鍵字是用在jmeter-n.cmd,jmeter-t.cmd和jmeter-n-r.cmd中,意思是已經執行的上一個測試計劃。
環境變數JVM_ARG可以用來重寫jmeter.bat的JVM設定的。例如:
工作在Linux和Unix系統上的檔案參考原文。 1.4.1 jMeter的classpath
jMeter會自動的從以下工作路徑的jar包中找到一些類:
如果你想開發新的jMeter元件,那麼你應該將他們打包成jar包並且複製到lib/ext目錄下。jMeter會自動找到該目錄下的原件。不要將公共jar包和與外掛有關的依賴jar包放到該目錄下,它只能用來放jMeter的元件和外掛。
如果你不想要放置jMeter外掛包到lib/ext目錄下那麼你可以在jmeter.properties中定義search_paths.
工具和依賴包等等這些檔案可以放在lib目錄下。並且在user.classpath或者jmeter.properties中的plugin_dependency_paths中定義一下。
其它的jar包(像JDBC,JMS implementation和其他的支援庫)應該放置在lib目錄下而不是lib/ext目錄下,或者增加一個user.classpath.
注意,jmeter只能找得到.jar檔案,而不是.zip檔案。
你可以在$JAVA_HOME/jre/lib/ext下安裝utility工具,或者你可以在jmeter.properties中設定user.classpath。
注意,設定的classpath環境變數可能會沒有用,因為jMeter是由java-jar啟動的,java命令預設是忽略classpath變數的,這個時候你需要在-jar後面加上 -classpath或者-cp。這個是所有的java程式都會發生的,而不僅僅是JMeter。
1.4.2 從模板中建立測試計劃
你可以從已有的模板去建立一個新的測試計劃。
…………
1.4.3 開啟了代理後,如何使用jMeter
如果你正在測試具有防火牆或者代理伺服器的專案,你可能需要提供防火牆/代理的主機名埠號給jMeter。具體的做法是執行jmeter.bat用命令列來設定一些引數,如下
注意,你的設定可能對系統中的其他人可見。
proxy host 和 port提供後,jmeter將會把值設定在下面的系統屬性中:
如果一個非代理主機被提供的話,那麼jMeter將值設定到以下系統屬性中:
如果你不希望同時設定http和https代理的話,你可以再system.properties中定義相關屬性,而不是使用命令列模式。
代理是指可以定義在一個測試計劃中,使用http request default配置,或者http request例項元素中。
注意:JMeter也有它自己的內建的代理伺服器(HTTP(S) Test Script Recorder)。這個只用在HTTP或者HTTPS瀏覽器對話中。
1.4.4 命令列模式
1.4.5 伺服器模式
對於分散式的測試,伺服器模式下,可以遠端節點上執行jMeter,並從GUI圖形介面控制jMeter。你也可以使用非GUI模式去執行遠端測試。在每一個伺服器主機上執行jmeter-sever.bat,就可以開啟伺服器端。
執行指令碼時也可以自行定義防火牆/伺服器代理埠的資訊,如下:
如果你想在某個的測試結束後就退出伺服器,那麼你可以定義jMeter的屬性server.exitaftertest = true.
在非GUI模式下從客戶端執行測試,使用如下命令:
如果屬性 jmeterengine.remote.system.exit被設定為true(預設是false),那麼jMeter將會在測試執行到最後停止RMI時執行System.exit(0)。
1.4.6 通過命令列重寫屬性
java系統屬性和jMeter屬性可以通過命令列直接重寫(不是通過修改jmeter.properties). 參考如下可選項:
命令列屬性會在啟動之前,列印系統開始之後生效。
1.4.7 列印日誌和報錯資訊
3.2版本後,jMeter的列印並不是通過屬性(例如:jmeter.properties)配置。它並是通過Apache Log4j 2配置檔案來設定的(log4j2.xml) jMeter和一些外掛都必須使用SLF4J庫。
一個log4j2.xml的例子,見原文……
1.4.8 命令列的可選項
見原文……
1.4.9 關閉非GUI模式
2.5.1版本之前,jMeter使用System.exit()來退出命令列模式的測試。但是這個會導致一些問題,jMeter正常完成測試時,就不再觸發System.exit()。並且一些嚴重錯誤也會觸發System.exit()。