連結: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檔案
<jmeterTestPlan version="1.2" properties="1.8">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test" enabled="true">
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<stringProp name="TestPlan.comments">Sample test for demonstrating JMeter Ant build script and Schematic stylesheet</stringProp>
</TestPlan>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<longProp name="ThreadGroup.start_time">1143889321000</longProp>
<stringProp name="ThreadGroup.delay"></stringProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.num_threads">3</stringProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<stringProp name="LoopController.loops">5</stringProp>
<boolProp name="LoopController.continue_forever">false</boolProp>
<longProp name="ThreadGroup.end_time">1143889321000</longProp>
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
</ThreadGroup>
<CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="Counter" enabled="true">
<stringProp name="CounterConfig.start">1</stringProp>
<stringProp name="CounterConfig.incr">1000</stringProp>
<stringProp name="CounterConfig.name">C</stringProp>
<boolProp name="CounterConfig.per_user">false</boolProp>
<stringProp name="CounterConfig.end">1000000</stringProp>
</CounterConfig>
<hashTree/>
<JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Sample 1" enabled="true">
<elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="Sleep_Time" elementType="Argument">
<stringProp name="Argument.metadata">=</stringProp>
<stringProp name="Argument.value">100</stringProp>
<stringProp name="Argument.name">Sleep_Time</stringProp>
<elementProp name="Sleep_Mask" elementType="Argument">
<stringProp name="Argument.value">0xFF</stringProp>
<stringProp name="Argument.name">Sleep_Mask</stringProp>
<elementProp name="Label" elementType="Argument">
<stringProp name="Argument.value"></stringProp>
<stringProp name="Argument.name">Label</stringProp>
<elementProp name="ResponseCode" elementType="Argument">
<stringProp name="Argument.value">200</stringProp>
<stringProp name="Argument.name">ResponseCode</stringProp>
<elementProp name="ResponseMessage" elementType="Argument">
<stringProp name="Argument.value">OK</stringProp>
<stringProp name="Argument.name">ResponseMessage</stringProp>
<elementProp name="Status" elementType="Argument">
<stringProp name="Argument.name">Status</stringProp>
<elementProp name="SamplerData" elementType="Argument">
<stringProp name="Argument.value">Request</stringProp>
<stringProp name="Argument.name">SamplerData</stringProp>
<elementProp name="ResultData" elementType="Argument">
<stringProp name="Argument.value">Response C=${C}</stringProp>
<stringProp name="Argument.name">ResultData</stringProp>
</collectionProp>
<stringProp name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp>
</JavaSampler>
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
<collectionProp name="Asserion.test_strings">
<stringProp name="51">3</stringProp>
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
<intProp name="Assertion.test_type">6</intProp>
<stringProp name="Assertion.assume_success">false</stringProp>
</ResponseAssertion>
</hashTree>
<JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Sample 2" enabled="true">
<stringProp name="Argument.value">Response C=${C} Tn=${__threadNum}</stringProp>
</jmeterTestPlan>
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 <testplan filename> -l <listener filename>
參數:
本文參考連結:
http://www.cnblogs.com/ceshisanren/p/5639895.html
http://www.cnblogs.com/TankXiao/p/4045439.html
本文轉自liujing0751CTO部落格,原文連結: http://blog.51cto.com/13281352/1976051,如需轉載請自行聯系原作者