場景設計二:IP欺騙
IP欺騙也是也loadrunner自帶的一個非常有用的功能。
需要使用ip欺騙的原因: 1、當某個IP的訪問過於頻繁,或者訪問量過大是,伺服器會拒絕訪問請求,這時候通過IP欺騙可以增加訪問頻率和訪問量,以達到壓力測試的效果。 2、某些伺服器配置了負載均衡,使用同一個IP不能測出系統的實際效能。LR中的IP欺騙通過呼叫不同的IP,可很大程度上的模擬實際使用中多IP訪問和並測試伺服器均衡處理的能力。 3、有一些網站會限制同一個使用者同一個IP 的登陸。為了更加真實的模擬實際情況,LoadRunner允許執行的虛擬使用者使用不 同的IP 訪問同一網站。
IP欺騙的設定方式
開啟HP LoadRunner ---->Tools ---->IP Wizard
什麼情況?!我們需要為自己的電腦配置固定的IP ,配置固定IP的方式,你懂的!
(請參考我的另外一篇部落格)
下面進入正式的配置過程:
第一步:
create new setting 建立新的設定
當第一次使用IP欺騙或已經釋放了新增的IP時,就需要選擇這一項建立新有設定。
Load previous settings fro 讀取IP列表檔案
從以前設定的IP地址列表中讀取IP地址
Restore original setting 釋放已經設定的IP
釋放已經新增的IP 地址。
選擇預設選中項:create new setting (建立新的設定) ,點選“下一步”
第二步:
讓輸入伺服器的IP地址,Loadrunner通過該地址更新路由表。 客戶端計算機上新增新的IP地址後,伺服器需要將該地址新增到路由表,以便能夠識別返回到客戶端的路由。如果伺服器和客戶端具有相同的子網掩碼、IP 類和網路,則不需要修改伺服器的路由表。
如果客戶端和伺服器計算機之間有一個路由器,則伺服器需要識別經過該路由器的路徑。確保將以下路由新增到伺服器路由表:從 Web 伺服器到路由器的路由,以及從路由器到負載生成器計算機上的所有 IP 地址的路由。
這裡可以不做任何新增,點選“下一步”。
第三步:
預設顯示本機的IP 地址,當然,我們還需要新增更多的IP 。點選“Add”進入IP新增頁面。
第四步:
Class C、Class B、Class A 表示,我們要使用是的A類、B類還是C類IP地址。don't use any of these 不要使用任何,它會把預設的IP與子網掩碼清空。
(C類最多隻能模擬255 個IP,如果你的需要更多,那麼就需要使用A 類或B類)
from ip 輸入框中輸入起始ip(注意這裡設定的IP要和本機固定的IP同段,如本機固定IP為192.169.X.X,這裡填寫192.168.1.1)
Number to 輸入框中輸入ip地址的個數,也就是說我們需要成多少個用於欺騙的IP
(我上面的配置是從110開始,按順序生成5個)
Submask根據IP型別輸入正確的子網掩碼
選中“verify that new ip addresses are not already used”,點選“OK”。
此時IP Wizard會自動按照設定生成IP地址,並且將已經佔用的IP列出。點選“完成”
第五步:
點選“save as”按鈕,可以將我們設定的IP 儲存成一個檔案,以後再設定的時候,是在第一步裡,我們可以選擇第二個選項(Load previous settings fro),從檔案匯入IP 。
點選“ok”,IP Wizard開始幫我們成成IP 。
在命令提示符號輸入ipconfig命令驗證:
第六步:
開啟loadrunner ---> Controller ,選擇Scenario--->Enable IP Spoofer ,此項打勾後表示允許使用IP欺騙。
建立測試指令碼(IP欺騙)
經過上面的配置,你真的已經知道如何使用IP欺騙了麼?或者你真的理解了IP欺騙?如何證明你已經使用了IP欺騙?
Action()
{
//驗證IP欺騙程式碼
char * ip ;
ip = lr_get_vuser_ip();
if (ip)
lr_output_message("當前虛擬使用者使用的IP為: %s", ip);
else
lr_output_message("[enable IP spoofing ]選項沒有被啟用!");
lr_start_transaction("百度首頁"); //設定事務開始
web_url("www.baidu.com",
"URL=http://www.baidu.com/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t3.inf",
"Mode=HTML",
EXTRARES,
"Url=http://s1.bdstatic.com/r/www/img/i-1.0.0.png", ENDITEM,
"Url=http://s1.bdstatic.com/r/www/img/bg-1.0.0.gif", ENDITEM,
"Url=/favicon.ico", "Referer=", ENDITEM,
"Url=http://suggestion.baidu.com/su?wd=&cb=window.bdsug.sugPreRequest&sid=1440_2031_1945_1788&t=1362056239875", ENDITEM,
"Url=http://suggestion.baidu.com/su?wd=%E8%99%AB%E5%B8%88&p=3&cb=window.bdsug.sug&sid=1440_2031_1945_1788&t=1362056247256", ENDITEM,
"Url=http://suggestion.baidu.com/su?wd=%E8%99%AB%E5%B8%88%20&p=3&cb=window.bdsug.sug&sid=1440_2031_1945_1788&t=1362056247969", ENDITEM,
"Url=http://suggestion.baidu.com/su?wd=%E8%99%AB%E5%B8%88%20%E5%8D%9A%E5%AE%A2%E5%9B%AD&p=3&cb=window.bdsug.sug&sid=1440_2031_1945_1788&t=1362056251016", ENDITEM,
LAST);
lr_end_transaction("百度首頁",LR_AUTO); //設定事務結束
return 0;
}
在VUGen中執行上面指令碼,結果一定是:[enable IP spoofing ]選項沒有被啟用!
備註:為什麼要在腳本里加事物,這也是loadrunner11比較蛋疼的一個問題,當我修改過action迴圈次數後,再用Controller 跑指令碼時,Passed Transactions 為顯示為0 。當然,指令碼本身沒有任何問題,在指令碼中新增事物可以預防這個問題的發生。
OK! 別急著儲存指令碼匯入到Controller執行。開啟選單Vuser --->run-time settings
切換到Log選項
勾選所有log,不然等一下你會納悶,為什麼只能看到第一個虛擬使用者的log。
切換到Miscellaneous選項
這裡選擇虛擬使用者是以程序還是執行緒的方式執行。下面你可能會遇到的問題是要對這裡進行修改的。
做完這幾步可以把指令碼儲存,匯入到Controller執行。
驗證IP欺騙
第一步:選擇Scenario--->Enable IP Spoofer ,此項打勾後表示允許使用IP欺騙。(這裡前面已經說過,這裡只是再提醒一下)
第二步:勾選“Tools”—“Export Mode”
第三步:“Tools”—“Options”—“General”
這裡又有一個設定以程序方式或執行緒方式進行效能測試。這裡和run-time settings 裡的設定是什麼關係?
這個選項一定要與當前場景的模式相匹配,也就是說使用本地虛擬IP測試時需要選中執行緒方式,使用負載生成器使用虛擬IP測試時需要選中程序方式。
第四步:
執行指令碼,檢視虛擬使用者log
在指令碼執行頁面,點選Vusers...----> 右鍵點選虛擬使用者,在彈出的選單中開啟“show Vuser log” 可以看到每個使用者使用的IP是不同的。
當然,還有另一種檢視日誌的方式:
選單欄:Results ---> Results Settings...
C:\Users\Administrator\AppData\Local\Temp 就是你執行指令碼的目錄,找到log\目錄下面,也可以檢視日誌。
遇到的錯誤
在執行指令碼的過程中發現有不少的錯誤請求,於是,找開檢視發現以下錯誤提示:“Error: Socket descriptor not found. Hint: the problem might be solved applying the following: (1) Update Run-Time Settings to Run Vuser as a process. (2) Add the following line into mdrv.dat, [lr_socks] section: 'ExtCmdLineConc=-UsingWinInet Yes'.”
解決方法: 1、根據錯誤提示,在run-time setting中的Miscellaneous項中設定“run vuser as a process”;(前面已將教怎麼設定)
2、...\Program Files (x86)\HP\LoadRunner\dat\mdrv.dat
查詢[lr_socks] 在後面新增“ ExtCmdLineConc=-UsingWinInet Yes ”,如下:
.............. [lr_socks] ExtPriorityType=hook WINNT_EXT_LIBS=lr_socks.dll WIN95_EXT_LIBS=lr_socks.dll LINUX_EXT_LIBS=liblr_socks.so SOLARIS_EXT_LIBS=liblr_socks.so HPUX_EXT_LIBS=liblr_socks.sl AIX_EXT_LIBS=liblr_socks.so LibCfgFunc=lr_socks_configure ExtMessageQueue=0 SecurityMode=On ExtCmdLineConc=-UsingWinInet Yes ........
3、如果仍然報錯,在選單欄中點選Diagnostics->configuration項,將web page diagnostics項改為:Enable (這一招只能說眼不見心不煩),我覺得還有更好的解決辦法。
IP欺騙的理解誤區
理解誤區:
1、和Generator搞混。以為新增多個IP後,需要新增多個IP對應的Generator才可以使用。(同一個Generator只需要以其某一個IP新增到Generator列表中即可以使用其它的IP。)
2、在上一個錯誤基礎上,對於同一個指令碼,建立多個Vuser執行組,然後以不同IP選擇同一個物理Generator來執行。( 實際上,在場景中除非需要在這個Generator上執行多個不同指令碼,否則沒有必要多次以不同IP選擇。)
其實只要記住兩個要素即可使用這個功能:
1、 用IP wizard 新增多個IP;
2、在Controller中通過Enable IP Spoofing。
而在使用IP欺騙功能上應該注意三點:
1、虛擬IP是同一個Generator上的多個IP,這種分配過程由Controller自動來進行;
2、對於同一個Generator,你模擬的使用者數量多於IP數量時,將會發生IP重複的現象,否則將隨機分配不同的IP。
3、對於同一個Generator,以其某一個IP新增到Generator中即可,不需要用不同的IP新增多次。