JMeter主要組件介紹
轉自https://www.cnblogs.com/linbo3168/p/6023962.html 作者:linbo.yang
1.測試計划(Test Plan)是使用 JMeter 進行測試的起點,它是其它 JMeter 測試元件的容器。
2.線程組(Thread Group)代表一定數量的並發用戶,它可以用來模擬並發用戶發送請求。
3.取樣器(sampler)定義實際的請求內容,被線程組包含,我們主要用HTTP請求。
4.監聽器(Listener)
5.邏輯控制器(Logic Controller)
6.斷言(Assertions)
7.配置元件(Config Element)
8.前置處理器(Pre Processors)和后置處理器(Post Processors)
9.定時器(Timer)
JMeter主要組件介紹-測試計划
1.測試計划(Test Plan)是使用 JMeter 進行測試的起點,它是其它 JMeter 測試元件的容器。
2.名稱:你可以為你的測試計划取一個有意義的名字。
3.注釋:對測試計划的注釋。
4.用戶定義的變量:用戶可以自己定義變量,在用到此變量的時候直接用${變量名}引用即可。例:變量名=url,值=http://www.baidu.com,在需要http://www.baidu.com時直接用${url}即可。
5.Add directory or jar to classpath:向類路徑即%JMETER-HOME%\lib中添加目錄及jar包。
JMeter主要組件介紹-線程組
1.名稱:為線程組起名字。
3.線程屬性-線程數:設置發送請求的用戶數目 ,即並發數。
4.線程屬性-Ramp-Up Period(in second):線程間的時間間隔,單位是秒。即所有線程在多少時間內啟動。
5.線程屬性-循環次數:請求的重復次數,如果選擇后面的forever(默認),那么 請求將一直繼續,如果不選擇forever,而在輸入框中輸入數字,那么請求將重復指定的次數,如果輸入1,那么請求將執行一次,如果是0,會出現問題。
5.調度器配置-啟動時間:測試計划什么時候啟動,啟動延遲會覆蓋它。
6.調度器配置-結束時間:測試計划什么時候結束,持續時間會覆蓋它。
7.調度器配置-持續時間:測試計划持續多長時間,會覆蓋結束時間。
8.調度器配置-啟動延遲:測試計划延遲多長時間啟動,會覆蓋啟動時間。
JMeter主要組件介紹-取樣器(HTTP請求)
1.名稱:HTTP請求的名字。
2.Web服務器-服務器名稱或IP、端口號,腳本錄制時自動添加,也可以使用“用戶自定義變量”。
3.HTTP請求:用默認值即可。
4.同請求一起發送參數:請求中的參數、值可以在此設置,需要用到參數化及動態數據關聯,我們在后面專門介紹。
5.同請求一起發送文件:我可以制定同請求一起發送哪個文件。
6.其他任務包括:從HTML文件中獲取所有內含的資源、用作監視器、Embedded URLs must match。
JMeter主要組件介紹-監聽器
1.監聽器(Listener)負責收集測試結果,同時也被告知了結果顯示的方式。
我們常用的包括:聚合報告、查看結果樹、用表格查看結果,都支持將結果數據寫入文件。
其他的添加上去看看就行。聚合報告前面我們介紹過,后面是查看結果樹和用表格查看結果的截圖。
JMeter主要組件介紹-監聽器(用表格查看結果)
JMeter主要組件介紹-邏輯控制器
1.邏輯控制器(Logic Controller)可以自定義JMeter發送請求的行為邏輯,它與Sampler結合使用可以模擬復雜的請求序列。
v循環控制器可以設置請求的循環次數或永遠循環(如果選中永遠的話)。
v事務控制器可以將多個請求放在同一個事務中。如果選中Gegerate parent sample,則聚合報告中只顯示事務控制器的數據,而不會顯示其中的各個請求的數據,反之則全部顯示。
JMeter主要組件介紹-斷言
1.斷言(Assertions)可以用來判斷請求響應的結果是否如用戶所期望的。它可以用來隔離問題域,即在確保功能正確的前提下執行壓力測試。這個限制對於有效的測試是非常有用的。
JMeter主要組件介紹-配置元件
1.配置元件(Config Element)維護Sampler需要的配置信息,並根據實際的需要會修改請求的內容。我們主要在參數化中用到CSV Data Set Config
JMeter主要組件介紹-前置處理器和后置處理器
1.前置處理器(Pre Processors)和后置處理器(Post Processors)負責在生成請求之前和之后完成工作。前置處理器常常用來修改請求的設置,后置處理器則常常用來處理響應的數據。我們主要在動態關聯中用到后置處理器的正則表達式提取器。
JMeter主要組件介紹-定時器
1.定時器(Timer)負責定義請求之間的延遲間隔。
參數化設置
1.在我們的測試計划中我們使用的都是HTTP請求,在HTTP請求中常常會提交一些參數,我們為了不想在每一次請求中都使用相同的參數值,就要想辦法讓每一次請求的參數的值都是不一樣的,我們就需要進行參數化設置,這里我們介紹兩種參數化設置的方法。
一種是利用函數助手中的_Random函數進行參數化設置;
一種是利用配置元件中的CSV Data Set Config進行參數化設置
2.JMeter中有一個函數助手的功能,里面內置了多個函數,我們可以利用其中的_Random函數來進行請求中的參數化設置。
v在JMeter中選擇“選項-函數助手對話框”打開函數助手對話框。
v選擇一個功能_Random。
v設定最小值為1。
v設定最大值為100。
v函數名稱設為func1。
v點擊生成將生成一個引用字符串${_Random(1,100,func1},在需要的請求參數中拷貝該字符串即可。
v其中函數名稱用來在引用中作區別,即我們可以設定不同的名稱在不同的地方引用同一個函數的功能。
v例如:我們生成了兩個串${_Random(1,100,func1)}、 ${_Random(1,100,func2)},在添加圖書的請求中,我們在bookName的參數值中引用${_Random(1,100,func1)},在bookConcern的參數值中應用${_Random(1,100,func2)},見截圖,這樣測試運行時不同的線程將產生不同的bookName和bookConcern。
參數化設置-CSV Data Set Config(1)
v在線程組上點擊右鍵選擇添加-配置元件-CSV Data Set Config,打開CSV Data Set Config。
vFilename文件名:即參數化要引用的文件名。這里是d:\number.txt
vFile encoding文件編碼:可以不填。
vVariable Names(comma-delimited)變量名(用逗號分割):多個變量可以引用同一個文件,用逗號分割。這里是num1,num2
vDelimiter(use ‘\t’ for tab):參數文件中多個變量值的分隔符,\t表示用tab鍵分割,默認是逗號。
vRecycle on EOF?:結束后是否循環?默認是True.
vNumber.txt文件內容見截圖。
v在添加圖書的請求中,我們在bookName的參數值中引用${num1},在bookConcern的參數值中應用${num2},見截圖,這樣測試運行時不同的線程將產生不同的bookName和bookConcern。
動態數據關聯
1.在HTTP請求的參數中經常會遇到一些參數的值是從服務器相應的動態數據,這些數據需要進行關聯才能使得每一次請求都能成功得被服務器接受,在JMeter中采用正則表達式提取器來獲取這些動態的數據。
2.正則表達式允許用戶從服務器響應中獲取數據,作為一個后置處理器,正則表達式提取器會在每一個請求執行后再執行,正則表達式提取請求的參數值,產生模板字符串,並將結果保存到給出的變量中。
動態數據關聯(1)-正則表達式提取器
1.在HTTP請求的參數中經常會遇到一些參數的值是從服務器相應的動態數據,這些數據需要進行關聯才能使得每一次請求都能成功得被服務器接受,在JMeter中采用正則表達式提取器來獲取這些動態的數據。比如我們想要獲得從服務器相應的TOKEN,就可以使用下面的正則表達式提取器。
動態數據關聯(2)
v使用時就可以使用${token_g1}來表示獲取到的TOKEN值。如下圖:
使用命令行運行JMeter腳本
vJMeter -n -t my_test.jmx -l log.jtl
v-n告知JMeter采用非圖形化運行JMeter腳本
v-t指定要運行的腳本文件
v-l指定保存執行結果的文件名
v執行命令前要檢查當前目錄是否是%JMeter_Home%\bin 目錄;
v如果 JMeter 腳本不在當前目錄,需要指定完整的路徑;如果要把執行的結果保存在其他地方也要指定完整的路徑。
利用XSLT分析JMeter結果文件(1)
1.將結果文件的擴展名改為xml,例:將log.jtl改為log.xml。
2.在log.xml的文件頭
<?xml version="1.0" encoding="UTF-8"?>
<testResults version="1.2">
中添加
<?xml-stylesheet type=“text/xsl” href=“jmeter-results-report.xsl” ?>
使之變成
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="jmeter-results-report.xsl" ?>
<testResults version="1.2">
其中href指定xsl文件的路徑,如果與xml文件在同一目錄,則只寫文件名即可,否則要寫明詳細路徑。
利用XSLT分析JMeter結果文件(2)
1.將修改后的xml文件用瀏覽器打開即可得到統計結果:
JMeter中進行分布式測試
作為一個純 JAVA 的GUI應用,JMeter對於CPU和內存的消耗還是很驚人的,所以當需要模擬數以千計的並發用戶時,使用單台機器模擬所有的並發用戶就有些力不從心,甚至還會引起JAVA內存溢出的錯誤。不過,JMeter也可以像 LoadRunner 一樣通過使用多台機器運行所謂的代理來分擔負載產生器自身的壓力,並借此來獲取更大的並發用戶數,我們只需手動配置一下即可。
v1、在所有期望運行JMeter作為 負載產生器的機器上安裝JMeter,並確定其中一台機器作為 控制器,其他的機器作為 代理。然后運行所有 代理 機器上的JMeter-server.bat文件—假定我們使用兩台機器172.20.80.47和172.20.80.68作為 代理;
v2、在Controller 機器的JMeter安裝目錄下找到 bin 目錄,再找到 jmeter.properties 這個文件,使用記事本或者其他文字編輯工具打開它;
v3、在打開的文件中查找“remote_hosts=”這個字符串,你可以找到這樣一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示運行JMeter代理的機器,這里需要修改為“remote_hosts=172.20.80.47,172.20.80.68”;
v4、保存文件,並重新啟動控制器機器上的JMeter,並進入啟動 ->遠程啟動菜單項。就會看到我們剛才添加的兩個代理的地址,選中即可運行,如果想同時啟動所有代理,選擇遠程全部啟動即可。 要進行分布式測試代理機器上需要添加環境變量,即添加用戶變量JMETER_HOME=d:\jmeter,系統變量中的path中添加d:\jmeter\bin(假設jmeter放在d盤根目錄下)。
運行Jmeter進行測試(4)-聚合報告詳解
vLabel:每個 JMeter 的 element (例如 HTTP Request )都有一個 Name 屬性,這里顯示的就是 Name 屬性的值
v#Samples:表示你這次測試中一共發出了多少個請求,如果測試計划模擬10個用戶,每個用戶迭代10次,這里就會顯示100
vAverage:平均響應時間 — 默認情況下是單個 Request 的平均響應時間,當使用了事務控制器時,也可以以事務為單位顯示平均響應時間
vMedian:中位數,也就是 50 %用戶的響應時間
v90% Line: 90 %用戶的響應時間
vMin:最小響應時間
vMax:最大響應時間
vError%:錯誤率,本次測試中出現錯誤的請求的數量 / 請求的總數
vThroughput:吞吐量 —— 默認情況下表示每秒完成的請求數( Request per Second )
vKB/Sec:每秒從服務器端接收到的數據量