badboy的录制和jmeter的使用
v? Jmeter是什么
- Apache Jmeter是Apache組織開發的基于Java的壓力測試工具。
- Jmeter可以用于對服務器、網絡或對象模擬巨大的負載,來自不同壓力類別下測試它們的強度和分析整體性能。另外,Jmeter能夠對應用程序做功能、回歸測試,通過創建帶有斷言的腳本來驗證你的程序返回了你期望的結果。為了最大程度的靈活性,Jmeter允許使用正則表達式創建斷言。
v? Jmeter的特點
- 能夠對HTTP和FTP服務器進行壓力和性能測試,也可以對任何數據庫進行同樣的測試(通過JDBC),即支持多協議
web:HTTP? ?HTTPS??
數據庫:JDBC
Mail:POP3? SMTP? IMAP
FTP
LDAP
TCP
面向消息的中間件:JMS
- 完全的可移植性和100%純JAVA,帶有圖形界面
- 開源應用程序
- 可以模擬多用戶,進行并發負載測試
- 5>數據分析和可視化插件提供了很好的可擴展性以及個性化,測試結果可視化:圖形、表格、樹形、報告等
- 完全多線程框架允許通過多個線程并發取樣和通過單獨的線性組對不同的功能同時取樣
- 具有提供動態輸入到測試的功能
- 各種負載統計表和可鏈接的計時器可供選擇
v? Jmeter環境搭建
- jmeter安裝運行的前置條件是安裝JDK
- 1>安裝JDK,默認安裝路徑:C:\PrograMFiles\Java\jdk1.8.0_92
?
?
- 2>配置環境變量
l? JAVA_HOME? ? ? ??C:\PrograM Files\Java\jdk1.8.0_92
l? PATH? ? ? ? ? ? ? ? ? ? C:\PrograMFiles\Java\jdk1.8.0_92\bin??
- 3>測試運行
l? 打開cMd,運行java –version,能出現信息輸出打印環境就成功了
?
?
v? JMeter安裝
?
?
?
- 版本目前更新至5.1,我下載的是5.0版本的,需要其他版本可以到官網下載?
- 官網地址:?http://jmeter.apache.org/download_jmeter.cgi
- 下載之后解壓即可
v? JMeter運行和語言設置
運行有兩種方式
1>直接命令行運行,進入bin目錄運行jmeter.bat啟動jMeter
?
?
?
2>直接雙擊jmeter.bat啟動
?
?
啟動成功之后命令行和圖形界面窗口同時出現,不要關閉命令行窗口
打開之后,切換語言,有兩種方法
1>
?
?
?
2>
?
?
?
?
v? 工作原理
?
?
v jmeter和LoadRunner對比
?
?
v? Jmeter目錄組成
?
Bin目錄是可執行文件,Jmeter.bat windows操作系統下啟動,(Jmeter.sh linux操作系統下啟動)里面可以設置jvm參數
?
- 根據經驗,heap(堆內存)最多設置為物理內存的一半,默認設置為512M,如果heap超過物理內存的一半,可能運行jmeter會慢,甚至出現內存溢出
- Jmeter的log在jmeter.log中查看
?
- Jmeter.properties(配置文件)文件中有一個屬性是log_level.jmeter。可以設置改變日志詳細度。默認是info,可改為debug
- Docs下是jmeter的java.docs
- 常用的是Printable_docs的usermanual子目錄下是jmeter用戶手冊,其中component_reference.html是最常用的核心元件幫助手冊
?
- Extras目錄下的文件提供了對ant的支持,可以利用ant來實現自動化,例如批量執行腳本,產生html報告等,運行jmeter的時候會產生一個jtl文件,把它放到extras目錄下,運行ant.Dtest=文件名report就可以生成測試統計報表
- Lib目錄下的ext子目錄是jmeter的核心jar包;junit子目錄是放junit腳本的。用戶擴展所依賴的包直接放到lib下即可,不需要放到lib/ext下
v? Jmeter的操作術語
1>測試計劃:用來描述一個性能測試,所有內容都是基于這個計劃的
2>
?
?
一般常用線程組:可以理解為虛擬用戶組
setup線程組(設置):可用于執行預測試操作,這些線程的行為完全像一個正常的線程組元件
teardown線程組(拆卸):可用于執行測試后操作,這些線程的行為完全像一個正常的線程組元件
3>
?
?
?
取樣器:取樣器是jmeter測試腳本的基礎單元,用戶可以用它來向服務器發出一個特定的請求,取樣器會在超時前等待服務器的響應
4>
?
?
邏輯控制器:用戶通過邏輯控制器來控制jmeter測試腳本的執行順序,以便測試能夠按照用戶期望的順序和邏輯執行
5>
?
?
監聽器:監聽器用來收集測試結果信息,并以用戶指定的方式展示出來
6>
?
?
??配置元件:配置元件被用來設置一些jmeter測試腳本公用的信息
7>
?
?
斷言:斷言被用來驗證服務器實際返回的信息與用戶期望的情況是否相符
8>
?
?
?
定時器:定時器被用來保存jmeter測試腳本與時間相關的一些信息
- 采樣器(Samplers):采樣器是jmeter測試腳本的基礎單元,用戶可以用它來向服務器發出一個特定的請求,采樣器會在超時前等待服務器的響應。
- 邏輯控制器(Logic Controllers):用戶通過邏輯控制器來控制jmeter測試腳本的執行順序,以便測試能夠按照用戶期望的順序和邏輯執行。
- 監聽器(Listeners):監聽器被用來手機測試結果信息,并以用戶指定的方式加以展示。
- 配置元件(Configuration Elements):配置元件被用來設置一些jmeter測試腳本公用的信息。
- 斷言(Assertions):斷言被用來驗證服務器實際返回信息與用戶期望的情況是否相符。
- 定時器(Timers):定時器被用來保存jmeter測試腳本與時間相關的一些信息,例如思考時間(Think Time)。
- 前置處理器(Pre-Processors):在前置處理器的作用范圍內,任何采樣器被執行前,都要先執行前置處理器。
- 后置處理器(Post-Processors):在后置處理器的作用范圍內,任何采樣器被執行后,都要執行對應的后置處理器。
- 測試計劃(Test Plan):測試計劃是jmeter測試腳本的根節點,關于整個測試腳本的一些基礎設置,可以在測試計劃中設定,例如用戶定義變量。
- 線程組(Thread Group):線程組定義了一個虛擬用戶池,其中每一個虛擬用戶都使用同樣的測試腳本。
- 工作臺(WorkBench):工作臺被用來保存暫時不使用的測試元素,當測試人員保存測試計劃時,工作臺中的內容不會被一起保存。
v? Jmeter的兩種錄制腳本方法
錄制方法一:badboy(推薦)
1.概念:badboy本身是一個獨立的自動化功能或性能測試工具,可以進行腳本錄制,導出的文件可以導入jmeter使用,所以一般兩個搭配起來使用,它能夠添加斷言,對腳本進行調試
2.下載地址:http://www.badboy.com.au/download/add
?
?
雙擊安裝,默認安裝路徑:C:\Program Files (x86)\Badboy,點擊badboy.exe打開工具
?
?
3.頁面功能分析
?
?
1>界面視圖,模擬瀏覽器,能夠進行操作
2>需要錄制腳本的url
3>點擊運行url
4>概要:運行的各項數據
?
?
5>參數:在錄制到需要參數化的地方能夠在這里操作之后導入jmeter
6>目錄樹:記錄錄制到的每一個操作
7>錄制按鈕:點擊之后開始進行錄制操作
8>停止按鈕:停止錄制
9>回放按鈕
10>回放所有
11>倒回按鈕,退回到前一步操作
12>單獨運行一個請求
4.執行步驟:
1>打開badboy工具,點擊錄制按鈕(紅色圓圈),在地址欄輸入被測試的項目的地址,即url
2>錄制完成后,點擊結束錄制按鈕(錄制按鈕后面的黑色方框),點擊文件—Export to Jmeter...
3>打開jmeter工具,選擇文件—打開,選擇剛才保存的文件(.jmx類型),導入文件
4>演示錄制gogomall.com
?
?
?
錄制方法二:代理
操作步驟:
1.創建一個線程組(右鍵點擊“測試計劃”-“添加”-“線程組”)
?
?
2.添加HTTP代理服務器(右鍵點擊“工作臺”-“添加”-“非測試元件”-“HTTP代理服務器”)
?
?
3.代理服務器端口,默認8888,可以修改,不與其他應用端口沖突即可
?
?
4.目標控制器:錄制的腳本存放的位置,可選擇項為測試計劃中的線程組,自己選擇即可
5.分組:對請求進行分組
分組是將一批請求匯總分組,可以把url請求理解為組
1>不對樣本分組:所有請求全部羅列
2>在組間添加間隔:加入一個虛擬的以分割線命名的動作,運行同【不對樣本分組】,無實際意義
3>每個組放入一個新的控制器:執行時按控制器輸入結果
4>只存儲每個組的第一個樣本:對于一次url請求,實際很多次http請求的情況
6.點擊啟動(最下面啟動按鈕)
注:要用代理服務器需要配置
?
打開IE瀏覽器——點擊工具——Internet選項——Internet屬性——連接——局域網設置——勾選代理服務器——輸入地址(如是本機輸入localhost)——輸入端口號(與jmeter設置的代理端口號一致)
?
?
??6.點擊jmeter的啟動按鈕,打開IE瀏覽器輸入需要錄制的url地址,jmeter會自動記錄所訪問的頁面
7.錄制完成之后,點擊jmeter的停止按鈕(最下面)
注意:錄制完成后,把IE瀏覽器中的局域網設置關掉
?
?
這種方法錄制下來一些資源加載的也會顯示,比較雜,所以一般還是推薦用badboy來錄制導入
在使用 JMeter 做性能測試時,我們可以使用 Badboy 工具協助錄制測試腳本,但錄制腳本時經常會提示“當前頁面的腳本發生錯誤”的錯誤信息,如下圖。
?
這個時候我們要去設置一下 Badboy ,讓 Badboy 在錄制腳本時自動處理 javascript 錯誤。
?
點擊Preferences,點擊Playing,勾選了javascript Error Dialogs 錯誤對話框"選項,點擊確定,再次用 Badboy 錄制腳本時就不會提示上面的錯誤了。
v? Badbaby使用
Badboy按鈕功能講解
?
?
默認情況下,badboy在雙擊打開的時候就自動開啟錄制,不過我們最好在一切準備工作就緒后再開始進行錄制腳本,這時候需要我們快捷鍵Ctrl+Shift+P:
?
?
?
1.Badboby檢查點
檢查點就是記錄被測系統某個值的預期結果
以百度搜索人人網為例子
1>錄制腳本
2>鼠標選中輸入框中的內容(要檢查的內容),點擊Tools-Add Assertion for Selection,左側添加了一行,圖標為問號
?
?
3>點擊回放所有
?
4>新添加的一行圖標變為了對勾,表示成功,如果是×,則表示沒有找到改檢查點
?
2.參數化
1.可選擇www.sogou.com 或 ?https://www.google.com.hk/ 鏈接作實驗,這里以www.sogou.com ?為實例講解
2.點擊紅色按鈕,開啟錄制(默認是開啟的),然后在地址欄輸入www.sogou.com ,點擊回車
?
?
3.輸入要搜索的東西,如名字:張三,點擊搜索
4.做數據處理,添加斷言即檢查點,選中搜索框中的張三,然后Tools-> Add Assertion For Selection
?
?
5.頁面展開搜索結果后,停止錄制,展開腳本樹
?
?
6.點擊Variable 標簽, 空白處右擊,點擊Add Variable,輸入參數化的名字和要搜索的內容,點擊ok
?
?
7.輸入任意變量名,如:“搜索詞”,由于這個用例是測有效類,那么我們加入有效測試數據,如張三、李四等;然后點擊OK即可?
?
?
?
?
8.右擊腳本樹中的ie ,選擇Properties,修改成gbk;
右擊腳本樹中的query,選擇Properties,修改成${搜索詞},將Value綁定參數搜索詞;
check for text參數化?
??
?
9.觀察腳本樹的變化,query的值已經被參數化
10.雙擊Step 1 , 或右擊選擇Properties,此時查看腳本樹的變化。
?更改回放次數,選擇step,右鍵,選擇properties ,勾選for each value of vari,點擊確定按鈕
11.選擇Step 1 ,運行腳本?
?
?
1>建立參數化列表
點擊Variables標簽,空白處右擊,點擊Add Variable,輸入參數化的名字和要搜索的內容,點擊ok
?
?
?
?2>在請求中替換${參數名稱}
找到實際發請求的參數,右鍵,properties
找到關鍵字請求,點擊前面的加號打開列表,找到要替換的關鍵字(如上次搜索內容為badboby),右擊,點擊properties,將value的值替換成參數化列表中的名字,如${searchtxt},點擊確定,如是中文會出現亂碼,把ie=utf8改成gbk.
?
?
?
?
?3>更改回放次數,選擇step,右鍵,選擇properties ,勾選for each value of vari,點擊確定按鈕。
?
?
?
?
?
?
4>進行回放
5>如果是配合檢查點使用的,則還需要修改檢查點,不然也會報錯
?
?
?注:中文可能會亂碼,更改請求中的編碼即可
v? 使用Badbody進行數據庫參數化
?在Badboy里進行數據庫參數化是通過ODBC進行的。
使用ODBC的前提是要在本地安裝上ODBC,安裝好之后要配置數據源
(1)在開始那輸入數據源--打開“設置ODBC數據源64位
?
?
(2)如下圖
?
?
?
備注:
1的位置隨便寫
2的位置的TCP/IP、Port、用戶名和密碼都需要填寫你公司實際的IP,port,username和password
3的位置填完2之后,就會自動出現可用的庫,選擇需要的即可
添加完后,如下圖片展示
在這里如果連接mysql數據庫的時候報不能連接或者是拒絕連接,可能是沒有權限。
1,設置訪問單個數據庫權限
mysql>grant all privileges on test.* to 'root'@'%';
說明:設置用戶名為root,密碼為空,可訪問數據庫test
2,設置訪問全部數據庫權限
mysql>grant all privileges on *.* to 'root'@'%';
說明:設置用戶名為root,密碼為空,可訪問所有數據庫*
3,設置指定用戶名訪問權限
mysql>grant all privileges on *.* to 'liuhui'@'%';
說明:設置指定用戶名為liuhui,密碼為空,可訪問所有數據庫*
4,設置密碼訪問權限
mysql>grant all privileges on *.* to 'liuhui'@'%' IDENTIFIED BY 'liuhui';
說明:設置指定用戶名為liuhui,密碼為liuhui,可訪問所有數據庫*
5,設置指定可訪問主機權限
mysql>grant all privileges on *.* to 'liuhui'@'10.2.1.11';
說明:設置指定用戶名為liuhui,可訪問所有數據庫*,只有10.2.1.11這臺機器有權限訪問。
一般如上步驟如果沒有錯誤的話,我們在進入badboy工具內部進行設置數據源。
?
(3)Badboy配置Data source
?
此處遇到坑了,剛才配置的數據源沒有出現在下拉列表。因為安裝的ODBC是64位的,而badboy是32位的,所以重復前面的步驟,需要找個32位的odbc“mysql-connector-odbc-5.1.1-win32.exe”
?
?
選擇一個需用的表
?
?
因為按腳本順序執行,放到最頂端就可以先把數據取出來。
?
?
點著 Data Source拖到頂端的時候,還會出現選擇數據庫和表的界面,選擇需要的即可
然后我們回到之前參數化設置的地方,把參數值修改為${username},username為數據庫字段,也是參數列表名稱。(斷言處,輸入數據處,操作步驟step1處雙擊選擇,一共3個地方需要進行修改)。
修改完成后,腳本歸零后,重新進行腳本運行,只要是按照數據庫表customer中的字段username字段中的值進行運行就說明OK了。
?
?
?
v? 并發
錄制好腳本后,點擊tools-選擇Run background Threads,填寫并發數量、間隔時間,點擊Start開始啟動
?
?
?
?
①執行并發的數量
②是否在每次執行完成之后清除cookie
③每次間隔的時間
④開始執行
⑤輸出結果框
v? 報告
View-Report
?
?
結果如下:
?
?
v? 斷點
在相應的步驟上右鍵—Toggle Break Point。
取消斷點-重復以上操作。
?
?
?
v? 問題記錄
1>錄制時一直提示錯誤彈窗
?
?
解決辦法:可以通過設置不再顯示,將“JavaScript Error Dialogs” 打勾,意思是隱藏javascript的報錯對話框。
要關閉警告可以在瀏覽器Internet選項,然后單擊“高級屬性”頁,進入到瀏覽器標簽,并選中“禁止腳本調試”復選框
?
?
2>切換瀏覽器
在谷歌瀏覽器設置中操作設置為默認瀏覽器即可
?
?
?
注:設置成功之后,可以看到瀏覽器圖標更改為谷歌,但是badboy內核為IE瀏覽器,所以實際上運行的還是IE
?
?
v? Jmeter使用
- 添加線程組
n? 名稱:可以隨意取,我們保持創建是自動分配的名稱
n? 注釋:隨意
n? 在取樣器錯誤后要執行的動作:我們選擇繼續,錯誤之后依然繼續執行
n? 線程數:一般我們用來表示多少個用戶,即我們測試時的用戶數量
n? Ramp-up?Period(in?Seconds):表示每個用戶啟動的延遲時間,上述我設為1秒,表示系統將在1秒結束前啟動我設置的1000個用戶,如果設置為1000秒,那么系統將會在1000秒結束前啟動這1000個用戶,開始用戶的延遲為1秒,?如果我設置為0秒,則表示立即啟動所有用戶。
n? 循環次數:如果你要限定循環次數為10次的話,可以取消永遠的那個勾,然后在后面的文本框里面填寫10;在這里我們勾上永遠,表示如果不停止或者限定時間將會一直執行下去,?是為了方便調度器的調用。
n? 調度器的配置:我們勾選調度器時,將會出現這個面板
n? 啟動時間:表示我們腳本開始啟動的時間,當你不想立即啟動腳本測試,但是啟動腳本的時間不會再電腦旁的時候,你可以設定一個啟動的時間,然后再運行那里點擊啟動,系統將不會立即運行,而是會等到你填寫的時間才開始運行。
n? 結束時間:與啟動時間對應,表示腳本結束運行的時間。
n? 持續時間:表示腳本持續運行的時間,以秒為單位,比如如果你要讓用戶持續不斷登錄1個小時,你可以在文本框中填寫3600。如果在1小時以內,結束時間已經到達,它將會覆蓋結束時間,繼續執行。?
n? 啟動延遲:表示腳本延遲啟動的時間,在點擊啟動后,如果啟動時間已經到達,但是還沒有到啟動延遲的時間,那么,啟動延遲將會覆蓋啟動時間,等到啟動延遲的時間到達后,再運行系統。
n? 注意:如果我們需要用到調度器來設定持續時間,如果線程數不夠多到持續時間結束,我們就必須將循環次數勾選為永遠,特別地,如果線程組里面有其他的循環,我們也需將該循環次數勾選為永遠(如我上面錄制的腳本中的Step1也是一個循環,需要將永遠勾選),否則,按我如上配置,將永遠去掉勾選,文本里填1,那么無論你將持續時間啟動時間結束時間等設置多少,系統運行1000次后,將會停止不再運行。?
- 添加HTTP請求設置
n? 名稱:本屬性用于標識一個取樣器,名稱可以隨意取,可以根據腳本的路徑來取名
n? 注釋:對于測試沒有任何作用,僅用戶記錄用戶可讀的注釋信息,對界面做一個簡單地介紹
n? 服務器名稱或IP:HTTP請求發送的目標服務器名稱或IP地址,如是在本機上的項目,填寫localhost或者127.0.0.1
n? 端口號:目標服務器的端口號,默認值為80,后面的超時定義可以不用填寫
n? Implementation:這里我們錄制時默認填寫為JAVA
n? 協議:向目標服務器發送HTTP請求時的協議,可以使http或者是https,默認是http
n? 方法:發送http請求的方法,可用方法get、post、head、put、options、trace、delect等
n? Content?encoding:內容的編碼方式,可以不填寫
n? 路徑:目標URL路徑(不包括服務器地址和端口)
n? 自動重定向:如果選定該選項,當發送HTTP請求后得到的響應是302/301時,JMeter自動重定向到新的頁面
n? Parameters參數:即跟著路徑一起發送的參數及文件
n? 下面的代理服務器等可以忽略,按需要填寫
n? Use keep Alive:當該選項被選中時,jmeter和目標服務器之間使用Keep-Alive方式進行HTTP通信,默認選中
n? USE multipart/from-data for HTTP POST:當發送HTTP POST請求時,使用USE multipart/from-data方式發送,默認不選中
n? Parameters同請求一起發送參數:在請求中發送URL參數,對于帶參數的URL,jmeter提供了一個簡單地對參數化的方法。用戶可以將URL中所有參數設置在本表中,表中的每一行是一個參數值對(對應URL中的名稱1=值1)
n? 通請求一起發送文件:在請求中發送文件,通常,HTTP文件上傳行為可以通過這種方式模擬
n? ?:當該選項被選中時,jmeter在發送HTTP請求并獲得響應的HTML文件內容后,還對該HTML進行Parse并獲取HTML中包含的所有資源(圖片、flash等),默認不選中,如果用戶只希望獲取頁面中的特定資源,可以在下方的文本框中填入需要下載的特定資源表達式,這樣,只有能匹配指定正則表達式的URL指向會被下載
n? 此取樣被當成監視器,在Monitor Results Listener中可以直接看到基于該取樣器的圖形統計信息,默認為不選中
n? 選中該項,在執行時只記錄服務端響應數據的MDS值,而不記錄完整的響應數據,在需要進行數據量非常大的測試時,建議選中該選項減少取樣器記錄響應數據的開銷
- Jmeter的參數化方法
參數化:錄制腳本中有登錄操作,需要輸入用戶名和密碼,假如系統不允許相同的用戶名和密碼同時登錄,或者想更好的模擬多個用戶來登錄系統。
這個時候就需要對用戶名和密碼進行參數化,使每個虛擬用戶都使用不同的用戶名和密碼進行訪問。
一、利用函數助手獲取參數值
選項->函數助手對話框
__CSVRead,
__Random,
生成的函數字符串:${__Random(,,)}第一個參數為隨機數的下限,第二個參數為隨機數的上限,第三個參數為儲存隨機數的變量名;
?${__CSVRead(,)}第一個參數是文件名(包含路徑),第二個參數是文件中的列(列數從0開始);
參數化數據
我們需要“參數化”的數據,用記事本寫了五個用戶名和密碼,保存為.dat格式的文件,編碼問題在使用CSV Data Set Config參數化時要求的比較嚴格,記事本另存為修改編碼UTF-8. ?注意用戶名和密碼是一一對應的,中間用戶逗號(,)隔開。
我將這個文件放在了我的( C:\JmeterWorkSpace\t.dat ?)路徑下。
?
?
?
__CSVRead:復制生成的參數化函數,打開登陸請求頁面,在右則的參數化中找到我們要參數化的字段,這里對用戶名和密碼做參數化,第一列是用戶名,列號為0;第二列是密碼,列號為1;修改函數中對應的參數化字段列號就可以了,點擊運行會調用相應路徑下的參數文件。?CSV文件列號是從0開始的,第一列0、第二列1、第三列2、依次類推。。
?
?
?
_Random函數是從某數據段隨機讀取數據替換參數,當需要添加多條數據記錄且某些字段需要唯一性時使用。
復制生成的參數化函數,打開登陸請求頁面,在右則的參數化中找到我們要參數化的字段,這里對用戶名和密碼做參數化,第一列是用戶名,列號為0;第二列是密碼,列號為1;修改函數中對應的參數化字段列號就可以啦。
?
現在我們的參數化設置完成,在腳本的時候,會調用我們C:\JmeterWorkSpace盤下面的t.dat文件,第一列是用戶,第二列是密碼。
二、利用配置元件(CSV Data Set Config)
1.選中線程組,點擊右鍵,添加-配置元件-CSV?Data?Set?Config
?
???Delimiter ---?如文件中使用的是逗號分隔,則填寫逗號;如使用的是TAB,則填寫\t;(如果此文本文件為CSV格式的,默認用英文逗號分隔)
Recycle on EOF:是否循環讀入,因為CSV Data Set Config一次讀入一行,分割后存入若干變量中交給一個線程,如果線程數超過
文本的記錄行數,那么可以選擇從頭再次讀入.
Recycle?on?EOF與Stop?thread?on?EOF結果的關聯:
Recycle on EOF :到了文件尾處,是否循環讀取參數,選項:true和false
Stop thread on EOF:到了文件尾處,是否停止線程,選項:true和false
當Recycle on EOF 選擇true時,Stop thread on EOF選擇true和false無任何意義,通俗的講,在前面控制了不停的循環讀取,后面再來讓stop或run沒有任何意義
當Recycle on EOF 選擇flase時,Stop thread on EOF選擇true,線程4個,參數3個,那么只會請求3次
當Recycle on EOF 選擇flase時,Stop thread on EOF選擇flase,線程4個,參數3個,那么會請求4次,但第4次沒有參數可取,不讓循環,所以第4次請求錯誤
2.填寫剛才定義好的變量
?
?
?
需要說明一下:函數助手方法要比CSV控件方法參數化功能要弱,推薦使用CSV控件方法。
三、用戶自定義變量
一般定義測試系統的固定使用的變量,比如主機地址端口號,數據庫賬號密碼等。選中線程組,點擊右鍵,添加-配置元件-用戶定義的變量
用戶自定義變量中定義的所有參數的值在測試計劃的執行過程中不能發生取值的改變,因此一般僅將測試計劃中不需要隨迭代發生改變的參數(只取一次值的參數)設置在此處。例如應用POST和port
取樣器中的host和port用${host}和${port}代替,即使被測應用的部署服務器發生了變化,只需要簡單地修改host和port參數的取值即可
?
?
值可以直接輸入,也可通過函數__CSVRead從文件中讀取,還可以通過前綴加隨機數和方法獲取。
比如用戶名為user_0到user_100的用戶,那么用戶名可設置名user_${__Random(0,100,)}
?
?
但是這種每次執行的多個線程所替換的參數一樣,因為先獲取到隨機參數,再執行多個HTTP請求
四、用戶參數
右鍵快捷菜單中選擇? 添加-前置處理器-用戶參數
與用戶自定義變量不同的是,用戶參數列表中的參數取值可以在測試計劃執行過程中發生變化。
?
?
如圖,username和password分別有兩組不同的取值。通過界面右下方的四個按鈕,可以向列表中增加參數,增加參數值,刪除參數和刪除參數值。
“每次迭代更新一次”選項控制參數取值的變化規則,如果選中該選項,則參數的值在每個迭代中保持不變,在新的迭代開始時取下一個值。如果取消該選項,則參數值在每個在其作用域內的sampler發出請求時取下一個可用值。
如果參數的取值范圍很小,使用用戶比較合適,如果參數的取值范圍很大,建議使用csv dada set config方法
五.jmeter的屬性
以命令行方式運行測試計劃時,用戶可指定從命令行輸入的值替換測試計劃中的某些值。例如:以命令行指定線程組的線程數和運行時長。
_property函數具有3個參數,分別為屬性名稱、存放屬性值的變量名稱(可選),屬性默認值(可選)。
Jmeter?–n?–t?test.jmx?–Jthreadcount=10?–Jduration=60?
-J表示設置property的值,以上命令行表示:10個線程運行,運行時間為60秒。
六.從數據庫中獲取
當參數的值沒有規律且量比較大時,可以選用這種方法。
具體做法如下:
4.1?下載MySQL JDBC “http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.12.zip/from/http://ftp.jaist.ac.jp/pub/mysql/”
4.2 解壓下載的zip包后,將其中的mysql-connector-java-5.1.12-bin.jar放到Jmeter的lib目錄下
4.3 添加“配置元件”->“JDBC Connection Configuration”,設置下列參數:
Database URL:jdbc:mysql://host:port/db(如jdbc:mysql://localhost:3306/testlink
JDBC Driver class:com.mysql.jdbc.Driver
username:連接數據庫的用戶名(如root)
password:連接數據庫的密碼
4.4 添加“Sampler”->“JDBC Request”,在SQL Query中輸入查詢語句,如下:
SELECT CONCAT (“[",
GROUP_CONCAT(
CONCAT("{username:'",login,"'"),
CONCAT("{password:'",password),"'}"),"]“) AS json FROM users
4.5 在4.4中的JDBC請求中添加“后置處理器”->“正則表達式提取器”,以提取3.4中的用戶名和密碼為例設置正則表達式提取器的參數:
引用名稱:user
正則表達式:username:’(.+?)’\{password:’(.+?)’
模板:$1$$2$
使用時,user_g1即為用戶名,user_g2即為對應用戶名的密碼;更多正則表達式提取方法參見Jmeter正則表達式提取器
5.用正則表達式從前面請求的響應數據中提取,具體操作見Jmeter正則表達式提取器
斷言驗證
在web測試中,有的時候,即使我們測試返回的response?code為200,也不能保證該測試是正確的,這時候,我們可以用到響應斷言,通過對比響應的內容來判斷返回的頁面是否是我們確定要返回的頁面。
選擇我們要判斷的頁面,點擊添加斷言----響應斷言,將會出現如下圖:
?
?
?
名稱:隨意,這里我們不做改動
注釋:隨意
Apply?to:這里我們選擇默認值
要測試的響應字段:這里我們選擇響應的文本,即返回的頁面信息
模式匹配規則:這里我們選擇包括,即響應的文本是否包括我們驗證的信息
要測試的模式:開發者名稱,即我們需要驗證,開發者名稱是否在響應文本中存在,也可以添加更多的字段來驗證。
其他還有文件大小和響應時間等的斷言,后面介紹。
e、添加監聽器
我們做性能測試的時候,經常需要各種數據來驗證我們的測試結果,Jmeter里面也提供了相關的功能,這里主要說一下Aggregate?Report聚合報告。
點擊添加---監聽器,選擇:查看結果樹,和聚合報告,如果需要看到斷言信息也可以選擇斷言結果,將設置的一切保存之后,然后點擊啟動,系統將會運行,將結果在監聽器中表現出來。
?
四、分析結果
?
1、查看結果樹
?
如圖所示:成功的為綠色,失敗則顯示為紅色。如果測試的結果太多,你只需要看到錯誤的頁面,則勾選【僅日志錯誤】
?
?
2、聚合報告(Aggregate?Report)
?
?
其中:
Label:標簽,即我們上面的請求名稱
#Samples:本次場景中一共發出了多少個請求
Average:平均響應時間
Median:中位數,也就是50%的用戶的響應時間
90%Line:表示90%的用戶的響應時間,如果最小值和最大值相差很大的話,我們一般選擇這個作為最終測試結果
Min:最小響應時間
Max:最大響應時間
Error%:出錯率,本次測試中出現錯誤的請求的數量/請求的總數
Throughput:吞吐量
KB/sec:每秒從服務器端接受到的數據量
?
五、監控內存及CPU等
?
很多時候,我們測試性能都需要查看內存和CPU等信息來判斷系統瓶頸,關于CPU和內存的監控,Jmeter并沒有很好的支持,很多時候,我們都只能通過系統的資源監控器來觀察,一閃而過不會記錄下來,很不方便。幸好google開發了一款專門監控的Jmeter插件,彌補了Jmeter這方面的不足,下面就來介紹一些這款插件——JMeterPlugins,目前我用的是0.5.6版本。
?
1、JMeterPlugins的下載地址
?
地址:http://code.google.com/p/jmeter-plugins/downloads/list,選擇需要的版本,下載
?
2、JMeterPlugins的配置使用
?
將下載的文件解壓,得到如下目錄:
?
?
將JMeterPlugins.jar包復制到Jmeter的lib目錄下面的ext目錄下面,重新啟動Jmeter,我們點擊添加就可以看到出現了很多的jp@gc-開頭的文件.
這里監控內存我們使用的是:jp@gc?-?PerfMon?Metrics?Collectot
在使用之前,我們需要運行/serverAgent/startAgent.bat這個文件,我們需要將serverAgent目錄及下面的文件復制到我們測試的服務器上,然后點擊打開(我這里是本機,直接在本機上面打開這個應用系統即可),它的默認端口為4444。
一切準備好后,點擊啟動,即可得到如下圖:
?
?
你就可以得到系統運行時,你所需要的常用的性能值了。
?
六、監控內存及CPU等(jconsole)
?????? 最近逛論壇的時候,發現了一個比較好的監控內存CPU等的小工具,本著開源小工具多多益善的原則,記錄一下。
????????? 打開這個小工具的步驟很簡單,如果你已經配置好了Jmeter運行的環境,那么你也就不用去做其他的配置,直接?點擊:開始——》運行——》輸入cmd——》然后在出現的命令行界面輸入“jconsole”即可彈出一個【java監視和管理控制臺】,
?
將會彈出如下界面:
?
?
???????? 這里我們選擇本地進程,并點擊一下sun.tools.jconsole.JConsole這一行,然后點擊連接,就可以查看我們的內存和CPU的使用情況了。
???????? 當然,我們要得到服務器的內存使用等信息,也可以選擇?本地進程下面的遠程進程,在文本框中輸入我們需要測試的服務器的IP地址:端口,然后在下面輸入用戶名和密碼,點擊連接,看看會出現什么情況。
?
?
v? Jmeter元件的作用域
配置元件(config?elements?):元件會影響其作用范圍內的所有元件。
前置處理程序(Per-processors):元件在其作用范圍內的每一個sampler元件之前執行。
定時器(timers?):元件對其作用范圍內的每一個sampler?有效
后置處理程序(Post-processors):元件在其作用范圍內的每一個sampler元件之后執行。
斷言(Assertions):元件對其作用范圍內的每一個sampler?元件執行后的結果執行校驗。
監聽器(Listeners):元件收集其作用范圍的每一個sampler元件的信息并呈現。
在jmeter中,元件的作用域是靠測試計劃的的樹型結構中元件的父子關系來確定的,作用域的原則是:
- ?取樣器(sampler)元件不和其它元件相互作用,因此不存在作用域的問題。
- ?邏輯控制器(Logic?Controller)元件只對其子節點中的取樣器?和?邏輯控制器作用。
- ?除取樣器?和邏輯控制器?元件外,其他6類元件,如果是某個sampler的子節點,則該元件公對其父子節點起作用。
- ?除取樣器和邏輯控制器元件外的其他6類元件,如果其父節點不是sampler?,則其作用域是該元件父節點下的其他所有后代節點(包括子節點,子節點的子節點等)。
通過兩個栗子(例子)來理解一下他們的作用域。
A(注:下圖只是為了說明作用域,無法正常運行)
?
?
取樣器(HTTP請求1?、FTP請求2?、TCP取樣器3)?邏輯控制器(循環控制器)?監聽器(圖形結果1、聚合報告2)
*??HTTP請求1?、FTP請求2?、TCP取樣器3?元件沒有作用域的概念。
*??循環控制器?元件作用域名是其子節點FTP請求2?、TCP取樣器3?。
*??圖形結果1?元件的作用域是是FTP請求2?、TCP取樣器3。
*??聚合報告2?元作的作用域是HTTP請求1?、FTP請求2?、TCP取樣器3
B?(注:下圖只是為了說明作用域,無法正常運行)
?
?
這個例子稍微復雜一些,包含的元件較多。先來分分類。
取樣器(HTTP請求?、FTP請求?、TCP取樣器、?JDBC?Request?)邏輯控制器(循環控制器、隨機控制器)定時器(固定定時器、Uniform?Random?Timer?)斷言(響應斷言、XML斷言)監聽器(圖形結果、聚合報告)
根據作用域原則,這些元件的作用域分別為:
*??HTTP請求?、FTP請求?、TCP取樣器、?JDBC?Request??元件沒有作用域名概念
*??循環控制器的作用域為?FTP請求?、TCP取樣器和?隨機控制器
*??固定定時器作用于HTTP請求?,?Uniform?Random?Timer?作用于所有取樣器
*??響應斷言作用于JDBC?Request??,?XML斷言作用于FTP請求?、TCP取樣和JDBC?Request?。
*??圖形結果作用于FTP請求?、TCP取樣和JDBC?Request?,聚合報告作用于作用于所有取樣器。
其實,通過上面的分析,并沒有你想象的那么復雜,我們從各個元件的層次結構就可以判斷每個元件的作用域。
Jmeter?中的邏輯控制器(Config?Elements)在其作用范圍內的行為與其他元件相比稍有不同。邏輯控制器元件分兩大類:默認配置(HTTP默認請求、FTP默認請求等)和?管理(HTTP?頭管理、HTTP?cookie?管理等)。
其中默認配置(Configuration?Defaults)元件中設置的值可以在作用域內疊加,例如,在一個測試計劃中添加兩個HTTP?默認請求,其中第一個默認設置?Server?name?or?IP?為www.google.com?,第二個默認設置Path?為/page-not-exist?,?則在這兩個元件作用域內的所有HTTP?默認請求,其默認的Server?name?or?IP?和Path?均為Server?name?or?IP?和?/page-not-exist?。(你有一個故事,我有一個笑話,我們一交換,兩個人都分別擁有了一個故事加一個笑話。)
管理(Manager)類邏輯控制器元件的效果則不能進行疊加。如果兩個或兩個以上相同的管理類元件作用域有重疊。則在重疊作用域內的取樣器元件只會隨即受到其中一個的作用,這樣會導致取樣器行為的不確定性。因此,在使用管理類邏輯控制器時,一定要注意保證相同的管理類元件的作用域不發生重疊。
v? jmeter元件的執行順序
了解了元件有作用域之后,來看看元件的執行順序,元件執行順序的規則很簡單,在同一作用域名范圍內,測試計劃中的元件按照如下順序執行。
(1)配置元件(config?elements?)
(2)前置處理程序(Per-processors)
(3)定時器(timers?)
(4)取樣器(Sampler)
(5)后置處理程序(Post-processors)?(除非Sampler?得到的返回結果為空)。
(6)斷言(Assertions)(除非Sampler?得到的返回結果為空)。
(7)監聽器(Listeners)(除非Sampler?得到的返回結果為空)。
關于執行順序,有兩點需要注意:
*??前置處理器、后置處理器和斷言等元件功能對取樣器作用,因此,如果在它們的作用域內沒有任何取樣器,則不會被執行。
*??如果在同一作用域范圍內有多個同一類型的元件,則這些元件按照它們在測試計劃中的上下順序一次執行。
?
?
- ?
?
https://www.cnblogs.com/icy88/p/10456619.html
http://www.cnblogs.com/yangxia-test/p/3966154.html
http://blog.sina.com.cn/s/blog_671c968b0100jduq.html
http://www.cnblogs.com/fnng/archive/2012/12/27/2836506.html
轉載于:https://www.cnblogs.com/jingdenghuakai/p/11131964.html
總結
以上是生活随笔為你收集整理的badboy的录制和jmeter的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【链接】Linux C/C++ 学习路线
- 下一篇: 树:重建二叉树