1. 程式人生 > >LoadRunner學習筆記(二)

LoadRunner學習筆記(二)

運行時 htm 設計 add ESS 都在 多用戶 發現 mis

LoadRunner Controller簡介:

當虛擬用戶腳本開發完成後,使用controller將這個執行腳本的用戶從單用戶轉化為多用戶,從而,模擬大量用戶操作,

進而形成負債(多用戶單循環,多用戶多循環)我們需要對負載模擬的方式和特征進行配置從而形成場景。

場景(scenario)是一種用來模擬大量用戶操作的技術手段,通過配置和執行場景向服務器產生負載,驗證系統各項

性能指標是否達到用戶要求,而controller 可以幫助我們對場景設計哦、執行及監控進行管理,主要分為:場景設計、

場景監控。最後通過運行場景完成性能測試執行。

1.手工場景(Manual Scenario):

自行設置虛擬用戶的變化,通過設計用戶的添加和減少過程,來模擬真實的用戶請求模型,完成負載的生成手工

場景是“定量型”性能測試,掌握負載的變化過程中系統各個組件的變化情況,定位性能瓶頸並了解系統的處理能力,

一般在負責測試和壓力測試中應用,手工場景的核心就是設置‘用戶負載方式‘。

LR場景設置頁面分為四個模塊,第一個顯示Vuser腳本列表,第二部分為服務協議,第三部分為設置方案,第四

部分為方案顯示.

1.腳本列表:第一列為腳本名稱,第二列腳本保存路徑,第三列並發數,第四列是負載機。虛擬用戶組是執行同一腳本

的虛擬用戶的集合。因此在Controller中,添加了一個腳本就是添加了一個虛擬用戶組。

2.方案設置:Scenario模式:所有的腳本都使用相同的場景;

group:多個腳本之間按照獨立設置模式跑,各個腳本可以單獨設置虛擬用戶、運行時間等;

Real-world schedule(真實場景模式):可以通過add Action添加多個用戶變化過程。

雙擊Initialize詳細設置:

第一個選項是場景開始運行時,同時加載所有用戶; 第二個選項是場景開始時,每隔15秒增加1個用戶;

 第三個選項是在場景開事前就加載好每個用戶;

雙擊Start Vuser設置:設置同時啟動所有用戶數或者每隔多少秒增加多少用戶;

雙擊Duration設置:每個用戶運行一次就停止持續運行時間;

雙擊Stop Vuser設置:停止用戶方式;

2.目標場景(Goal-Oriented Scenario):

定義:設置一個運行目標,通過Controller的自動加載功能進行自動化負載,如果測試的結果達到目標,說明系統的性能符合測試

目標,否則就提示無法達到目標。

目標場景的5中類型(Goal Type):

  • Virtual Users:該參數表示虛擬用戶數,驗證被測試系統所需要支持的用戶數;
  • Hits per Second:表示每秒點擊數,是指一秒鐘能做到的點擊請求數目,即客戶端產生的每秒請求數(正常情況下=服務器請求響應數)
  • Transctions per Scoend:表示每秒事務所,一個事務代表一個操作,反應系統的處理能力;
  • Transctions =Response Time:表示事務的響應時間,反應系統的處理速度以及一個操作花費的時間;
  • Pages per Minute:表示每分鐘頁面的刷新次數,反應系統每分鐘提供的頁面處理能力,代表了系統的整體處理能力。

LR負載生成器(Load Generators):

對場景進行設置後,需要對負載生成器進行管理和配置,Load Generators 是運行腳本的負載引擎,(相當於壓力機)

只要功能是生成虛擬用戶進行負載,在默認情況下使用本地的負載生成器來運行腳本。

但是每生成一個虛擬用戶,需要花費負載生成器大約2M-3M的內存空間,通常運行controller的主機很少用作負載生成器,負載生成器的

工作多由其他裝有LR Agent的PC機來擔任,如果負載生成器內存的使用率大於了70%,負載生成器就好變成系統的瓶頸,導致性能測

試成績下降。這種問題需要添加負載生成器來解決,所以在一臺電腦上無法模擬大量的虛擬用戶,這個時候需要調用多個負載生成器

來完成大規模的性能負載。

1.添加負載機器之前需要開啟代理運行時設置:

Load Running Man--Tool--LoadRunner Agent Runtimes Settings Configuration,開啟代理運行時設置,在彈出頁面輸入當前主機的密碼即可。

如果開啟不了小雷達,我們選擇第二項,點擊OK,發現會報運行時錯誤,報錯後我們點擊報錯中的退出,然後進入

開始-所有程序-LoadRunner-Advanced Settings,找到Agent Configuration,點擊後彈出如下界面,我們勾選第二項後,點擊OK,發現小雷達出現了。

2.設置完成後添加負載機器:

在場景設計頁面Seenario Scripts選擇load Generators--add,設置另外一臺電腦(負載生成器)的名稱或ip地址、操作系統、init人數等。

init人數設置:

load Generators頁面點擊Details,彈出如下圖,找到Run-Time Quota標簽頁。兩個值都默認為50,第一個值init最少加載多少用戶開始運行腳本,第二個值指加載多少用戶就停止加載,開始運行腳本,不勾選表示初始化所有用戶後開始運行。不過這裏的兩個值,我們一般只在單並發時才進行修改,比如單並發100個用戶,那麽我們把兩個值都設置為100。

LR運行時設置(Run-time Settings):

一、瀏覽器設置

技術分享圖片

可以進行Run-Time Setting設置來匹配瀏覽器設置,例如:

瀏覽器設置

Run-Time Setting

每次訪問此頁時檢查

勾選Simulate Browser Cache

勾選Check for newer versions of stored pages every visit to the page.

每次開啟Internet Explorer時檢查

僅勾選Simulate Browser Cache

自動

僅勾選Simulate Browser Cache

不檢查

勾選Simulate Browser Cache

禁用Check for newer versions of stored pages every visit to the page.

配置各項說明:

Simulate browser cache:

配置Vuser模擬帶緩存的瀏覽器。缺省緩存是被允許的,可以通過禁止該選項來使得所有VUser模擬的瀏覽器都不帶緩存。

疑問:如訪問百度時IE緩存目錄下會緩存一個jpg文件,手動在IE上重新訪問百度,這個jpg文件項是否有變化?在LR中模擬瀏覽器設置,勾選與不勾選,訪問百度頁面,這個jpg文件信息項是否有變化。

每個緩存文件都有截止期限、上次修改時間、上次訪問時間、上次檢查時間幾項。在已有緩存文件的情況下,測試記錄如下:

a.手動頁面訪問,緩存文件的上次訪問時間、上次檢查時間兩項,時間變化,更新為手動日期;

b.LR中采取默認瀏覽器設置(上圖),vugen中執行1次腳本,查看上次訪問時間、上次檢查時間兩項時間沒有變化;

c.LR中取消瀏覽器設置(上圖中去掉全部勾選),vugen中執行1次腳本,查看上次訪問時間、上次檢查時間兩項時間沒有變化;

這說明什麽?LR中無論采取何種瀏覽器模擬策略,都不會去訪問IE緩存目錄下的文件。

Cache URLs requiring content (HTML) 選項

這個選項是指Vugen僅緩存網頁的一些必要信息,這些信息可以是一些必須的驗證信息、分析數據或者關聯數據,當你勾選了這項後,這些信息自動被緩存(默認是啟用)。

提示:為了減少虛擬用戶的內存占用量,可以禁用該選項,除非它是一個明確規定的測試要求

設置瀏覽器緩存URL的上下文(比如,HTML語法,認證或校驗等),其他的URL的上下文不會被緩存,以減少內存使用。可以通過點擊Advance來定義需要上下文的URLs。

Cache URLs Requiring Content – Advanced 選項

在高級設置裏可以設置指定類型的信息存儲到cache中。註意:這裏的高級設置時同時針對所有的用戶組,而不能對單獨用戶組進行設置。

修改指定類型信息步驟:

1. 勾選Specify URLs requiring content in addition to HTML page。

2. 點“+”號,添加指定類型信息,如text/plain, text/xml, image/jpeg, and image/gif。

3. 點“-”號,從緩存中去除指定類型信息。

Check for newer versions of stored pages every visit to the page 選項

指瀏覽器會將存儲在cache中的網頁信息和最新瀏覽的頁面進行比較,當你勾選此項時,vugen會增加"If-modified-since"到HTTP包頭,在場景執行過程中這個選項可以顯示最新的網頁信息,但是也增加了更多的網絡流量,通常配置這個選項是用來匹配瀏覽器設置來達到模擬瀏覽器的目的。

通過在header中添加If-Modified-Sinces屬性來設置瀏覽器檢查比當前存儲在緩存中特定URL更新的資源。缺省情況下,瀏覽器不會自動檢測更新的資源。

Download non-HTML resources 選項

指虛擬用戶在回放期間訪問網站時加載圖片的過程,這裏圖片是指隨著頁面錄制的圖片和那些沒有隨頁面錄制下來的圖片。

當真實用戶訪問網頁時,需要等待圖片的加載完成。因此如果想測試整個系統的時候(用戶體驗時間),可以勾選這項(默認勾選),如果為了提高性能且不是模擬真實用戶行為的話,則不要選該項。

提示:禁用此選項後,可能會遇到圖片驗證失敗,因為在訪問網站的時候有些圖片是會發生變化的,如廣告條。

Simulate a new user each iteration 選項

這個選項是指VuGen在叠代過程(即VuGen在每個循環的init會話結束)中重置了所有的HTTP內容,也可以理解為VuGen 將各個叠代之間的所有 HTTP 上下文重置為 init 部分結束時相應的狀態。此設置允許虛擬用戶能夠更準確的模擬用戶開始進行新的會話,它刪除了所有的Cookie,關閉了所有的TCP連接(包含keep-Alive包),清除了模擬瀏覽器的緩存,重置了HTML框架,並且清除了用戶名和密碼,此選項默認是開啟狀態。這樣使得Vuse更加真實的模擬一個新user開始一個瀏覽會話。

去掉這個選項的意思是,始終使用一個tcp/ip鏈接,不斷開,也就是所說的長鏈接或持久連接。
短連接:建立連接-----發送和接收報文1-------關閉連接
長連接:建立連接-----發送和接收報文1.。。。2.。。。3-----關閉連接

Clear cache on each iteration 選項

這個選項是指在每次叠代過程中清除瀏覽器中緩存來達到模擬一個真實用戶第一次訪問網頁。若每個循環模擬一個最新訪問站點的user時,則要選中該選項。

不勾選該復選框以禁用此選項,允許虛擬用戶使用緩存來存儲用戶信息,來模擬一個已經訪問過網頁的用戶。當每一個循環模擬一個最近訪問過站點的user,瀏覽器仍為該用戶保留網頁(從前面的循環中使用緩存頁面)的情況則不要選中該選項。

類似函數web_cache_clearup()

按照示例腳本描述此函數需要加在action的末尾,而非開始,開始的話場景報錯。末尾則不報錯。

終這些運行時策略要如何選取,需要根據實際測試項目的策略而定,並非完全一致的。

測試記錄:

腳本設置:每個腳本中所有信息都在action中,action作為一個事務,每個腳本分為登錄、操作,退出。

場景設置:場景中5支腳本,每個腳本配置20VU,叠代執行5分鐘,每個腳本計劃執行次數100次。

1、運行時設置:瀏覽器上邊幾項都不勾選

測試結果:每個腳本執行20次後,所有交易腳本的action次數都為失敗。

腳本中登錄的sessionid提示獲取不到,但是腳本中的登錄判斷卻顯示可以登錄成功。---?有點疑惑

成功數 失敗數

20 80

2、運行時設置:Simulate a new user on each iteraton、Clear cache on each iteration兩項勾選

測試結果:所有腳本按計劃執行。

成功數 失敗數

100 0

3、性能測試時有遇到發包機端口數不足,調整此兩項後就不報錯的情況。

運行時設置:Simulate a new user on each iteraton不勾選

狀態1:勾選,運行幾分鐘後,發包機顯示端口連接數超6W,大量報錯。

狀態2:其他不變的情況下,這項未勾選,測試運行長時間未報錯。

測試一些響應很快的頁面時simulate a new user on each iteration設置的開啟和關閉會直接導致,要麽Lr所在機器的端口間歇性用盡,TPS呈波浪狀上下起伏,要麽web服務器TIME_WAIT連接瞬間增大到幾千或幾萬。出現這種時,取消勾選。

關閉這個選項後,各項性能指標會高很多。

二、常規設置

常規設置中包含叠代策略、pacing設置、日誌級別、思考時間、Miscellaneous幾項設置。

1、General: Miscellaneous

配置如下:

技術分享圖片

1)運行時關於錯誤的處理方式。出錯後是否繼續運行,失敗事務後是否發送錯誤日誌,是否生成錯誤快照。

2)可以配置運行時按線程運行還是按進程運行。

3)定義是否將每個action作為一個事務,或定義是否將每步當做一個事務。比如,要把init、action、end定義三個事務,則選中相應選項。

其他的沒有什麽,這裏重點要的說的是關於線程運行還是進程運行?

按線程運行VUSER和按進程運行VUSER的區別

1. 按線程運行VUSER,LR默認情況下,每50個用戶開啟一個進程mmdrv.exe;controller場景運行結束,進程mmdrv.exe也會相應結束;

2. 按進程運行VUSER,系統為每1個用戶開啟一個進程mmdrv.exe;controller場景運行結束,進程mmdrv.exe也會相應結束;

3. 在Runtime setting中設置為按線程運行VUSER,設置Controller中的虛擬用戶數小於等於50的話,打開windows資源管理器可以看到有一個進程mmdrv.exe; 設置Controller中的虛擬用戶數在51與100之間的話,打開windows資源管理器可以看到有兩個進程mmdrv.exe.

loadrunner controller將使用驅動程序mmdrv運行Vuser。用戶可以在controller的run-time setting中選擇Vuser的運行方式, 是多進程方式or多線程方式。

如果選擇以線程方式來運行虛擬用戶:

在場景設置時,“是單行腳本,還是多行腳本”會決定系統啟動的進程數的多少:

假設並發用戶設置為30,如果是單行30個用戶,系統只需啟動一個進程;

假設並發用戶設置為30,如果是多行,30行,每行一個用戶,系統就需要啟動30個進程;

如果選擇以進程方式來運行虛擬用戶:

那麽無論腳本在場景組中怎麽設置,是單行多用戶還是多行少用戶方式,系統需要啟動的進程數是一定的,就是並發用戶的總數;

進程方式和線程方式的優缺點

如果選擇按照進程方式運行, 每個用戶都將啟動一個mmdrv進程,多個mmdrv進程會占用大量內存及其他系統資源,這就限制了可以在任一負載生成器上運行的並發用戶數的數量,因為負載機的資源(內存及其他系統資源)是有限的。

如果選擇按照線程方式運行,在默認情況下,controller為每50個用戶僅啟動一個mmdrv進程,而每個用戶都按線程方式來運行,這些線程用戶將共享父進程的內存段,這就節省了大量內存空間,從而可以在一個負載生成器上運行更多的用戶。(如果選擇線程方式來運行用戶,每個進程中會多出幾個線程,例如是53個,多出來的進程可能是用於維護進程之間的運行的)

選擇線程方式雖然可以減少啟動的mmdrv進程數,減少了內存的占用,但是也容易出現一個問題,例如,同一個測試場景,用線程並發就會出現超時失敗或報 錯,而用進程並發就沒錯。為什麽呢?因為線程的資源是從進程資源中分配出來的,因此同一個進程中的多個線程會有共享的內存空間,假設a線程要用資源就必須 等待b線程釋放,而b線程也在等待其他資源釋放才能繼續,這樣就會出現這個問題。

系統需要啟動的mmdrv進程數與哪些因素有關:

與在controller 的運行時設置中選擇的是進程方式or線程方式來運行虛擬用戶有關

進程方式:無論是單行or多行腳本,需要啟動的進程數就是並發用戶數;

線程方式:假設是單行腳本,每50個用戶才啟動一個進程;多行腳本,有幾行(每行<50人)就啟動幾個進程,而不是每個用戶啟動一個進程。

如果選擇了線程方式,需啟動的進程數,進一步還與腳本是單行還是多行有關

單行腳本,多用戶,假設少於50,只需啟動一個進程,100個用戶,只需啟動2個進程,依此類推;

多行腳本,即使每行一個用戶,也需要啟動一個進程,多一行就需要多啟動一個進程;不是每個用戶啟動一個進程,有幾行(每行<50人)就需要啟動幾個進程。

在啟動了IP欺騙功能後,所需啟動的進程數,還與選擇的是按進程還是按線程來分配IP地址有關

按進程分IP:每個ip(負載生成器)就需要多啟動一個進程;

按線程分IP:每個ip(負載生成器)不需要多啟動一個進程。

備註:這裏的單行是指場景中只有一支腳本,多行腳本是指場景裏有多支腳本。

多支腳本時,分別為每支腳本設置是按進程方式運行還是按線程方式運行。默認都是線程模式運行。

Loadrunner 關於進程和線程的設置

虛擬用戶已線程還是進程的方式運行,對被測服務器的壓力是完全不同的,首先我們要知道在loadrunner中有3個地方涉及到虛擬用戶的運行方式,分別是:

1、在Vug->run-time settings->miscellane->multithreading中可以設置虛擬用戶是以線程還是進程的方式運行。文中所列的位置。

2、在controller中設置場景時,是以單場景模式運行還是以場景組方式運行,在這兩種不同的運行方式下,虛擬用戶的運行方式也是不同的

3、在controller中使用IP欺騙時,在專家模式(選中tools-export mode)下的tools->options->general->multiple IP address mode中也可以選擇每個IP是以線程還是進程方式運行。是不是專家模式,在options選項中的標簽數量與內容是不同的。

技術分享圖片

下面我們介紹一下這三個設置線程和進程之間的關系:

首先說一下run-time settings中的設置與controller中單場景和場景組的關系:

要記住虛擬用戶是以線程還是進程方式運行是在Vug->run-time settings中設置的;

其次在controller中如果使用單場景運行,那麽該場景中無論有多少個腳本、多少個負載生成器,運行這些腳本的虛擬用戶均依照Vug->run-time settings中設置的線程還是進程方式運行;但是如果在controller中如果以場景組方式運行時,每個場景組均會作為一個進程被啟動,而每個組中的用戶又是按照Vug->run-time settings中設置的線程還是進程方式運行。

再說一下在controller中使用IP欺騙時,在專家模式下的tools->options->general->multiple IP address mode中的設置:

如果選擇的是進程方式:

1、如果這個ip是在單場景中,那麽有幾個不同的ip的負載生成器就會啟動幾個進程,每個負載生成器的虛擬用戶的運行方式仍然按照Vug->run-time settings中設置的線程還是進程方式運行

2、如果是在場景組中運行,這就要看場景組是如何設置的了,有兩種情況:

a、每個場景組中添加一個虛擬ip,這時運行每個場景組時只啟動一個進程 b、每個場景組中添加多個虛擬ip,這時運行每個場景組時,每個場景組啟動一個進程,每個ip啟動一個進程,每個ip的虛擬用戶的運行方式按照Vug->run-time settings中設置的線程還是進程方式運行

如果在controller中使用IP欺騙時,在專家模式下的tools->options->general->multiple IP address mode中選擇的線程方式:

1、如果這個ip是在單場景中,那麽對於不同的ip的負載生成器只會啟動一個進程,每個負載生成器的虛擬用戶的運行方式仍然按照Vug->run-time settings中設置的線程還是進程方式運行

2、如果是在場景組中運行,每個場景組啟動一個進程,所有ip已線程的方式在組進程中運行,每個ip的虛擬用戶的運行方式按照Vug->run-time settings中設置的線程還是進程方式運行

在場景中測試結果:

技術分享圖片

LoadRunner學習筆記(二)