要:最近筆主帶著兩位新入職的同事進行了公司新平臺的壓力測試,工具選擇的當然是Loadrunner,小筆發現有很多剛入門Loadrunner的小白都會遇到很多相似的問題,但是這些問題并不能在各大搜索網站上得到完善的解決。因此,小筆選中了51testing這個流量給力認可度高的專業測試平臺給各位loadrunner新手提拱一份參考,希望能夠幫助到有需要的朋友。
在如今的大數據時代,軟件、測試、自動化測試都在扮演者不可或缺的重要角色,我們開發一個平臺要求的已經不僅僅是功能要正確,更要考慮的是隨著訪問量的增加給客戶帶來的壓力體驗。
OK,引文部分已經完成,下面我們一起走進Loadrunner的壓力測試吧。
跟著小筆一起動手來完成此次的壓力測試吧!一個完整的壓力測試三部曲:
1.腳本錄制->2. 場景設計->3. 結果分析
場景介紹:此處我們選擇最具有代表意義的多用戶并發登錄系統,我們測試150個用戶并發登錄平臺A的時候給系統增加的壓力情況。
測試背景: Windows Server 2008+Loadrunner11+IE8
1.錄制腳本(Virtual User Generator)
安裝好Loadrunner后(安裝比較容易,在此暫且省略),打開Virtual User Generator進行腳本錄制,錄制時相關設置:
Step 1、Catalog選擇'Web(HTTP/HTML)',點擊[Create] 按鈕。
Step 2、[URL Address]的值輸入需要測試系統的地址,點擊[OK]按鈕。
Step3、開始進行登錄系統的腳本錄制,一般情況下,我們在錄制的過程中需要切分action,不同的操作放在相對應的action里,此處因為操作簡單,我們暫且不去細分。
Step4、生成腳本
Step5、優化腳本:添加集合點,事務,思考時間。
事務:定義一個action的范圍,以便對此action進行某種操作。比如對該action進行計時操作。
語句:lr_start_transaction("login");
集合點:正如字面意思,等待所有的事務集合到一起進行的操作,用來執行負載測試。要實現此操作,可以同步 Vuser 以便恰好在同一時刻執行任務。通過創建集合點,可以配置多個 Vuser 同時執行某個操作。當某個 Vuser 到達該集合點時,將進行等待,直到參與該集合的全部 Vuser 都到達。指定數量的 Vuser 均到達后,釋放所有這些 Vuser。
語句:lr_rendezvous("login");
思考時間:思考時間即等待時間,是一種延遲操作,很好理解。
語句:lr_think_time(5);
2.場景設計(Controller)
Step1、打開 controller,添加上面優化好的腳本,設置場景模式。(此處命名為testLogin)設置場景如下:
Step2、點擊【Start Scenario】運行腳本,結果如下:
Step 3、點擊紫色框中按鈕,生成測試結果報告。
2.結果分析(Analysis)
Analysis 可以說是Loadrunner壓力測試的重點和難點,所以對于新手而言 analysis不是測試的結束,而是開始。因此,對于各項測試結果我們要做出準確的理解和判斷。在本次的實踐中,我們做的是一個比較簡單的場景,那么針對此場景的各項結果如下:
【測試報告分析摘要】,這里顯示了實際測試過程中,總體的測試結果。我們可以選擇更過的圖來分析系統的負載情況。
【Running Vuser】結果分析:Vuser是并發測試選取的虛擬用戶,從下圖中可以看出,Vuser是每5秒增加5個,在02:20秒的時候達到了頂峰值150,持續運行了一分鐘后,逐漸退出系統。
【Hits per Second】結果分析:每秒提交的HTTP請求數量,在本場景中執行的時間比較短,因此結果不是很明顯,建議大家此處可以放寬執行時間,這樣得到的結果比較準確。
【Throughput】結果分析:吞吐量是指返回的應用層數據的值,吞吐量單位是以字節數為準,表示Vuser在任何給定的某一秒上從服務器獲得的數據量。借助此圖我們可以依據服務器吞吐量來評估Vuser產生的負載量。該數據越小說明系統的帶寬依賴就越小,通過這個數據可以確定是不是網絡出現了瓶頸。
【Tansaction summary】結果分析:事務概要說明,統計執行的事務數量,比如在本次場景中,login和exist這兩個事務的值都是855次。同事也監控了事務的Pass數和Fail數,了解負載的事務完成情況。通過的事務數越多,說明系統的處理能力越強;失敗的事務數越小說明系統越可靠。這個比較容易理解,不多闡述。
【Average Transaction Response Time】- 事務響應時間結果分析:這里需要注意的一個問題是因為在Transaction Response Times里面是場景運行時記錄的響應時間的最大值最小值與平均值,而Average Transaction Response Time 是按照采樣率每隔幾秒鐘取一個值畫出來的圖,然后根據圖來記錄最大值最小值和平均值,在報告中也可以看到,Average Transaction Response Time中寫的是圖最大值、圖小值和圖平均值。如果將采樣率設置小一些,這兩個值就會比較接。所以,抽象率是關鍵。那么下圖現實的結果可以看出,login這個action最大值是14.978,最小值是2.134,平均值是7.869;exist最小值是0.02,最大值0.214,平均值是0.078 。這些時間是可以接受的壓力響應的時間。
本次測試過程中常見問題匯總:
之所以加上問題匯總是因為筆主覺得大家在做壓力測試的時候,這類問題的出現率很高,所以,在此稍微總結一下。
問題1:averager esponse time響應時間過長?(與實際偏差甚大完全不合理)
解決方法:導致此問題的原因很多,但是我們可以從以下幾類去分析:1、是否在腳本中添加了多長時間的思考時間。2、事務和集合點的先后順序是否正確,正確的順序是把集合點放在事務前面,反之則也會增加事務響應時間的值。3、網速問題,網速一般不會造成太大的偏大,但是不排除并發量很大的情況下造成的延誤。
問題2:LoadRunner超時錯誤
解決方法:首先在運行環境中對超時進行設置,默認的超時時間可以設置長一些,再設置多次迭代運行,如果還有超時現象,需要在“Runtime Setting”>“Internet Protocol:Preferences”>“Advanced”區域中設置一個“winlnet replay instead of sockets”選項,再回放是否成功。
問題3:LoadRunner腳本中出現亂碼
解決方法:重新錄制腳本,在錄制腳本前,打開錄制選項配置對話框進行設置,在“Recording Options”的“Advanced”選項里先將“Surport Charset”選中,然后選中支持“UTF-8”的選項。
問題4:在錄制過程中IE頁面上,某些控件顯示有問題,導致錄制不了。
解決方法:一般情況下,將被測系統的URL加入到可信任站點即可解決此類問題。
問題5:Error -27796:Failed to connect to server‘XXXX’
這個問題可以說是經常遇到但是不易被解決的難題,我們大致可以這樣去排查
(1)檢查run time setting中的請求超時時間Preferences中點擊Options‘HTTPrequest connect timeout’,‘HTTP-request receieve timeout’,‘Step download timeout’,查看其值是否為1000、1000、10000;run time setting設置完了后記住還需要在control組件的option的run time setting 中設置相應的參數;
(2)Browser Emulation中的Download non-HTML resources選項去掉,點擊OK即可如果還不能解決的話,繼續嘗試第3種方法
(3)設置runt time setting中的internet protocol-preferences中的advaced區域有一個winlnet replay instead of sockets選項,選項后再回放就成功了。如果實在不行的話就試試重啟大法吧,因為有些問題的確可能是因為工具問題,網絡問題,機子問題等等。
總結:用Loadrunner進行壓力測試難免會遇到各種問題,細心排查總能一一解決,所以筆者想對剛剛踏入這一行業的朋友說,不急不燥認真去思考,問題總能被解決。希望此篇文章對大家有所幫助,任何問題都可以留言喔。
1)關注+私信回復:“測試”,可以免費領取一份10G軟件測試工程師面試寶典文檔資料。以及相對應的視頻學習教程免費分享!,其中包括了有基礎知識、Linux必備、Mysql數據庫、抓包工具、接口測試工具、測試進階-Python編程、Web自動化測試、APP自動化測試、接口自動化測試、測試高級持續集成、測試架構開發測試框架、性能測試等。
2)關注+私信回復:"入群" 就可以邀請你進入軟件測試群學習交流~~
irtual User Generator是一種基于錄制回放的工具,當你按照業務流程執行了某個軟件,它會把操作過程中產生的協議錄制下來,自動轉換成腳本語言,執行完成對用戶行為的模擬,從而進一步對系統產生負載。而性能測試的第一步也是最重要的一步,即生成虛擬用戶腳本(Vuser Script)。在VuGen中錄制得到用戶的行為就好比虛擬了一個用戶的行為。
通常使用VuGen進行用戶行為模擬的流程:
VuGen提供了整個腳本的開發環境,腳本和場景決定了性能負載的方式。當設定的負載超出用戶行為,得到的結果偏悲觀;而設定的負載如果只模擬了部分用戶行為,得到的結果偏樂觀。好比需要測試一下國家體育館鳥巢的觀眾疏散能力,如果模擬8萬老年人進行疏散,那么得出的時間比較正常時間偏短,而這兩個時間都無法正確地說明整個鳥巢的正常疏散時間。
對于一個性能測試工程師來說,并不需要準確定位性能問題產生的原因,而應強調如何發現性能問題。這就像功能工程師并不需要準確定位缺陷產生的原因,而應強調如何發現缺陷。當然作為一名優秀的性能測試工程師,也應該具備性能瓶頸定位和分析的能力,不過這不是一朝一夕能做到的,需要長久的知識積累。
打開VuGen會看到Start Page頁面,這里提供了一些相關資源(包括常用的協議,在線資源和VuGen11的新功能)的介紹,如下圖:
1.VuGen界面介紹
新建一個腳本,選擇Web(HTTP/HTML)協議后,即可得到開發界面。在VuGen中提供了兩種腳本視圖方式(Script/Tree),可以通過菜單欄的對應按鈕進行切換,也可以通過View菜單下的選項進行切換。
1.1Tree圖形化模式
錄制腳本后,在Tree圖形化模式下,左側會列出該腳本使用的函數(雙擊可以直接使用圖形化修改函數),右側提供了該請求對應的截圖(自行編寫的腳本和部分協議不會帶有Snapshot截圖),如下圖:
一般通過這種視圖來檢查錄制是否正確或進行某些函數的圖形化修改。在Loadrunner11中對于Tree模式有了一定的功能加強,在該模式中提供了HTML View和HTTP View兩種模式,其中,HTTP View可以幫助我們更加清晰地了解頁面刷新時所產生的所有請求,如下圖:
這里我們可以看到HTTP View下的Grid模式會列出一個HTTP Flow列表,該列表列出了訪問Phpwind首頁面所產生的所有HTTP請求(有點像HTTPWatch的請求列表),并且還有每一個請求發送的時間、應答的時間、訪問方法、下載大小等。
而在HTTPFlow下側列出了選中請求數據包及應答數據包,當使用DFE(Data Format Extension)功能時,右側會擴展一個新的Editor標簽。
如果將Grid模式切換為Tree模式,可以更加直觀地看到一個主請求下的附屬請求,如下圖:
VuGen11中的HTTPView視圖提供了更加詳細的數據包查看功能,但是響應較慢且無法全局查詢,讓這個新功能還不夠完美。
1.2腳本模式
在腳本模式界面中,左側是腳本Action的列表,右側是代碼部分。從開發方便的角度來說,一般使用這個模式的情況較多,如下圖:
1.3Output Window
在屏幕的下方提供了Output Window,包含錄制、回放、關聯等相關信息的輸出管理。
在腳本運行時,Output Window還會增加RunTime Data標簽,如下圖:
里面包含了腳本運行時的參數名和值,還有腳本迭代的次數。
、控制臺
1、基準測試:用戶數設置為1,運行時間設置為5分鐘或者迭代次數設置為5次
2、并發測試:多用戶,集合點測試
3、綜合場景:測試web tours系統
前提:多個腳本(提交城市、提交訂單、查詢訂單)
4、錄制代碼的順序:
a.創建一個腳本(根據被測系統的協議)
b.選擇錄制模式(默認HTML)
c.如果關心的是登錄后的請求,就把代碼塊切換到vuser_init中,填寫url address被測系統的url地址
d.開始錄制,輸入用戶名密碼提交登錄操作
e.登陸后為登錄成功界面添加檢查點(一般測試都是測試用戶登陸后使用被測系統的情況,所以需要確保登錄是成功的)
f.切換代碼塊在action中,根據業務流程錄制代碼
g.在關心的請求之前:
--插入集合點
--插入開始事務
--提交關心的請求
--插入結束事務
--插入檢查點
h.切換代碼塊在vuser_end中,錄制退出請求,關閉瀏覽器,停止錄制,保存代碼
i.把代碼中的集合點和開始事務剪切到關心請求上面
5、解釋控制臺
(1)打開控制臺就是一個場景
(2)scenario group:場景組,場景中有哪些用戶和哪些腳本--相當于一個班級
group name:組名,哪些用戶運行某個腳本稱為一組,組名默認是腳本的名稱----相當于一個班級里的小組
script path:腳本路徑,當前要測試被測系統的哪些業務,就把這些業務的腳本添加到控制臺---相當于一個班級中的每個小組執行的任務是什么
quantity:虛擬用戶數,為每個腳本分配多少用戶執行去執行---相當于班級里一個小組有多少個同學
load generator:虛擬用戶壓力生成器,默認實際用戶對被測系統執行的壓力
schedule name:計劃的名稱
schedule buy:任何空值虛擬用戶去運行腳本
--scenario:控制臺中所有的用戶按照一個計劃去運行腳本
--group:為每一組中的虛擬用戶單獨設置一個計劃,有多少組(腳本)就可以設計多少個計劃
run moda:運行模式
--real Word schedule:
load內置的運行方式,固定只能10個戶運行場景5分鐘(一般不符合測試要求)
--basic schedule:手動設置運行方式
(4)常用計劃組合:schedule by選擇scenario+run mode選擇basic schedule
(5)global schedule:計劃
initial:初始化虛擬用戶,運維虛擬用戶需要使用load generator組件生成負載才能運行腳本,模擬測試,而load generator生成負載需要使用pc機資源,如果同時模擬大量的虛擬用戶,有可能會失敗,可以讓load generator每隔一段時間初始化一定的虛擬用戶
start vuser:讓虛擬用戶開始執行腳本,進行測試,如果讓大量的虛擬用戶同時執行腳本,有可能會報錯,測試時需要讓所有用戶都能夠成功運行腳本,進行測試才有意義,所以需要確保所有用戶都執行代碼成功,就要設置讓虛擬用戶慢慢的開始執行腳本
duration:持續時間,虛擬用戶執行場景的時間,虛擬用戶執行場景時,執行完一次腳本后,未到達持續時間,將繼續再次執行腳本
stop vuser:停止虛擬用戶,虛擬用戶不再運行腳本,退出系統,如果大量的虛擬用戶同時從被測系統退出,有可能會報錯,需要隔一段時間停止一定的虛擬用戶
(7)運行場景時,常見的錯誤
1)connot connect server.
原因:沒有連接到服務器
解決方案:
a.手動打開被測系統,驗證服務器是否宕機
--如果宕機:就是場景中設置的虛擬用戶太多,導致被測系統壓力太多
--未宕機:場景中虛擬用戶運行時壓力太大,修改initialize初始化虛擬用戶和start vuser開始虛擬用戶選項,修改時間間隔長一些
(8)監控資源補充:
process:private bytes,記錄當前被占用的內存大小
process:working set,記錄當前正在使用的內存大小
system:context swiches,上下文切換,當CPU處理事務時,1個事務未處理完又被調用處理另外一個事務,這樣從一個事務切換到另一個事務的狀態稱為上下文切換,上下文切換越頻繁,證明程序設計有問題
補充:
一、虛擬用戶(vuser)
1、虛擬用戶模擬實際用戶執行腳本對被測系統進行操作(測試)
2、使用load generator生成負載(創造出虛擬用戶)
3、底層當使用虛擬用戶進行測試時,在任務管理器中會生成mmdrv.exe的進程
4、進程:當計算機啟動一個程序,就會在任務管理器中啟動一個進程,進程需要耗費資源(cpu、內存、硬盤...)
5、如果模擬虛擬用戶以進程的方式模擬,控制臺中設置了多少個虛擬用戶,就會啟動多少個進程
6、當測試時取藥多用戶,一般會使用線程的方式模擬用戶,這樣多個線程可以共用一個進程的資源,一臺pc機就可以模擬出更多的虛擬用戶,只有啟用線程安全的程序才能使用線程的方式
二、多機聯合
練習:使用多機聯合實現,自己的機器購買2張,同桌的機器購買3張票
1.什么是多機聯合?
在測試的過程中,可以連接不同的機器為性能測試模擬更多的模擬用戶,連接其他機器的load
generator的技術就是多機聯合
2、為什么要使用多機聯合?
因為測試時模擬虛擬用戶需要占用PC的資源,一臺pc的資源有限,為了模擬更多的虛擬用戶,就需要使用更多的PC,這時就需要使用多機聯合技術
3、多機聯合的步驟:
a.確定連接哪臺機器,并查看其IP地址
b.確保測試機與待連接的機器網絡能夠ping通,并關閉防火墻
c.在待連接的機器上安裝load generator組件,該組件也可以安裝在Linux系統上,loadrunner其他組件則不能
d.在待連接的機器上開啟服務,loadrunner agent process
e.在測試機的控制臺中,點擊scenario菜單欄,選擇load generator->點擊add按鈕->輸入待連接機器的IP地址,選擇機器類型Windows、Unix,確定
f.選中已經添加的IP地址,點擊connect按鈕連接,status為ready則連接成功
注意:錄制順序
1、添加集合點
2、開始事務
3、發送請求
4、結束事務
5、檢查點
問題:為什么錄制提交航班的代碼,需要把提交城市的請求錄制在action中
關系的請求:提交航班
action:點擊flights按鈕+提交城市+提交航班
init:打開被測系統->登錄
action:點擊flights按鈕+提交城市+提交航班
end:退出系統
三、場景
1.綜合場景
(1)添加腳本,把被測系統主要業務流程的腳本添加到控制臺中
(2)分別為每個腳本合理分配虛擬用戶數(需求中的在線用戶數)
(3)設置虛擬用戶如何執行場景:
a.schedule by:scenario,所有腳本按照一個計劃執行
b.run mode:basic schedule,手動設置虛擬用戶執行場景的方式
c.initialize:初始化虛擬用戶,由于綜合場景中虛擬用戶較多,需要設置隔一段時間初始化多少虛擬用戶,如果間隔時間太短,load
generator壓力大,虛擬用戶會初始化失敗,將無法運行腳本
d.start vuser:開始虛擬用戶,虛擬用戶開始執行腳本,如果所有虛擬化同時執行腳本,容易報錯,需要設置每隔一段時間開始幾個虛擬用戶,確保所有用戶都能執行腳本,測試才有意義
報錯:failed to connect to server
e.duration:持續時間,綜合場景考察被測系統的綜合能力,為了得到穩定的值,綜合場景需要持續一個小時,或更長的時間
f.stop vuser:虛擬用戶停止運行,如果所有虛擬用戶同時停止,容易報錯,所以需要每隔一段時間停止幾個虛擬用戶
報錯:vuser_end(行號):error....
(4)設置虛擬用戶如何運行場景中的腳本:
a.打開run_time setings
b.run logic:1次,因為為場景設置了duration時間,迭代次數只需設置為1
c.think time:思考時間,腳本中步驟與步驟之間的間隔時間,設置為random,值根據具體情況設置
d.pacing值,迭代與迭代之間的間隔時間,設置為random
e.miscellaneous:勾選continue on error,當場景中出現少數錯誤時,是被允許的
f.browser emulation:勾選前面三個復選框,綜合場景模擬實際用戶被測系統情況,用戶一般不會頻繁清除瀏覽器緩存,所以要模擬用戶操作
g.preference:設置4個超時時間為600
(5)設置連接load generator的超時時間
a.tools->options->timeout->load generator
connect連接:600
disconnect取消連接:600
(6)設置場景運行結果的保存路徑
results->results settings->指定文件名稱和文件路徑
(7)在run界面Windows resources窗口右擊選擇->add:添加測量(添加window資源項)->在上部分server欄點擊add添加被監控服務器的IP地址及platform平臺->在下部分監控資源項欄點擊add添加需要監控的資源項
(8)如果要在綜合場景中模擬部分用戶并發
scenario->rendzvous->policy->第二個單選按鈕設置少部分百分比
(9)如果要使用多機聯合
scenario->load generator->add->添加被測系統連接的負載機IP地址及平臺->選擇IP地址點擊connect連接上該ip地址的電腦->在run界面點擊右上角vuser三個小人按鈕,為虛擬用戶分配不同的load generator
(10)在run界面點擊start scenario開始執行場景
5、排除運行場景時的錯誤:
(1)failed to connect to server....(未連接到服務器)
a.檢查服務器是否宕機
b.檢查start vuser是否時間間隔太短
c.被測系統不支持那么多用戶
(2)text=..... not found
web_reg_find(檢查點報錯)
a.打開腳本驗證腳本是否正確,確保腳本中迭代多次是通過,則腳本是沒有問題
b.把run-time settings中的tink time和pacing設置大一點間隔
(3)vuser_end(行號):error(虛擬用戶退出時報錯)
a.把stop vuser的價格時間設置大一些
(4)parameter“參數名”...unique(參數不夠)
a.在腳本中的參數池列表中準備更多的數據
------碼字不易,給個關注唄^_^
*請認真填寫需求信息,我們會在24小時內與您取得聯系。