天天看點

jmeter使用入門(8個常用VPS性能測試方法:CPU記憶體、硬碟讀寫IO、速度、UnixBench跑分

    連結:http://www.itbulu.com/vps-test.html)

Jmeter簡介

Jmeter的基本概念

百度百科:

Apache JMeter是Apache組織開發的基于Java的壓力測試工具。用于對軟體做壓力測試,它最初被設計用于Web應用測試,但後來擴充到其他測試領域。 它可以用于測試靜态和動态資源,例如靜态檔案、Java 小服務程式、CGI 腳本、Java 對象、資料庫、FTP 伺服器, 等等。JMeter 可以用于對伺服器、網絡或對象模拟巨大的負載,來自不同壓力類别下測試它們的強度和分析整體性能。另外,JMeter能夠對應用程式做功能/回歸測試,通過建立帶有斷言的腳本來驗證你的程式傳回了你期望的結果。為了最大限度的靈活性,JMeter允許使用正規表達式建立斷言

我們為什麼使用Jmeter

開源免費,基于Java編寫,可內建到其他系統可拓展各個功能插件

支援接口測試,壓力測試等多種功能,支援錄制回放,入門簡單

相較于自己編寫架構活其他開源工具,有較為完善的UI界面,便于接口調試

多平台支援,可在Linux,Windows,Mac上運作

Jmeter安裝配置

Windows下Jmeter下載下傳安裝

<a href="https://s2.51cto.com/oss/201710/25/61416e1e6615db8c2d4a78d07688f2f6.png-wh_500x0-wm_3-wmp_4-s_619713748.png" target="_blank"></a>

安裝JDK,配置環境變量(具體步驟不做介紹)

 jdk安裝連結(Windows):

https://jingyan.baidu.com/article/48b558e35008cb7f38c09a3e.html

    将下載下傳Jmeter檔案解壓,打開/bin/jmeter.bat

<a href="https://s4.51cto.com/oss/201710/25/b6296cc3e7053e09f8ba2e7bdcca6919.png-wh_500x0-wm_3-wmp_4-s_3133558351.png" target="_blank"></a>

運作成功如下圖:

<a href="https://s1.51cto.com/oss/201710/25/141e0bad2b89d15b3fa934b2067046e6.png-wh_500x0-wm_3-wmp_4-s_797587304.png" target="_blank"></a>

其他平台安裝Jmeter

與Windows平台一緻,除入口檔案不同,例如linux平台下為/bin/jmeter.sh

Jmeter的目錄結構

<a href="https://s4.51cto.com/oss/201710/25/85ce3fbdd52d0446273fb501f140a152.png-wh_500x0-wm_3-wmp_4-s_2476555662.png" target="_blank"></a>

/bin 目錄(常用檔案介紹)

examples:目錄下包含Jmeter使用執行個體

ApacheJMeter.jar:JMeter源碼包

jmeter.bat:windows下啟動檔案

jmeter.sh:Linux下啟動檔案

jmeter.log:Jmeter運作日志檔案

jmeter.properties:Jmeter配置檔案

jmeter-server.bat:windows下啟動負載生成器服務檔案

jmeter-server:Linux下啟動負載生成器檔案

/docs目錄——Jmeter幫助文檔

/extras目錄——提供了對Ant的支援檔案,可也用于持續內建

/lib目錄——存放Jmeter依賴的jar包,同時安裝插件也放于此目錄

/licenses目錄——軟體許可檔案,不用管

/printable_docs目錄——Jmeter使用者手冊

Jmeter相關插件安裝:

插件安裝:

Jmeter的插件安裝很簡單,隻需要下載下傳對應插件解壓即可。

下載下傳位址:http://jmeter-plugins.org/downloads/all/

下載下傳後解壓放入:apache-jmeter-2.12\lib\ext\目錄下

重新開機jmeter

ps:資料庫連結驅動如果需要需要專門下載下傳,例如mysql需要jdbc的jar包,位址:http://dev.mysql.com/downloads/file/?id=462850

使用注意事項:添加第三方插件并使用後儲存的jmx檔案在未添加該插件的運作環境下會導緻無法打開該檔案并報錯,請保持環境一緻性

用例生成與導出:

Jmeter的用例格式為jmx檔案,實際為xml格式,感興趣可以學習下自己定制生成想要的jmx檔案。

生成原則:

每個功能子產品為一個獨立的jmx檔案。增加可維護性。(盡量不要将一個jmx檔案放入太多功能,後期維護成本會很高。)

子產品的私有變量儲存在子產品中,多子產品共有的(例如伺服器ip端口等)可以考慮存在單獨的檔案中讀取。

接口測試不要放太多線程,畢竟不是做壓力測試,意義也不大。

導出方法:

編寫測試用例

檔案——儲存為——确定:

<a href="https://s2.51cto.com/oss/201710/25/f076a847396abc41cabaaa7365e788b1.png-wh_500x0-wm_3-wmp_4-s_2022869051.png" target="_blank"></a>

Jmeter常用檔案類型

檔案的實際類型:xml

檔案樣本:

Jmx檔案

&lt;jmeterTestPlan version="1.2" properties="1.8"&gt;

&lt;hashTree&gt;

&lt;TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test" enabled="true"&gt;

&lt;elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"&gt;

&lt;collectionProp name="Arguments.arguments"/&gt;

&lt;/elementProp&gt;

&lt;stringProp name="TestPlan.user_define_classpath"&gt;&lt;/stringProp&gt;

&lt;boolProp name="TestPlan.serialize_threadgroups"&gt;false&lt;/boolProp&gt;

&lt;boolProp name="TestPlan.functional_mode"&gt;false&lt;/boolProp&gt;

&lt;stringProp name="TestPlan.comments"&gt;Sample test for demonstrating JMeter Ant build script and Schematic stylesheet&lt;/stringProp&gt;

&lt;/TestPlan&gt;

&lt;ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true"&gt;

&lt;longProp name="ThreadGroup.start_time"&gt;1143889321000&lt;/longProp&gt;

&lt;stringProp name="ThreadGroup.delay"&gt;&lt;/stringProp&gt;

&lt;stringProp name="ThreadGroup.duration"&gt;&lt;/stringProp&gt;

&lt;stringProp name="ThreadGroup.num_threads"&gt;3&lt;/stringProp&gt;

&lt;boolProp name="ThreadGroup.scheduler"&gt;false&lt;/boolProp&gt;

&lt;elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"&gt;

&lt;stringProp name="LoopController.loops"&gt;5&lt;/stringProp&gt;

&lt;boolProp name="LoopController.continue_forever"&gt;false&lt;/boolProp&gt;

&lt;longProp name="ThreadGroup.end_time"&gt;1143889321000&lt;/longProp&gt;

&lt;stringProp name="ThreadGroup.on_sample_error"&gt;continue&lt;/stringProp&gt;

&lt;stringProp name="ThreadGroup.ramp_time"&gt;1&lt;/stringProp&gt;

&lt;/ThreadGroup&gt;

&lt;CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="Counter" enabled="true"&gt;

&lt;stringProp name="CounterConfig.start"&gt;1&lt;/stringProp&gt;

&lt;stringProp name="CounterConfig.incr"&gt;1000&lt;/stringProp&gt;

&lt;stringProp name="CounterConfig.name"&gt;C&lt;/stringProp&gt;

&lt;boolProp name="CounterConfig.per_user"&gt;false&lt;/boolProp&gt;

&lt;stringProp name="CounterConfig.end"&gt;1000000&lt;/stringProp&gt;

&lt;/CounterConfig&gt;

&lt;hashTree/&gt;

&lt;JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Sample 1" enabled="true"&gt;

&lt;elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true"&gt;

&lt;collectionProp name="Arguments.arguments"&gt;

&lt;elementProp name="Sleep_Time" elementType="Argument"&gt;

&lt;stringProp name="Argument.metadata"&gt;=&lt;/stringProp&gt;

&lt;stringProp name="Argument.value"&gt;100&lt;/stringProp&gt;

&lt;stringProp name="Argument.name"&gt;Sleep_Time&lt;/stringProp&gt;

&lt;elementProp name="Sleep_Mask" elementType="Argument"&gt;

&lt;stringProp name="Argument.value"&gt;0xFF&lt;/stringProp&gt;

&lt;stringProp name="Argument.name"&gt;Sleep_Mask&lt;/stringProp&gt;

&lt;elementProp name="Label" elementType="Argument"&gt;

&lt;stringProp name="Argument.value"&gt;&lt;/stringProp&gt;

&lt;stringProp name="Argument.name"&gt;Label&lt;/stringProp&gt;

&lt;elementProp name="ResponseCode" elementType="Argument"&gt;

&lt;stringProp name="Argument.value"&gt;200&lt;/stringProp&gt;

&lt;stringProp name="Argument.name"&gt;ResponseCode&lt;/stringProp&gt;

&lt;elementProp name="ResponseMessage" elementType="Argument"&gt;

&lt;stringProp name="Argument.value"&gt;OK&lt;/stringProp&gt;

&lt;stringProp name="Argument.name"&gt;ResponseMessage&lt;/stringProp&gt;

&lt;elementProp name="Status" elementType="Argument"&gt;

&lt;stringProp name="Argument.name"&gt;Status&lt;/stringProp&gt;

&lt;elementProp name="SamplerData" elementType="Argument"&gt;

&lt;stringProp name="Argument.value"&gt;Request&lt;/stringProp&gt;

&lt;stringProp name="Argument.name"&gt;SamplerData&lt;/stringProp&gt;

&lt;elementProp name="ResultData" elementType="Argument"&gt;

&lt;stringProp name="Argument.value"&gt;Response C=${C}&lt;/stringProp&gt;

&lt;stringProp name="Argument.name"&gt;ResultData&lt;/stringProp&gt;

&lt;/collectionProp&gt;

&lt;stringProp name="classname"&gt;org.apache.jmeter.protocol.java.test.JavaTest&lt;/stringProp&gt;

&lt;/JavaSampler&gt;

&lt;ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"&gt;

&lt;collectionProp name="Asserion.test_strings"&gt;

&lt;stringProp name="51"&gt;3&lt;/stringProp&gt;

&lt;stringProp name="Assertion.test_field"&gt;Assertion.response_data&lt;/stringProp&gt;

&lt;intProp name="Assertion.test_type"&gt;6&lt;/intProp&gt;

&lt;stringProp name="Assertion.assume_success"&gt;false&lt;/stringProp&gt;

&lt;/ResponseAssertion&gt;

&lt;/hashTree&gt;

&lt;JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Sample 2" enabled="true"&gt;

&lt;stringProp name="Argument.value"&gt;Response C=${C} Tn=${__threadNum}&lt;/stringProp&gt;

&lt;/jmeterTestPlan&gt;

Jtl檔案

檔案的實際類型:自定義

定義方法:

修改{jmeterhome}/bin/jmeter.profile,可選擇格式:csv,xml,db

# legitimate values: xml, csv, db. Only xml and csv are currently supported.

#jmeter.save.saveservice.output_format=csv

Jmeter運作模式及參數

GUI模式

打開已有的jmx檔案(檔案——打開)

點選啟動按鈕運作

由于GUI模式本身就是帶界面的,也有中文版,就不在此詳細介紹了。

指令行模式

配置jmeter環境變量(windows下為将${jmeterhome}/bin加入Path變量)

如果未加入環境變量,在執行的時候可以直接給出全路徑或在${jmeterhome}/bin下執行

依賴:

指令:

jmeter -n -t &lt;testplan filename&gt; -l &lt;listener filename&gt;

參數:

本文參考連結:

http://www.cnblogs.com/ceshisanren/p/5639895.html

http://www.cnblogs.com/TankXiao/p/4045439.html

本文轉自liujing0751CTO部落格,原文連結: http://blog.51cto.com/13281352/1976051,如需轉載請自行聯系原作者