溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Jmeter使用入門

發(fā)布時(shí)間:2020-04-27 11:58:14 來源:網(wǎng)絡(luò) 閱讀:1284 作者:yushiwh 欄目:軟件技術(shù)
  • Jmeter簡介

       

       

    • 開源免費(fèi),基于Java編寫,可集成到其他系統(tǒng)可拓展各個(gè)功能插件

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

    • 相較于自己編寫框架活其他開源工具,有較為完善的UI界面,便于接口調(diào)試

    • 多平臺(tái)支持,可在Linux,Windows,Mac上運(yùn)行

    • 我們?yōu)槭裁词褂?/span>Jmeter

    • Jmeter的基本概念

      百度百科:

      Apache JMeter是Apache組織開發(fā)的基于Java的壓力測試工具。用于對軟件做壓力測試,它最初被設(shè)計(jì)用于Web應(yīng)用測試,但后來擴(kuò)展到其他測試領(lǐng)域。 它可以用于測試靜態(tài)和動(dòng)態(tài)資源,例如靜態(tài)文件、Java 小服務(wù)程序、CGI 腳本、Java 對象、數(shù)據(jù)庫、FTP 服務(wù)器, 等等。JMeter 可以用于對服務(wù)器、網(wǎng)絡(luò)或?qū)ο竽M巨大的負(fù)載,來自不同壓力類別下測試它們的強(qiáng)度和分析整體性能。另外,JMeter能夠?qū)?yīng)用程序做功能/回歸測試,通過創(chuàng)建帶有斷言的腳本來驗(yàn)證你的程序返回了你期望的結(jié)果。為了最大限度的靈活性,JMeter允許使用正則表達(dá)式創(chuàng)建斷言

  • Jmeter安裝配置

    • /bin 目錄(常用文件介紹)

      examples:目錄下包含Jmeter使用實(shí)例

      ApacheJMeter.jar:JMeter源碼包

      jmeter.bat:windows下啟動(dòng)文件

      jmeter.sh:Linux下啟動(dòng)文件

      jmeter.log:Jmeter運(yùn)行日志文件

      jmeter.properties:Jmeter配置文件

      jmeter-server.bat:windows下啟動(dòng)負(fù)載生成器服務(wù)文件

      jmeter-server:Linux下啟動(dòng)負(fù)載生成器文件

    • /docs目錄——Jmeter幫助文檔

    • /extras目錄——提供了對Ant的支持文件,可也用于持續(xù)集成

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

    • /licenses目錄——軟件許可文件,不用管

    • /printable_docs目錄——Jmeter用戶手冊

    • Windows平臺(tái)一致,除入口文件不同,例如linux平臺(tái)下為/bin/jmeter.sh

    • 登錄 http://jmeter.apache.org/download_jmeter.cgi ,根據(jù)自己平臺(tái),下載對應(yīng)文件

      Jmeter使用入門

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

    • 將下載Jmeter文件解壓,打開/bin/jmeter.bat

      Jmeter使用入門

         

      Jmeter使用入門

    • WindowsJmeter下載安裝

    • 其他平臺(tái)安裝Jmeter

    • Jmeter的目錄結(jié)構(gòu)

      Jmeter使用入門

         

  • Jmeter相關(guān)插件安裝:

       

    • 生成原則:

    • 導(dǎo)出方法:

    • 每個(gè)功能模塊為一個(gè)獨(dú)立的jmx文件。增加可維護(hù)性。(盡量不要將一個(gè)jmx文件放入太多功能,后期維護(hù)成本會(huì)很高。)

    • 模塊的私有變量保存在模塊中,多模塊共有的(例如服務(wù)器ip端口等)可以考慮存在單獨(dú)的文件中讀取。

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

    • 編寫測試用例

    • 文件——保存為——確定:

      Jmeter使用入門

    • 下載地址:http://jmeter-plugins.org/downloads/all/

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

    • 重啟jmeter

      ps:數(shù)據(jù)庫鏈接驅(qū)動(dòng)如果需要需要專門下載,例如mysql需要jdbc的jar包,地址:http://dev.mysql.com/downloads/file/?id=462850

      使用注意事項(xiàng):添加第三方插件并使用后保存的jmx文件在未添加該插件的運(yùn)行環(huán)境下會(huì)導(dǎo)致無法打開該文件并報(bào)錯(cuò),請保持環(huán)境一致性。

    • 插件安裝:

      Jmeter的插件安裝很簡單,只需要下載對應(yīng)插件解壓即可。

    • 用例生成與導(dǎo)出:

      Jmeter的用例格式為jmx文件,實(shí)際為xml格式,感興趣可以學(xué)習(xí)下自己定制生成想要的jmx文件。

  • Jmeter常用文件類型

    • 文件的實(shí)際類型: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>

<hashTree>

<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>

</elementProp>

<longProp name="ThreadGroup.end_time">1143889321000</longProp>

<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>

<stringProp name="ThreadGroup.ramp_time">1</stringProp>

</ThreadGroup>

<hashTree>

<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>

<elementProp name="Sleep_Mask" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">0xFF</stringProp>

<stringProp name="Argument.name">Sleep_Mask</stringProp>

</elementProp>

<elementProp name="Label" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value"></stringProp>

<stringProp name="Argument.name">Label</stringProp>

</elementProp>

<elementProp name="ResponseCode" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">200</stringProp>

<stringProp name="Argument.name">ResponseCode</stringProp>

</elementProp>

<elementProp name="ResponseMessage" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">OK</stringProp>

<stringProp name="Argument.name">ResponseMessage</stringProp>

</elementProp>

<elementProp name="Status" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">OK</stringProp>

<stringProp name="Argument.name">Status</stringProp>

</elementProp>

<elementProp name="SamplerData" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">Request</stringProp>

<stringProp name="Argument.name">SamplerData</stringProp>

</elementProp>

<elementProp name="ResultData" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">Response C=${C}</stringProp>

<stringProp name="Argument.name">ResultData</stringProp>

</elementProp>

</collectionProp>

</elementProp>

<stringProp name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp>

</JavaSampler>

<hashTree>

<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">

<collectionProp name="Asserion.test_strings">

<stringProp name="51">3</stringProp>

</collectionProp>

<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/>

</hashTree>

<JavaSampler guiclass="JavaTestSamplerGui" testclass="JavaSampler" testname="Sample 2" 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>

<elementProp name="Sleep_Mask" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">0xFF</stringProp>

<stringProp name="Argument.name">Sleep_Mask</stringProp>

</elementProp>

<elementProp name="Label" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value"></stringProp>

<stringProp name="Argument.name">Label</stringProp>

</elementProp>

<elementProp name="ResponseCode" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">200</stringProp>

<stringProp name="Argument.name">ResponseCode</stringProp>

</elementProp>

<elementProp name="ResponseMessage" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">OK</stringProp>

<stringProp name="Argument.name">ResponseMessage</stringProp>

</elementProp>

<elementProp name="Status" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">OK</stringProp>

<stringProp name="Argument.name">Status</stringProp>

</elementProp>

<elementProp name="SamplerData" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">Request</stringProp>

<stringProp name="Argument.name">SamplerData</stringProp>

</elementProp>

<elementProp name="ResultData" elementType="Argument">

<stringProp name="Argument.metadata">=</stringProp>

<stringProp name="Argument.value">Response C=${C} Tn=${__threadNum}</stringProp>

<stringProp name="Argument.name">ResultData</stringProp>

</elementProp>

</collectionProp>

</elementProp>

<stringProp name="classname">org.apache.jmeter.protocol.java.test.JavaTest</stringProp>

</JavaSampler>

<hashTree/>

</hashTree>

</hashTree>

</hashTree>

</jmeterTestPlan>

  • Jtl文件

    • 文件的實(shí)際類型:自定義

    • 定義方法:

      修改{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運(yùn)行模式及參數(shù)

    • 依賴:

    • 命令:

      jmeter -n -t <testplan filename> -l <listener filename>

    • 參數(shù):

    • 實(shí)例:

      JMeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000

    • 執(zhí)行步驟:

      JMeter 默認(rèn)去當(dāng)前目錄尋找腳本文件,并把日志記錄在當(dāng)前目錄。比如你在 C:\tools\apache-jmeter-2.11\bin 目錄下執(zhí)行以上命令,JMeter 會(huì)去該目錄下尋找 test.jmx 腳本并把執(zhí)行結(jié)果放在該目錄。如果你的腳本在其他目錄,而且想要把執(zhí)行結(jié)果放在另外文件夾,可以使用絕對路徑告訴 JMeter。

    • 執(zhí)行過程查看:

    • 配置jmeter環(huán)境變量(windows下為將${jmeterhome}/bin加入Path變量)

    • 如果未加入環(huán)境變量,在執(zhí)行的時(shí)候可以直接給出全路徑或在${jmeterhome}/bin下執(zhí)行

    • -h 幫助 -> 打印出有用的信息并退出

    • -n  GUI 模式 -> 在非 GUI 模式下運(yùn)行 JMeter

    • -t 測試文件 -> 要運(yùn)行的 JMeter 測試腳本文件

    • -l jtl文件 -> 記錄結(jié)果的文件

    • -r 遠(yuǎn)程執(zhí)行 -> 啟動(dòng)遠(yuǎn)程服務(wù)

    • -H 代理主機(jī) -> 設(shè)置 JMeter 使用的代理主機(jī)

    • -P 代理端口 -> 設(shè)置 JMeter 使用的代理主機(jī)的端口號(hào)

    • -j 日志文件->設(shè)置JMeter日志文件的名稱

    • GUI模式

      打開已有的jmx文件(文件——打開)

      點(diǎn)擊啟動(dòng)按鈕運(yùn)行

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

    • 命令行模式

D:\apache-jmeter-3.0\bin>jmeter -n -t D:\共享\bpintocpin.jmx -l D:\共享\test.jtl

Writing log file to: D:\apache-jmeter-3.0\bin\jmeter.log

Creating summariser <summary>

Created the tree successfully using D:\共享\bpintocpin.jmx

Starting the test @ Fri Jun 17 15:12:21 CST 2016 (1466147541295)

Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445

summary = 1 in 00:00:01 = 0.8/s Avg: 1178 Min: 1178 Max: 1178 Err: 0 (0.00%)

Tidying up ... @ Fri Jun 17 15:12:22 CST 2016 (1466147542649)

... end of run

  • 執(zhí)行結(jié)果查看:

    • 在GUI界面創(chuàng)建一個(gè)聚合報(bào)告

    • 聚合報(bào)告界面點(diǎn)擊瀏覽,選中生成的.jtl文件,打開

      Jmeter使用入門

    • GUI界面打開聚合報(bào)告

    • 執(zhí)行過程中查看

summary = 1 in 00:00:01 = 0.8/s Avg: 1178 Min: 1178 Max: 1178 Err: 0 (0.00%)

  • jtl文件轉(zhuǎn)化成html格式查看

    • 通過xslt工具轉(zhuǎn)化成html格式(保存格式必須為xml格式)

  • Jmeter常用控件

    Jmeter使用入門

       

       

    Jmeter使用入門

    • 圖形結(jié)果

      控件截圖:

      Jmeter使用入門

      參數(shù)含義:

      樣本數(shù)目:總共發(fā)送到服務(wù)器的請求數(shù)。

      最新樣本:代表時(shí)間的數(shù)字,是服務(wù)器響應(yīng)最后一個(gè)請求的時(shí)間。

      吞吐量:服務(wù)器每分鐘處理的請求數(shù)。 

      平均值:總運(yùn)行時(shí)間除以發(fā)送到服務(wù)器的請求數(shù)。 

      中間值:代表時(shí)間的數(shù)字,有一半的服務(wù)器響應(yīng)時(shí)間低于該值而另一半高于該值。 

      偏離:服務(wù)器響應(yīng)時(shí)間變化、離散程度測量值的大小,或者,換句話說,就是數(shù)據(jù)的分布。

      注意事項(xiàng):圖形結(jié)果本身會(huì)影響Jmeter的性能

    • 查看結(jié)果樹

      應(yīng)用:可用于調(diào)試,查看請求響應(yīng)的數(shù)據(jù),測試的結(jié)果,請求的內(nèi)容。

      控件截圖:

      Jmeter使用入門

      參數(shù)含義:

      取樣器結(jié)果實(shí)例:

      Jmeter使用入門

      請求實(shí)例截圖:

      Jmeter使用入門

      響應(yīng)數(shù)據(jù)實(shí)例截圖:

      Jmeter使用入門

    • 聚合報(bào)告

      理解:

      控件截圖:

      Jmeter使用入門

      參數(shù)含義:

      Label:每個(gè) JMeter 的 element(例如 HTTP Request)都有一個(gè) Name 屬性,這里顯示的就是 Name 屬性的值

      #Samples:表示你這次測試中一共發(fā)出了多少個(gè)請求,如果模擬10個(gè)用戶,每個(gè)用戶迭代10次,那么這里顯示100

      Average:平均響應(yīng)時(shí)間——默認(rèn)情況下是單個(gè) Request 的平均響應(yīng)時(shí)間,當(dāng)使用了 Transaction Controller 時(shí),也可以以Transaction 為單位顯示平均響應(yīng)時(shí)間

      Median:中位數(shù),也就是 50% 用戶的響應(yīng)時(shí)間

      90% Line:90% 用戶的響應(yīng)時(shí)間

      Min:最小響應(yīng)時(shí)間

      Max:最大響應(yīng)時(shí)間

      Error%:本次測試中出現(xiàn)錯(cuò)誤的請求的數(shù)量/請求的總數(shù)

      Throughput:吞吐量——默認(rèn)情況下表示每秒完成的請求數(shù)(Request per Second),當(dāng)使用了 Transaction Controller 時(shí),也可以表示類似 LoadRunner 的 Transaction per Second 數(shù)

      KB/Sec:每秒從服務(wù)器端接收到的數(shù)據(jù)量,相當(dāng)于LoadRunner中的Throughput/Sec

    • 響應(yīng)斷言:

      理解:判斷Reponse是否正確

      實(shí)例截圖:

      Jmeter使用入門

    • 正則表達(dá)式提取器

      理解:當(dāng)一個(gè)Sampler的Reponse中包含我們需要的參數(shù)的時(shí)候,我們可以通過該控件將參數(shù)提取出來

      實(shí)例截圖:

      Jmeter使用入門

      參數(shù)含義:

      引用名稱:將提取的參數(shù)轉(zhuǎn)化為變量,該字段定義變量名稱

      正則表達(dá)式:匹配的正則,測試可用搜索引擎搜索在線正則驗(yàn)證測試結(jié)果

    • HTTP請求

      理解:就是一次HTTP請求

      實(shí)例截圖:

      Jmeter使用入門

         

    • Test Action

      理解:請求的執(zhí)行動(dòng)作,可放在Sampler后定義,即執(zhí)行某一個(gè)請求后暫停等操作

      控件截圖:

      Jmeter使用入門

         

    • Sampler

      理解:請求,設(shè)置不同的request

      控件截圖:

      Jmeter使用入門

      常用控件:

    • 后置處理器(Post Processors)

      理解:請求執(zhí)行后的處理,與前置處理器相反

      控件截圖:

      Jmeter使用入門

      常用控件:

    • 斷言(Assertions)

      理解:判斷請求響應(yīng)值的正確性的控件

      控件截圖:

      Jmeter使用入門

      常用控件:

         

      注意事項(xiàng):

      斷言要放在請求內(nèi)

    • 監(jiān)聽器(Listener)

      理解:查看請求執(zhí)行結(jié)果的控件

      控件截圖:

      Jmeter使用入門

      常用控件:

         

    • Simpler Timeout:

      理解:設(shè)置simple的最大響應(yīng)時(shí)間,與直接在Sampler中設(shè)置的區(qū)別就是,作用域不同

      控件截圖:

      Jmeter使用入門

    • Bean Shell PreProcessor

      理解:Bean Shell編程設(shè)置

      實(shí)例截圖:

      Jmeter使用入門

    • 前置處理器(Per Processors)

      理解:sampler請求前執(zhí)行的操作,可以是獲取測試數(shù)據(jù),修改參數(shù)等

      控件截圖:

      Jmeter使用入門

      常用控件:

    • 高斯隨機(jī)定時(shí)器

      理解:與固定定時(shí)器差不多,只不過時(shí)間范圍可以設(shè)置一個(gè)指定范圍隨機(jī)。

      實(shí)例截圖:

      Jmeter使用入門

    • Synchronizing Timer

      理解:LR中的集合點(diǎn),也就是說,sampler到這里會(huì)暫停,達(dá)到指定線程數(shù)后并發(fā)

      實(shí)例截圖:

      Jmeter使用入門

      配置參數(shù):

      Number of Simulated Users to Group by:線程數(shù)量設(shè)置

      Timeout in milliseconds:響應(yīng)時(shí)間設(shè)置,單位毫秒

      注意事項(xiàng):

      集合點(diǎn)需要設(shè)置在Sampler前,否則不會(huì)生效

    • Constant Throughput Timer 

      理解:設(shè)置目標(biāo)吞吐量,限定QPS的控件

      實(shí)例截圖:

      Jmeter使用入門

      配置選項(xiàng):

      Target throughputin samples per minute:目標(biāo)吞吐量。注意這里是每分鐘發(fā)送的請求數(shù),因此,對應(yīng)測試需求中所要求的20 QPS ,這里的值應(yīng)該是1200 

      Calculate Throughput based on :有5個(gè)選項(xiàng),分別是:

      This thread only :控制每個(gè)線程的吞吐量,選擇這種模式時(shí),總的吞吐量為設(shè)置的 target Throughput 乘以矣線程的數(shù)量。

      All active threads  設(shè)置的target Throughput 將分配在每個(gè)活躍線程上,每個(gè)活躍線程在上一次運(yùn)行結(jié)束后等待合理的時(shí)間后再次運(yùn)行?;钴S線程指同一時(shí)刻同時(shí)運(yùn)行的線程。

      All active threads in current thread group :設(shè)置的target Throughput將分配在當(dāng)前線程組的每一個(gè)活躍線程上,當(dāng)測試計(jì)劃中只有一個(gè)線程組時(shí),該選項(xiàng)和All active threads選項(xiàng)的效果完全相同。

      All active threads shared ):與All active threads 的選項(xiàng)基本相同,唯一的區(qū)別是,每個(gè)活躍線程都會(huì)在所有活躍線程上一次運(yùn)行結(jié)束后等待合理的時(shí)間后再次運(yùn)行。

      All cative threads in current thread group shared ):與All active threads in current thread group 基本相同,唯一的區(qū)別是,每個(gè)活躍線程都會(huì)在所有活躍線程的上一次運(yùn)行結(jié)束后等待合理的時(shí)間后再次運(yùn)行。

      注意事項(xiàng):

      Constant Throughput Timer只有在線程組中的線程產(chǎn)生足夠多的request 的情況下才有意義,因此,即使設(shè)置了Constant Throughput Timer的值,也可能由于線程組中的線程數(shù)量不夠,或是定時(shí)器設(shè)置不合理等原因?qū)е驴傮w的QPS不能達(dá)到預(yù)期目標(biāo)。

    • 固定定時(shí)器

      理解:請求間隔時(shí)間

      實(shí)例截圖:

      Jmeter使用入門

      注意事項(xiàng):

      需要注意的是,固定定時(shí)器的延時(shí)不會(huì)計(jì)入單個(gè)sampler的響應(yīng)時(shí)間,但會(huì)計(jì)入事務(wù)控制器的時(shí)間。

      對于一個(gè)sampler來說,定時(shí)器相當(dāng)于loadrunner中的pacing(理解就是一組請求操作的等待時(shí)間);對于"事務(wù)控制器"來說,定時(shí)器相當(dāng)于loadrunner中的think time(單次操作的等待時(shí)間或間隔時(shí)間)

    • 理解:為測試提供數(shù)據(jù)支持的控件

    • 控件截圖:

      Jmeter使用入門

    • 常用控件:

    • 新建一個(gè)txt文件

      Jmeter使用入門

       

    • 設(shè)置CVS 配置參數(shù)

      Jmeter使用入門

       

    • CSV Data Set Config各個(gè)參數(shù)的簡要說明:

      FileName:csv文件或txt文件路徑,可用相對路徑

      File Encoding: 文件編碼格式設(shè)置

      Varible Names: 定義文本文件中的參數(shù)名,可設(shè)置多個(gè)參數(shù),參數(shù)之間逗號(hào)分隔.定義后可在腳本中引用,引用方式${name}

      Delimiteruse "\t" for tab:指定參數(shù)分隔符號(hào)

      Allow Quoated data: 是否允許引用數(shù)據(jù)

      Recycle on EOF: 是否循環(huán)取值

      Stop Thread on EOF: 當(dāng)Recycle on EOFfalse并且Stop Thread on EOFtrue,則讀完csv文件中的記錄后,停止運(yùn)行

      Sharing Mode: 設(shè)置是否線程共享

    • CSV Data Set Config

      理解:讀取txt,csv格式的測試數(shù)據(jù)

      使用說明:

      使用場景:可用于多個(gè)jmx模塊情況下讀取服務(wù)器配置,或存儲(chǔ)id,賬號(hào)等測試數(shù)據(jù)。

      Jmeter使用入門

    • HTTP Cookie管理器

      特性:

      1,象瀏覽器一樣的存儲(chǔ)和發(fā)送Cookie。如果你請求一個(gè)站點(diǎn),然后他的Response中包含Cookie,Cookie Manager就會(huì)自動(dòng)地保存這些Cookie并在所有后來發(fā)送到該站點(diǎn)的請求中使用這些Cookie的值。(在View Results TreeRequest界面可以看到被發(fā)送的Cookie Data, 同時(shí)每個(gè)線程的Cookie Manager是相互獨(dú)立的)

      接受到的Cookie的值能被存儲(chǔ)到JMeter 線程變量中2.3.2版本后的JMeter不自動(dòng)做這個(gè)事情)。要把Cookies保存到線程變量中,要定義屬性"CookieManager.save.cookies=true"。

      線程變量名為COOKIE_ + Cookie名。屬性CookieManager.name.prefix= 可以用來修改默認(rèn)的COOKIE_的值。

      2,手動(dòng)添加CookieCookie Manager,需求注意的是這些Cookie的值被會(huì)所有線程共享

      定義:屬性"CookieManager.save.cookies=true"

      jmeter.properties文件中增加CookieManager.save.cookies=true,然后在Debug Sampler中就能看到COOKIE_xxx這樣的變量,或者也可以使用正則表達(dá)式來提取Cookie的值

      實(shí)例截圖:

      Jmeter使用入門

      使用注意事項(xiàng):

      路徑必須填寫,否則會(huì)導(dǎo)致nocookie

      路徑和域組成完整的訪問地址,誰訪問誰就用對應(yīng)的cookie

      Cookie不是跨域的

      不同的邏輯控制器中要分別放cookie管理器,或放在該cookie邏輯控制器同級,否則會(huì)不生效

      Jmeter使用入門

    • HTTP信息頭管理器

      理解:定義信息頭,在其覆蓋下的所有元件都會(huì)使用該信息頭。例如定義在測試計(jì)劃中的信息頭,即該測試計(jì)劃所有請求的信息頭。

      實(shí)例截圖:

      Jmeter使用入門

    • JDBC Connection Configuration

      理解:數(shù)據(jù)庫連接控件,不會(huì)進(jìn)行的具體的數(shù)據(jù)庫操作。

      實(shí)例截圖:

      Jmeter使用入門

      注意事項(xiàng):

      需要和JDBC Request配合使用

      Jmeter使用入門

      需要安裝jdbc驅(qū)動(dòng),否則無法連接數(shù)據(jù)庫

    • 用戶定義的變量

      理解:用戶自定義的變量,可用于存儲(chǔ)接口路徑等信息

      實(shí)例截圖:

      Jmeter使用入門

      注意事項(xiàng):

      注意變量的作用域,不同線程間變量不共享

    • 理解:用來控制采樣器的執(zhí)行順序

    • 分類:

    • 控件截圖:

      Jmeter使用入門

    • 常用控件:

    • 控制采樣器的邏輯執(zhí)行順序,如Loop ControllerIf Controller

    • 對采樣器進(jìn)行分組,方便控制的,如Throughput Controller、Transaction Controller

    • Total Executions:設(shè)置運(yùn)行次數(shù)

    • Percent Executions:設(shè)置運(yùn)行比例(1~100之間)

    • 第一種是數(shù)值,Switch控制器下的子節(jié)點(diǎn)從0開始計(jì)數(shù),通過指定子節(jié)點(diǎn)所在的數(shù)值來確定執(zhí)行哪個(gè)元素。

    • 第二種是直接指定子元素的名稱,比如采樣器的Name來進(jìn)行匹配。當(dāng)指定的名稱不存在時(shí),不執(zhí)行任何元素。

    • Interpret Condition as Variable Expression?:選中這一項(xiàng)時(shí)表示:判斷變量值是否等于字符串true(不區(qū)分大小寫)

    • Evaluate for all children:如果選中這一項(xiàng),在每個(gè)子結(jié)點(diǎn)執(zhí)行前都會(huì)計(jì)算表達(dá)式 

    • Generate parent sample(選中這個(gè)參數(shù)結(jié)果展示如下圖紅框,否則顯示為下圖藍(lán)框)

    • Include duration of timer and pre-post processors in generated sample:選中這一項(xiàng)會(huì)統(tǒng)計(jì)定時(shí)器(timer)的時(shí)間,否則只統(tǒng)計(jì)采樣器(sample)的時(shí)間

    • Input Variable Prefix:輸入變量前綴

    • Output variable name:輸出變量名稱

    • Start index for loop(exclusive):循環(huán)開始的索引(這里如果不填寫,默認(rèn)從1開始,如果沒有1開始的變量,執(zhí)行時(shí)會(huì)報(bào)錯(cuò)

    • End index for loop(inclusive):循環(huán)結(jié)束的索引

    • Add"_"before number:輸入變量名稱中是否使用"_"進(jìn)行間隔。

    • 簡單控制器(Simple Controller):

      作用:這是Jmeter里最簡單的一個(gè)控制器,它可以讓我們組織我們的采樣器和其它的邏輯控制器(分組功能),提供一個(gè)塊的結(jié)構(gòu)和控制,并不具有任何的邏輯控制或運(yùn)行時(shí)的功能。 

    • 循環(huán)控制器(Loop Controller):

      作用:指定其子節(jié)點(diǎn)運(yùn)行的次數(shù),可以使用具體的數(shù)值(如下圖,設(shè)置為5次),也可以使用變量

      1、Forever選項(xiàng):勾選上這一項(xiàng)表示一直循環(huán)下去

      2、如果同時(shí)設(shè)置了線程組的循環(huán)次數(shù)和循環(huán)控制器的循環(huán)次數(shù),那循環(huán)控制器的子節(jié)點(diǎn)運(yùn)行的次數(shù)為兩個(gè)數(shù)值相乘的結(jié)果。

      Jmeter使用入門

         

    • 僅一次控制器(Once Only Controller):

      作用:在測試計(jì)劃執(zhí)行期間,該控制器下的子結(jié)點(diǎn)對每個(gè)線程只執(zhí)行一次,登錄場景經(jīng)常會(huì)使用到這個(gè)控制器。

      注意:將Once Only Controller作為Loop Controller的子節(jié)點(diǎn),Once Only Controller在每次循環(huán)的第一次迭代時(shí)均會(huì)被執(zhí)行。 

    • ForEach控制器(ForEach Controller):

         作用:ForEach控制器一般和用戶自定義變量一起使用,其在用戶自定義變量中讀取一系列相關(guān)的變量。該控制器下的采樣器或控制器都會(huì)被執(zhí)行一次或多次,每次讀取不同的變量值。如下圖:

      參數(shù):

      Jmeter使用入門

      用戶自定義變量:

      變量名前綴為ForEach ControllerInput variable prefix定義的name + 下劃線(上圖中我們勾選了下劃線)+數(shù)字編號(hào)

      Jmeter使用入門

      執(zhí)行結(jié)果:

      總共執(zhí)行了3次,每次執(zhí)行時(shí)會(huì)把獲取到的變量值賦值給輸出變量outNmae,其它地方可以通過${outNmae}進(jìn)行調(diào)用。

      Jmeter使用入門

         

    • 事務(wù)控制器(Transaction Controller):

      作用: 事務(wù)控制器會(huì)生產(chǎn)一個(gè)額外的采樣器,用來統(tǒng)計(jì)該控制器子結(jié)點(diǎn)的所有時(shí)間。

      Jmeter使用入門

      參數(shù):

      Jmeter使用入門

         

    • If 控制器(If Controller):

         作用:根據(jù)給定表達(dá)式的值決定是否執(zhí)行該節(jié)點(diǎn)下的子節(jié)點(diǎn),默認(rèn)使用javascript的語法進(jìn)行判斷(如下圖紅框內(nèi)的文字)。

      Jmeter使用入門

      參數(shù):

      示例一:使用變量的方式進(jìn)行判斷:

      Jmeter使用入門

      示例二:選中Interpret Condition as Variable Expression?

      Jmeter使用入門

         

      Jmeter使用入門

         

      Jmeter使用入門

         

    • Switch控制器(Switch Controller):

      作用:Switch控制器通過給該控制器中的Value賦值,來指定運(yùn)行哪個(gè)采樣器。有兩種賦值方式:

      當(dāng)Value為空時(shí),默認(rèn)執(zhí)行第1個(gè)子節(jié)點(diǎn)元素。 

      示例:

      1、Switch Controller選擇的值為login page

      Jmeter使用入門

      2、執(zhí)行結(jié)果:

      Jmeter使用入門

         

    • 吞吐量控制器(Throughput Controller):

         作用:控制其下的子節(jié)點(diǎn)的執(zhí)行次數(shù)與負(fù)載比例分配,也有兩種方式:

         

      Jmeter使用入門

      示例:

      1、設(shè)置線程組循環(huán)5次:

      Jmeter使用入門

      2、Throughput Controller1的子結(jié)點(diǎn)執(zhí)行3次:

      Jmeter使用入門

      3、Throughput Controller2的子結(jié)點(diǎn)執(zhí)行(40% * 線程組循環(huán)次數(shù)5= 2次:

      Jmeter使用入門

      執(zhí)行結(jié)果:

      Jmeter使用入門

         

         

    • 隨機(jī)控制器(Random Controller):

         作用:隨機(jī)執(zhí)行其下的所某個(gè)子結(jié)點(diǎn)

         

    • 隨機(jī)順序控制器(Random Order Controller):

         作用:隨機(jī)執(zhí)行其下的所有子結(jié)點(diǎn)

    • 理解:與線程組同級別,但是默認(rèn)不會(huì)執(zhí)行。只有當(dāng)他被模塊控制器引用的時(shí)候才會(huì)被執(zhí)行。

    • 控件截圖:

      Jmeter使用入門

    • 線程組(Thread Group):

      控件截圖:

      Jmeter使用入門

      理解:常規(guī)意義上的線程組,即虛擬用戶組。

    • SetUp Thread Group

      控件截圖:

      Jmeter使用入門

      理解:測試初始化操作,即線程組開始之前執(zhí)行的內(nèi)容。

      實(shí)際使用:可用于初始化測試環(huán)境,測試數(shù)據(jù)準(zhǔn)備等。

    • TearDown Thread Group

      控件截圖:

      Jmeter使用入門

      理解:測試執(zhí)行后操作,即線程組執(zhí)行完成后執(zhí)行的內(nèi)容。

      實(shí)際使用:可用于清理測試環(huán)境,清空測試數(shù)據(jù)等。

    • Property Display

    • 創(chuàng)建方式:右鍵點(diǎn)擊工作臺(tái),添加——非測試元件——Property Display

    • 截圖:

      Jmeter使用入門

    • 功能:查看當(dāng)前測試計(jì)劃中的屬性以及系統(tǒng)中的屬性

    • 測試計(jì)劃(Test Plan

      控件截圖:

      Jmeter使用入門

      理解:包含一個(gè)測試的所有內(nèi)容,包含所有的控件,屬性,變量。所以一個(gè)jmx文件中只有有一個(gè)測試計(jì)劃。測試計(jì)劃中可以定義變量,引入jar包,編輯測試模式等。

      注意事項(xiàng):

      可將一些不常變化的數(shù)據(jù)存入測試計(jì)劃的變量,方便在測試計(jì)劃內(nèi)調(diào)用(例如服務(wù)器ip,端口,數(shù)據(jù)庫ip等)。

      函數(shù)測試模式會(huì)記錄來每個(gè)請求到服務(wù)器的取樣結(jié)果,如果在監(jiān)聽器中定義了數(shù)據(jù)寫入文件,會(huì)將這些輸入寫入到該文件中。同時(shí),該模式會(huì)嚴(yán)重影響性能。

    • 工作臺(tái)

      控件截圖:

      Jmeter使用入門

      理解:控件的暫存區(qū)域,在測試過程中可以把暫時(shí)不用的控件放入其中,待測試完成后放回原來的位置。

      注意事項(xiàng):工作臺(tái)中的控件不會(huì)保存在jmx文件中,所以,如果關(guān)閉jmeter,工作臺(tái)中的控件會(huì)丟失。

      常用控件:

    • 線程組( Threads Users

      理解:一個(gè)虛擬用戶組,線程組內(nèi)線程數(shù)量在運(yùn)行過程中不會(huì)發(fā)生改變。

      注意事項(xiàng):線程間變量相互獨(dú)立。一個(gè)測試計(jì)劃內(nèi)可以包含多個(gè)線程組。

      可定義內(nèi)容:

      取樣器錯(cuò)誤后執(zhí)行的操作:繼續(xù)執(zhí)行,啟動(dòng)下一個(gè)線程,停止線程,停止測試,立刻停止

      線程屬性:線程數(shù)量,線程啟動(dòng)間隔時(shí)間(0為立刻啟動(dòng)所有線程),單線程循環(huán)次數(shù),線程執(zhí)行順序,是否使用調(diào)度器。

      調(diào)度器配置:持續(xù)時(shí)間,啟動(dòng)延遲,啟動(dòng)時(shí)間,結(jié)束時(shí)間

    • 測試片段(Test Fragment)

    • 邏輯控制器(Logic Controller

    • 配置元件(Config Element

    • 定時(shí)器(Timer)

      理解:sampler(采樣器)之前執(zhí)行;如果只想應(yīng)用于部分sampler,需要將定時(shí)器加入子節(jié)點(diǎn);簡單理解類似于loadrunner中的思考時(shí)間,控制sampler的間隔時(shí)間。

      控件截圖:

      Jmeter使用入門

      常用控件:

  • Jmeter函數(shù)

    • 函數(shù)助手

      打開位置:選項(xiàng)——函數(shù)助手

      控件截圖:

      Jmeter使用入門

      函數(shù)實(shí)例:

      ${__time(YMD)}:當(dāng)前日期函數(shù)

      ${__time(YMDHMS)}:當(dāng)前四件函數(shù)

      ${__MD5(${fkeystr_no_register})}MD5加密函數(shù)

      更多可查看函數(shù)助手的幫助頁面

    • 函數(shù)調(diào)用

      選擇想要使用的函數(shù)

      輸入想要使用函數(shù)的值

      點(diǎn)擊生成

      Jmeter使用入門

      將所得字符串復(fù)制到要使用的位置

         

  • Jmeter屬性與變量

    一、Jmeter中的屬性:

    1、JMeter屬性統(tǒng)一定義在jmeter.properties文件中,我們可以在該文件中添加自定義的屬性

    2JMeter屬性在測試腳本的任何地方都是可見的(全局),通常被用來定義一些JMeter使用的默認(rèn)值,可以用于在線程間傳遞信息。

    3、JMeter屬性可以在測試計(jì)劃中通過函數(shù) _P 進(jìn)行引用,但是不能作為特定線程的變量值。

    Jmeter使用入門

    4JMeter屬性可以通過_setProperty 函數(shù)來定義JMeter屬性

    5、JMeter屬性是大小寫敏感的

    6、WorkBench中的屬性查看組件:

    WorkBench右鍵--->Add--->Non Test Elements--->Property Display

    Jmeter使用入門

       

    二、Jmeter中的變量:

    1、JMeter變量對于測試線程而言是局部變量。

    2、在不同測試線程中,JMeter變量既可以是完全相同的,也可以是不同的。

    3、JMeter變量引用方法:${name} 

    4、JMeter變量是大小寫敏感的

    5、如果有某個(gè)線程更新了變量,那么僅僅是更新了變量在該線程中復(fù)制的值

    6、Jmeter中定義變量的地方:

    a) 測試計(jì)劃(Test plan),在右邊的面板上添加User Defined Variables

    b) 線程組,右鍵選擇 配置元件( config element)-->User Defined Variables

    c) 通過前置或后置處理器生成的變量

    d)使用csv參數(shù)化的變量

    注意:通過 a  b 兩種方式定義的變量,在JMeter啟動(dòng)時(shí)對這個(gè)測試計(jì)劃都是可見的。如果同一個(gè)變量在多個(gè) b 中被定義,那么只有最后一個(gè)定義會(huì)生效。一旦某個(gè)線程啟動(dòng)后,那么整個(gè)變量集合的初始值就會(huì)被復(fù)制到該線程中。其他測試元件,例如 c 或者 d 可以被用來重新定義變量,這些重定義僅僅影響當(dāng)前線程

       

  • Jmeter錄制回放

    • 打開badboy,點(diǎn)擊錄制按鈕

      Jmeter使用入門

    • 輸入網(wǎng)址,在網(wǎng)頁中操作

    • 導(dǎo)出腳本(File——Export to Jmeter

      Jmeter使用入門

    • 用Jmeter打開對應(yīng)腳本

    • BadBoy錄制回放

  • Jmeter使用

       

    • 模塊名稱(測試計(jì)劃):每個(gè)模塊獨(dú)立劃分為一個(gè)jmx文件(例如登陸模塊),最好與接口類一一對應(yīng)。對應(yīng)的服務(wù)器信息,數(shù)據(jù)庫信息等可存在這里。

    • 數(shù)據(jù)準(zhǔn)備:用于測試數(shù)據(jù)的準(zhǔn)備(例如賬號(hào)信息)。

    • 結(jié)果查看:用于放置需要查看結(jié)果的控件(例如結(jié)果樹)。

    • 線程組:所有的接口測試用例放在線程組下,集中定義線程等信息

    • 獲取線程對應(yīng)測試數(shù)據(jù):用于獲取針對獨(dú)立線程的測試數(shù)據(jù),例如在數(shù)據(jù)準(zhǔn)備里面獲得了賬號(hào)信息,在這里根據(jù)賬號(hào)信息去數(shù)據(jù)庫獲取對應(yīng)的名稱,ID等信息。

    • 請求名稱:用簡單控制器為文件夾,內(nèi)有不同的請求。簡單控制器為一個(gè)獨(dú)立的接口,不同請求對應(yīng)不同的代碼路徑(例如成功請求,失敗請求等)。建議請求名稱最好用英文形式,否則后期持續(xù)集成或許會(huì)出現(xiàn)問題(no zuo no die?。?/span>

    • 在每條請求內(nèi)放置正則匹配(用于應(yīng)對需要返回值作為下次請求的參數(shù)的情況)以及斷言。

    • Jmeter創(chuàng)建接口測試計(jì)劃實(shí)例

      測試用例應(yīng)該作為測試的基礎(chǔ)內(nèi)容,而用例的結(jié)構(gòu)可能劃分,則是用例的基礎(chǔ)(忽然在這里想說一下,用例僅僅是一項(xiàng)測試活動(dòng)的綱要,有最好,沒有的話能保證質(zhì)量也OK。更不用說用例的格式問題,無論是表格還是導(dǎo)圖,其實(shí)都無所謂!本文的用例是指jmx文件中的控件結(jié)構(gòu))。

         

      筆者在網(wǎng)上并沒有找到這方面的相關(guān)資料,所以沒有準(zhǔn)確的定義說筆者的劃分是否是正確的或者合適的。筆者會(huì)闡明如此劃分的理由,但是大家實(shí)際使用過程中,僅僅作為拋磚引玉的一個(gè)磚頭而已。

         

      Jmeter使用入門

         

  • Jmeter使用注意事項(xiàng)

    • 變量問題

      使用過程中,一定要注意控件的執(zhí)行順序以及變量的作用域。

    • 路徑問題

      Windows下支持"/""\"并存模式,推薦使用"/",方便跨平臺(tái)使用。

      在linux格式下支持"/"格式。

    • Jmeter自身性能問題

      命令行模式:命令相同。

      UI模式:操作方式相同,但會(huì)存在windows下能打開linux下打不開的情況,暫不知道原因。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI