A. JMeter:邏輯控制器_If控制器(If Controller)
If控制器 允許用戶控制其下的測試元素(其子元素)是否運行。
If Controller的主要用途是控制JMeter執行腳本流程。這基本上意味著只有在某個條件為真時才能運行采樣器。
添加if控制器: 線程組 > 添加 > 邏輯控制器 > 如果 (if) 控制器
Expression (must evaluate to true or false) : 表達式(值必須是true或false),也就是說,在右邊文本框中輸入的條件值必須是true 或 false,(默認情況下)
Interpret Condition as Variable Expression?: 默認勾選項,將條件解釋為變數表達式(需要使用__jexl3 or __groovy 表達式)【選中這一項時表示:判斷變數值是否等於字元串true(不區分大小寫)】
Evaluate for all children?: 條件作用於每個子項
註:
1、文本框上的黃色感嘆號,就是提示你,建議採用__jexl3 or __groovy 表達式,以提高性能,也就是默認的方式。
2、if 控制器 只能作用於其下的子項
3、jexl全稱:Jakarta Commons Jexl,是一種表達式語言(Java Expression Language)解釋器。
在if邏輯控制器的Expression中不能直接填寫條件表達式,需要藉助函數將條件表達式計算為true/false, 可以藉助的函數有__jexl3和__groovy函數。
一、默認用法,採用__jexl3 or __groovy 表達式,控制測試腳本執行流程
如下圖,if 控制器下兩個訪問注冊頁面的取樣器,只有if條件滿足時,才會執行該取樣器。採用默認方式,將條件1==1,放入 __jexl3表達式中。
假設我們有一個帶有兩個請求采樣器的基本腳本:第一個請求采樣器位於If控制器之前一步,而第二個采樣器位於其中。讓我們添加最簡單的條件,以驗證執行工作流是否按預期工作:
執行請求後,結果
兩個請求都被觸發,因為我們的If Controller條件(1 == 1)被返回為true。讓我們嘗試將其設為false並再次驗證腳本執行:
修改f Controller條件(1 == 2)
由於我們的新條件(1 == 2),這個位於If Controller內部的請求沒有按預期執行,這顯然返回為false。
這是If Controller如何允許您控制腳本執行流程的最簡單示例。要防止執行腳本的某個部分,請將其嵌套在If Controller下並將條件設置為false。
註: 如果不知道表達式如何使用,可使用Jmeter 的函數助手,如下:
2、條件中使用變數,注意使用的條件語法
在創建條件時,應該驗證它們的語法,因為很容易犯錯並不容易捕獲。讓我們創建一個用戶定義的變數,我們可以在測試條件中進一步使用它:
使用函數生成的表達式
$ {channerlCode}變數應該包含'應用寶'字元串,我們可能希望創建的線程組將運行我們的兩個請求。我們來看看這個:
if控制器裡面的請求,沒有執行。那是因為我們的條件語法錯誤。這是If Controller最常見的錯誤之一。如果要比較兩個字元串,則必須在引號中指定它們(即使對於變數也應使用引號)。讓我們嘗試修復它並再次運行腳本:
通過上面的腳本場景,說明要注意檢查條件語法以防止腳本執行失效。
B. Jmeter 命令行(非GUI模式)執行詳解
背景說明:
JMeter執行方式有兩種,一種是GUI模式,一種是非GUI模式。
GUI模式就是界面模式,非GUI模式就是命令行模式。GUI模式主要用來編寫和調試腳本用的,介面的性能測試最好是採用命令行模式,因為該模式可以和其它框架進行對接,進行自動化測試平台的集成。
非GUI模式適用場景:
1、更省資源,更容易實現多工具集整合;
2、當訪問的介面服務需要通過代理伺服器才能完成的;
3、當一台機器產生的壓力不夠時,採用分布式多機遠程執行模式,使得一台主控機可以控制多台壓力機,同時生成更多的壓力請求,達到客戶端能模擬大並發請求的目的;
4、可以通過外部傳參,讓命令行將數據傳入到腳本中,使得外部系統調用jmeter時候能更好的進行集成和傳參,比如通過jenkins啟動和執行介面自動化時,將參數從jenkins的界面傳入到jmeter中,就是通過命令行參數進行橋接的。
優點:
1、節約系統資源,無需啟動界面
2、便捷快速:僅需啟動命令行,輸入命令便可執行
3、易於持續集成:可通過shell腳本命令執行
參數詳解:
-h 幫助 -> 列印出有用的信息並退出
-n 非 GUI 模式 -> 在非 GUI 模式下運行 JMeter
-t 測試文件 -> 要運行的 JMeter 測試腳本文件
-J 是設置本地jmeter屬性,引用變數參數
-G 是設置server的jmeter屬性
-l 日誌文件 -> 記錄結果的文件
-r 遠程執行 -> 在Jmter.properties文件中指定的所有遠程伺服器
-H 代理主機 -> 設置 JMeter 使用的代理主機
-P 代理埠 -> 設置 JMeter 使用的代理主機的埠號
使用方法詳解:
前提:為了方便管理,在jmeter的安裝目錄bin下創建一個文件夾testscript用來存放腳本(.jmx文件),再創建一個文件夾testresult用來存放腳本執行後的結果文件。
一、使用JMeter非GUI模式
1、將要測試的jmeter腳本放到testscript目錄下
2、cmd打開命令行模式
3、進入到Jmeter安裝目錄下的bin目錄下
4、執行命令:jmeter -n -t examples\testscript\apd_v3.7_perf.jmx -l examples\testresult\apd3.7-reslut.jtl -j report\01-log.log
可以看到以下信息
summary+ 是開始這個時點的報告。
summary= 是總結它之前的報告,呈現出的是當前時點之前總的情況,通常是均值。
最後一個summary=是本次壓測總的情況,如果腳本按時正常結束的話,最後一次summary裡面的值應該和你從GUI打開聚合報告或概括報告的值一致。
二、無界面分布式壓測
當並發量過大單機無法承擔需要做分布式壓測
執行方法:
1、把腳本和參數文件存放到各台終端相同目錄下
2、將每台終端的jmerter-server.bat打開等待主機發號施令
3、在主機命令窗口鍵入類似以下命令:
jmeter.bat -n -t testscript/Bai.jmx -R 192.168.182.129:1100,192.168.182.130:1200 -l testresult/01-result.jtl -j report\01-log.log
命令中-R代表遠程 remote ,後面跟隨的是每台終端機jmeter-server窗口顯示的 ip 和埠,同樣,多台終端之間由逗號隔開,其他都與單機命令一樣。於是可以看到各台終端機的jmeter-server窗口有關運行和階段性summary的信息直至運行結束。總體的報告都在你主機保存的那個.jtl文件里。
C. jmeter 代理錄制的腳本怎麼使用
啟動JMeter,雙擊運行jmeter.bat。
2
創建HTTP請求默認值。
--添加線程組:右擊"測試計劃"→添加→Threads(Users)→線程組,建議重命名線程組增強可讀性。
--添加HTTH請求默認值:右擊"XX線程組"→添加→配置元件→添加HTTP請求默認值。
3
配置HTTP請求默認值。
--伺服器名稱或IP(Server Name or IP)輸入:jakarta.apache.org
--協議(Protocol)輸入:http
--埠(Port Number)輸入:80
--路徑(path)保留為空。
註:jakarta.apache.org(JMeter本地自帶有說明文檔可用於測試)
END
二、添加HTTP代理伺服器
1
添加HTTP代理伺服器。
--右擊"工作台"→添加→非測試元件→HTTP代理伺服器(HTTP(S) Test Script Recorder)。
註:HTTP(S) Test Script Recorder(教新版本)= HTTP Proxy Server (老版本)
2
配置HTTP代理伺服器。
--埠(Port域):8088
--目標控制器(Target Controller):測試計劃>XXXX(線程組名稱)
--添加「包含模式(Patterns to Include)」:如「.*\.html」
--添加「排除模式(Patterns to Exclude)」:如「.*\.gif」
單擊底部「開啟(Start)」按鈕,出現彈窗提示點擊」確定」即可。
END
三、配置瀏覽器代理
1
啟動Internet Explore(示例),但不關閉JMeter。
2
配置瀏覽器代理。
--在IE瀏覽器中點擊工具--Internet選項--連接--區域網設置--選中"為LAN使用代理伺服器"。
--輸入地址和埠。地址:localhost或本機的IP;埠:8088。
--最後依次點擊"確定"。
END
四、操作被訪問JMeter界面
1
操作被訪問JMeter界面。
--在IE中輸入:http://jakarta.apache.org/jmeter/index.html
--隨便點擊JMeter界面上的幾個連接。
--關閉瀏覽器,將視線轉回JMeter窗口上。
END
五、查看結果--添加監.聽器
1
添加"查看結果樹"。
--右擊"XX線程組"→添加→監.聽器→查看結構樹。
--點擊"啟動"(Ctrl+R)按鈕查看運行結果。
2
添加"聚合報告"
--右擊"XX線程組"→添加→監.聽器→查看結構樹。
--點擊"啟動"(Ctrl+R)按鈕查看運行結果。
D. jmeter錄制腳本之後怎麼使用
1、啟動。
剛才在家裡的機器上下載安裝了Jmeter2.02版,啟動時總是提示「Error oclearcase/"
target="_blank" >ccurred ring initialization of VM Could not
reserve enough space for object heap」,完了,128M的內存跑不起來一個小小的Jmeter
:(。怎麼辦?修改Jmeter的啟動參數「set HEAP=-Xms256m -Xmx256m」「
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m」,改256->56,128->28。這里只是一個小小的插曲,實際使用時不要這么改哦。好了,可以啟動了:)
2、下面說Jmeter中的腳本錄制。
(1)選中Test Plan單擊滑鼠右鍵,在彈出菜單中選擇Add->Thread Group;
(2)接下來選中WorkBench單擊滑鼠右鍵,在彈出菜單中選擇Add->Non-Test Elements->HTTP Proxy Server;
(3)
在「HTTP Proxy Server」窗口中Target Controller下拉框選擇Test Plan > Thread
Group(表示腳本生成在這個線程組下),Grouping下拉框選擇Put each group in a new
controller(表示把每組腳本放到一個新的組中,避免生成的腳本雜亂且無法組織);
(4)單擊窗口最下方的Start;
(5)打開瀏覽器,設置代理伺服器的設置為localhot,埠號為8080(在「HTTP Proxy Server」窗口中設置了使用8080埠進行偵聽);
(6)在地址中鍵入要錄制頁面的URL對頁面進行操作,Jmeter就會自動把所進行的操作錄製成為腳本了,可以看到Thread Group節點下面多了許多的子節點就是錄制生成的腳本;
(7)操作完畢後在Jmeter中單擊Stop先停止錄制,然後把瀏覽器的代理設置改為原來的設置即可。
3、運行及記錄結果設置
(1)
完成腳本的錄制後還需要定義你所需的結果設置才算完成了Test Plan的設置,首先要設置Thread
Group(相當於虛擬用戶組)的屬性,單擊Thread Group,在右邊的窗口中設置Number of
Thread(相當於虛擬用戶數)為5,Ramp-Up Period(in seconds)為1,Loop
Cout選項取消選中Forever,在右邊的框中輸入2。以上設置表示共有5個虛擬用戶,每隔1秒運行一個,迭代2次。
(2)要查看運行的結
果還需要加入Listener,選中Thread Group單擊滑鼠右鍵選擇Listener->View Results in
Table,通過這個視圖可以查看到每個鏈接的執行情況,包括執行時間和成功與否,再加入Aggregate
Report,通過這個視圖可以查看每個Thread Group組的最大、最小和平均響應時間。加入View Results
Tree,通過這個視圖可以查看每個鏈接的執行情況,包括發出的請求和伺服器返回的詳細內容。
(3)OK,所有的設置暫到此結束,接下載可以運行了。
4、運行及結果查看
(1)OK,運行看看吧,由於設置運行時間較短,所以先選擇View Results in Table,然後按下Ctrl+r鍵開始運行腳本,就可以看到每個請求的運行結果了,還可以單擊其他兩個結果視圖實時查看運行結果。
說了這么多相信讀者已經對這個工具有些感性的認識了吧,簡單、便捷、跨平台、隨手拈來即可使用,是它最大的有點(占內存是Java無法避免的,出現最先一幕)。不過我的本意是想說說使用使用Jmeter進行查詢內容參數化的,沒想到就簡單使用也花費了這么多篇幅,那隻有下一節再敘了。
E. jmeter 可以調用python腳本生成變數在請求中使用嗎如果可以舉例
jmeter 執行python腳本
jmeter 可以通過Jython 執:行python代碼
1、下載Jython jar包:http://www.jython.org/downloads.html
後記:
試了下 下最新版本的選擇不了python 估計自己的版本太低,他工具裡面怎麼才能使用自己本地的python有待研究
解決了:
jmeter自己的python 調用本地下載好的python庫的方法:
import sys
sys.path.append('/Users/kaibinliu/Desktop/apache-jmeter-3.3/lib/junit')
告訴他庫的位置,然後正常調取使用即可
--信息來自網路網頁鏈接
F. jmeter :如何使用命令執行jmeter性能測試腳本
jmeter -n -t 創新項目/pos中心服務業務功能壓測.jmx -l result/pos/center.jtl -e -o report/pos
注意這里:
「創新項目/pos中心服務業務功能壓測.jmx」 :這是我的原始腳本文件
「result/pos/center.jtl 」:是我的結果文件存放路徑,center.jtl是每次執行完存放的結果,這個文件是每次執行完時新建的,文件路徑提前建立好
report/pos:這是執行完報告的存放路徑,提前建立和文件件
G. 如何用ant執行jmeter腳本
1、下載ant
2、配置環境變數
以windows下配置為例
①配置ant環境變數
ANT_HOME=D:Program Filesapache-ant-1.10.0
CLASSPATH=%ANT_HOME%lib
Path=%ANT_HOME%in
②檢查ant是否配置成功:命令行輸入ant -version
3、將JMeter的extras目錄中ant-jmeter-1.1.1.jar包拷貝至ant安裝目錄下的lib目錄中
4、修改JMeter的bin目錄下jmeter.properties文件的配置:jmeter.save.saveservice.output_format=xml
5、新建一個腳本存放目錄,以及報告存放目錄report,將*.jmx(已經調試OK的腳本)拷貝此目錄
6、在創建的目錄下新建一個build.xml文件(ant自動構建文件)
7、cmd進入腳本上面創建的目錄。(即build.xml所在的目錄)
8、輸入:ant 或 ant run(run為build.xml中的task名),即可執行腳本並生成報告
H. Jmeter中獲取運行腳本目錄路徑
Jmeter中經常要用到相對路徑來適應跨平台和分布式,而以運行腳本的路徑作為路徑參照是為首選。
查找工作台-Property Display里,沒有當前腳本路徑的參數。而之前以為可用的user.dir參數,也顯示的是系統級的用戶目錄。
參考網上解決方法:
在jmeter源碼里,有直接調用的方法,可以在運行時獲取當前運行腳本的路徑。上面的BeanShell腳本運行後,得到的就是當前運行腳本的目錄路徑了。再用${__property(file.separator)}獲取到當前系統的路徑分隔符,就可以拼裝任意文件路徑了,而且還適應各平台。NICE!