深刻理解Loadrunner中的Browser Emulation

一:基本介紹css

在Loadrunner的使用中,對於Run-time Settings下的browser emulation設置是比較容易讓人產生困惑的地方。下面咱們結合sniffer來具體看看每一個選項的用途,以及對測試的影響。html

                                              Browser Emulation 圖前端

1--什麼是瀏覽器緩存?--java

 簡單來講,瀏覽器的緩存就是--使用瀏覽器訪問頁面時,瀏覽器會將一些網頁的文字,圖片,保存到本地的一個文件內。而後,再次使用瀏覽器訪問這個網頁的時候,先前被保存(緩存)的文字和圖片不會重新被下載,而是使用保存在本地的資源。web

Browser Emulation就是用來設置腳本回放時,lr模擬瀏覽器緩存策略的後端

緩存的東西通常都放在C:\Documents and Settings\用戶\Local Settings\Temporary Internet Files下。能夠進去打開立面都是些什麼--文檔和圖片,並且都是你曾經瀏覽過的界面中信息瀏覽器

2--Browser Emulation選項說明--緩存

詳解見:http://www.rosoo.net/a/201011/10401.html服務器

http://hi.baidu.com/c1425/item/0f4af76fc4f3a20ca1cf0f9d架構

上面這個鏈接對瀏覽器的設置,解釋的很好,本人嘗試了對Browser Emulation各類設置,在腳本回放的時候抓包比對,大致上是正確的。

爲了方便描述,咱們約定用:
A表明Simulate browser cache
B表明Cache URLs requiring content(HTMLs)
C表明Check for newer versions of stored pages every visit to the page
D表明Download non-HTML resources
E表明Simulate a new user on each iteratioin
F表明Clear cache on each iteration

附上help關於Browser Emulation的中文文檔

 

二:案例和工具

1. 測試案例:

打開網站首頁兩次,對比不一樣Browser Emulation設置下loadrunner的行爲,腳本以下。

Action()
{
web_url("www.primeton.com",
"URL=http://www.primeton.com/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t2.inf",
"Mode=HTML",
LAST);

web_url("www.primeton.com",
"URL=http://www.primeton.com/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t2.inf",
"Mode=HTML",
LAST);

return 0;
}

 

2. sniffer工具

開源工具:Wireshark(前身是ethereal)(www.wireshark.org)

三:測試過程

爲了方便描述,咱們約定用:

A表明Simulate browser cache

B表明Cache URLs requiring content(HTMLs)

C表明Check for newer versions of stored pages every visit to the page

D表明Download non-HTML resources

E表明Simulate a new user on each iteratioin

F表明Clear cache on each iteration

首先設置Run Logic中的iteration爲2。讓Action運行兩次,看看循環運行腳本兩次,數據包和鏈接數的變化。

1. 去掉全部選項

結果:共獲取數據包95個,創建鏈接1個(紅色標識),斷開鏈接1個(藍色標識)

No.     Time        Source            Destination       Protocol Info
1 0.000000 192.168.1.61 203.81.29.137 TCP 13835 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
2 0.036053 203.81.29.137 192.168.1.61 TCP http > 13835 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
92 1.415887 192.168.1.61 203.81.29.137 TCP 13835 > http [FIN, ACK] Seq=817 Ack=71762 Win=257760 Len=0
94 1.449960 203.81.29.137 192.168.1.61 TCP http > 13835 [FIN, ACK] Seq=71762 Ack=818 Win=16464 Len=0

 

在這種狀況下,數據包很是少(沒有選擇下載資源文件入css,js,gif等),並且你能夠看到,打開4次首頁,只創建了一個tcp鏈接。

這時,你即便選擇A,發現數據包的數量量頁沒有變化,由於cache主要仍是針對資源文件

2. 選擇E(F)

結果:共獲取數據包102個,創建鏈接2個(紅色標識),斷開鏈接2個(藍色標識)

No.     Time        Source            Destination       Protocol Info
1 0.000000 192.168.1.61 203.81.29.137 TCP 13886 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
2 0.037013 203.81.29.137 192.168.1.61 TCP http > 13886 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
48 0.618117 192.168.1.61 203.81.29.137 TCP 13886 > http [FIN, ACK] Seq=409 Ack=35882 Win=257760 Len=0
49 0.644106 192.168.1.61 203.81.29.137 TCP 13887 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
51 0.651919 203.81.29.137 192.168.1.61 TCP http > 13886 [FIN, ACK] Seq=35882 Ack=410 Win=16872 Len=0
53 0.676377 203.81.29.137 192.168.1.61 TCP http > 13887 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
99 1.310379 192.168.1.61 203.81.29.137 TCP 13887 > http [FIN, ACK] Seq=409 Ack=35882 Win=257760 Len=0
101 1.347949 203.81.29.137 192.168.1.61 TCP http > 13887 [FIN, ACK] Seq=35882 Ack=410 Win=16872 Len=0

在這種狀況下,數據包很是少(沒有選擇下載資源文件入css,js,gif等),對比第一種狀況,你會發現它創建了兩個鏈接,這就是E的做用,它對於每次迭代都當成一個新的用戶,須要從新創建鏈接。

3. 選擇DE(F)

結果:共獲取數據包1782個,創建鏈接6個(紅色標識),斷開鏈接6個(藍色標識)

No.     Time        Source            Destination       Protocol Info
1 0.000000 192.168.1.61 203.81.29.137 TCP 14016 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
2 0.037911 203.81.29.137 192.168.1.61 TCP http > 14016 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
6 0.107432 192.168.1.61 203.81.29.137 TCP 14017 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
9 0.141816 203.81.29.137 192.168.1.61 TCP http > 14017 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
426 3.334889 192.168.1.61 203.81.29.137 TCP 14017 > http [FIN, ACK] Seq=1852 Ack=150284 Win=257484 Len=0
428 3.372253 203.81.29.137 192.168.1.61 TCP http > 14017 [FIN, ACK] Seq=150284 Ack=1853 Win=16998 Len=0
448 4.395488 192.168.1.61 203.81.29.137 TCP 14020 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
457 4.439604 203.81.29.137 192.168.1.61 TCP http > 14020 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
859 7.593610 192.168.1.61 203.81.29.137 TCP 14016 > http [FIN, ACK] Seq=2849 Ack=377404 Win=257484 Len=0
870 7.659680 203.81.29.137 192.168.1.61 TCP http > 14016 [FIN, ACK] Seq=377404 Ack=2850 Win=15935 Len=0
888 8.511308 192.168.1.61 203.81.29.137 TCP 14020 > http [FIN, ACK] Seq=1602 Ack=208150 Win=257760 Len=0
890 8.549451 203.81.29.137 192.168.1.61 TCP http > 14020 [FIN, ACK] Seq=208150 Ack=1603 Win=17280 Len=0
892 8.566246 192.168.1.61 203.81.29.137 TCP 14022 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
893 8.601893 203.81.29.137 192.168.1.61 TCP http > 14022 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
899 8.702628 192.168.1.61 203.81.29.137 TCP 14023 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
904 8.741807 203.81.29.137 192.168.1.61 TCP http > 14023 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
1298 11.809456 192.168.1.61 203.81.29.137 TCP 14022 > http [FIN, ACK] Seq=1550 Ack=159770 Win=257484 Len=0
1310 11.878665 203.81.29.137 192.168.1.61 TCP http > 14022 [FIN, ACK] Seq=159770 Ack=1551 Win=17280 Len=0
1341 12.771707 192.168.1.61 203.81.29.137 TCP 14026 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
1348 12.813950 203.81.29.137 192.168.1.61 TCP http > 14026 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
1759 16.032952 192.168.1.61 203.81.29.137 TCP 14023 > http [FIN, ACK] Seq=3151 Ack=367918 Win=257484 Len=0
1761 16.068296 203.81.29.137 192.168.1.61 TCP http > 14023 [FIN, ACK] Seq=367918 Ack=3152 Win=17280 Len=0
1779 16.983042 192.168.1.61 203.81.29.137 TCP 14026 > http [FIN, ACK] Seq=1602 Ack=208150 Win=257760 Len=0
1781 17.016836 203.81.29.137 192.168.1.61 TCP http > 14026 [FIN, ACK] Seq=208150 Ack=1603 Win=17280 Len=0

 

在這種狀況下,數據包的數量很是大,鏈接也不少,因爲沒有cache功能,每次打開頁面都須要從新下載全部的資源文件。

4. 選擇ADE

結果:共獲取數據包525個,創建鏈接3個,斷開鏈接3個(再也不標識了,syn即爲鏈接請求,fin即爲斷開請求)

No.     Time        Source            Destination       Protocol Info
1 0.000000 192.168.1.61 203.81.29.137 TCP 14189 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
2 0.033657 203.81.29.137 192.168.1.61 TCP http > 14189 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
6 0.100636 192.168.1.61 203.81.29.137 TCP 14190 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
9 0.133703 203.81.29.137 192.168.1.61 TCP http > 14190 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
429 3.383748 192.168.1.61 203.81.29.137 TCP 14190 > http [FIN, ACK] Seq=1852 Ack=150284 Win=257484 Len=0
431 3.418556 203.81.29.137 192.168.1.61 TCP http > 14190 [FIN, ACK] Seq=150284 Ack=1853 Win=16998 Len=0
471 4.352071 192.168.1.61 203.81.29.137 TCP 14189 > http [FIN, ACK] Seq=1504 Ack=235576 Win=257760 Len=0
472 4.380312 192.168.1.61 203.81.29.137 TCP 14192 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
474 4.389778 203.81.29.137 192.168.1.61 TCP http > 14189 [FIN, ACK] Seq=235576 Ack=1505 Win=17280 Len=0
476 4.413220 203.81.29.137 192.168.1.61 TCP http > 14192 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
522 5.078068 192.168.1.61 203.81.29.137 TCP 14192 > http [FIN, ACK] Seq=409 Ack=35882 Win=257760 Len=0
524 5.115099 203.81.29.137 192.168.1.61 TCP http > 14192 [FIN, ACK] Seq=35882 Ack=410 Win=16872 Len=0

 

在這種狀況下,cache發揮做用,數據包對比第三種狀況大大減小,幾乎等於打開一次首頁的數據量(449個數據包),只有第一次打開頁面須要完整下載頁面(包括資源文件),後面的三次打開頁面都只要下載HTML頁面(不包括資源文件)。

 

5. 選擇ADEF

選擇F以後咱們看看結果:共獲取數據包942個,創建鏈接4個,斷開鏈接4個

No.     Time        Source            Destination       Protocol Info
1 0.000000 192.168.1.61 203.81.29.137 TCP 14292 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
2 0.034524 203.81.29.137 192.168.1.61 TCP http > 14292 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
6 0.102314 192.168.1.61 203.81.29.137 TCP 14294 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
9 0.139752 203.81.29.137 192.168.1.61 TCP http > 14294 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
426 3.791111 192.168.1.61 203.81.29.137 TCP 14294 > http [FIN, ACK] Seq=1852 Ack=150284 Win=257484 Len=0
428 3.824970 203.81.29.137 192.168.1.61 TCP http > 14294 [FIN, ACK] Seq=150284 Ack=1853 Win=16998 Len=0
468 6.213276 192.168.1.61 203.81.29.137 TCP 14292 > http [FIN, ACK] Seq=1504 Ack=235576 Win=257760 Len=0
469 6.244052 192.168.1.61 203.81.29.137 TCP 14297 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
471 6.249564 203.81.29.137 192.168.1.61 TCP http > 14292 [FIN, ACK] Seq=235576 Ack=1505 Win=17280 Len=0
473 6.279647 203.81.29.137 192.168.1.61 TCP http > 14297 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
479 6.374967 192.168.1.61 203.81.29.137 TCP 14298 > http [SYN] Seq=0 Len=0 MSS=1460 WS=2
484 6.419597 203.81.29.137 192.168.1.61 TCP http > 14298 [SYN, ACK] Seq=0 Ack=1 Win=17280 Len=0 MSS=1440 WS=0
897 9.858493 192.168.1.61 203.81.29.137 TCP 14297 > http [FIN, ACK] Seq=1550 Ack=159770 Win=257484 Len=0
899 9.895188 203.81.29.137 192.168.1.61 TCP http > 14297 [FIN, ACK] Seq=159770 Ack=1551 Win=17280 Len=0
939 12.840029 192.168.1.61 203.81.29.137 TCP 14298 > http [FIN, ACK] Seq=1806 Ack=226090 Win=257760 Len=0
941 12.876120 203.81.29.137 192.168.1.61 TCP http > 14298 [FIN, ACK] Seq=226090 Ack=1807 Win=17076 Len=0

在這種狀況下,因爲選擇了F,在迭代的時候清除了cache,因此每次迭代都須要從新下載資源文件。數據包差很少等於第三種狀況的一半,約等於打開兩次首頁的數據量(449×2個數據包)。

6. 關於BC選項

C的解釋(Check for newer versions of stored pages every visit to the page

C比較容易理解,相似IE設置中的每次檢查,若是不設置C,LR對於已經cache的文件就不會從新向服務器請求,若是選擇C,你就能夠在數據包中發現不少304信息。

B的解釋(Cache URLs requiring content(HTMLs)

LR對於資源文件的cache並不會真正cache在內存中或者在磁盤上,這個選項表示:對於一些須要用到的關聯,校驗,頁面解析內容真正cache在內存中,減小客戶端的重複工做。

固然若是你想把GIF也cache到內存中,你能夠在Advanced中設置,選擇Specify URL requiring content in addition to HTML pages,加入條目image/gif,並勾選。當Vuser運行的時候,你能夠對比一下mmdrv.exe進程的內存消耗(內存佔用會更多)。

四: 結論

經過上面的測試分析,咱們大概知道了每一個選項的真正含義,你須要根據你的測試目的來選擇合適的設置:

一、 對於一個具體的應用測試,對於前端Web Server不可忽略,缺省設置很是合適,不須要調整(有時候須要考慮把C選上)

注意:不少人在錄製腳本的時候,習慣把登入操做放到vuser_init中,這時候缺省設置可能會拋錯,建議把這類的操做都放入到action中

二、 若是你更關注後端應用服務器的性能或者說作一些架構的驗證分析,那你缺省設置對於你來講就不合適了,你須要選擇取消全部的設置項。

固然你也能夠根據本身的具體狀況作不一樣調整,可是必定要真正理解這些選項的具體含義才能作到不犯錯誤

相關文章
相關標籤/搜索