1)可以直接確認
這種情況下你可以通過你的測試常識直接判讀系統使用了什麼樣的協議,比如前面說的Web系統使用了HTTP./HTML協議,Ftp服務使用了FTP協議等;
2)通過研發人員瞭解被測系統使用了什麼樣的協議
如果通過你的判斷不能確定使用了什麼樣的協議這個時候,你可以跟研發人員進行溝通,確認他在開發的過程中使用了什麼樣的協議。
3)使用常用的數據監聽工具進行數據包分析
有的時候可能你的研發人員也不能確定他在開發過程中使用了什麼協議,這個確實是有可能的特別是現在的研發人員特別喜歡用別人的插件,或者開發環境封裝的很好,導致他們沒有開發底層的協議棧,這個時候就需要你自己去判斷,自己判斷過程中可以藉助協議分析工具,常用的協議分析工具如:sniffer Pro,ethreal等;這些工具可以通過抓取數據然後對數據包進行分析的方法分析出現在常用的協議。能力還是相當的強的。
4)萬能協議Winsocket協議
如果上述方法都不行,但是你還想用LR完成你的性能測試,沒有辦法這個時候可以拿出這個Winsocket協議進行腳本的開發,這個協議只要是在Windows上的通信的軟件都可以將腳本開發出來,但是腳本調試的難度相當到,需要看大量的16進制的數據,並且有的時候還需要複雜的管理,本人建議能不用,最好不用。
5)另外可以通過以下文章對協議選擇有更深入的瞭解
LoadRunner的協議選擇
1. LR支持多種協議,請大家一定要注意,這個地方協議指的是你的Client端通過什麼協議訪問的Server,Client一般是面向最終使用者的,Server是第一層Server端,因爲現在的體系架構中經常Server層也分多個層次,什麼應用層,什麼數據層等等,LR只管Client如何訪問第一層Server.
2. 特別要注意某些應用,例如一個Web系統,這個系統是通過ActiveX控件來訪問後臺的,IE只是一個容器,而ActiveX控件訪問後臺是通過COM/DCOM協議的,這種情況就不能使用Web協議,否則你什麼也錄製不到,所以,LR工程師一定要了解應用程序的架構和使用的技術。
3. 談談多協議LR是支持在一個腳本里面使用多協議的,不過這個多協議是有一定的限制的,我有一個LR7.6上哪些協議支持多協議,LR8.0是不是取消了這些限制我不清楚。象HTTPS,一般來講一定要選擇多協議,但在選擇具體協議的時候一定只選Web協議,這時候才能作那個端口映射。
4. 談談Web協議中Option Web協議裏面有一些Option,具體我記不清楚了,但有一個地方很重要:就是選擇URL方式還是HTM方式錄製,這裏有一些原則a. 儘量使用HTM方式錄製b.如果使用了Javascrīpt,並且javascrīpt裏面與後臺有交互,那一定要使用URL方式,例如javascrīpt用於判斷用戶名和密碼是否正確(與後臺一定會有交互),那麼就要使用URL方式錄製;但如果Javascipt只是判斷用戶名或密碼的格式,那一般不會與後臺發生交互,就不需要使用URL方式。至於什麼情況下一定要用URL方式,我曾經寫過一個文檔,但現在我不記得了不好意思。
5. 談談併發點和結果檢查很多人喜歡使用併發點和結果檢查,我談談我自己的看法。第一我基本上從來不使用結果檢查,壓力測試的結果我一般是去後臺檢查存儲層的數據是否正確的。LR只能檢查協議層上的錯誤,但如果在大量併發用戶的情況下使用返回結果檢查例如reg_text_check,會極大的佔用客戶端的資源,我一般不這麼作;至於併發點,我只有在客戶強烈要求的情況下才會使用,否則基本不用
使用LoadRunner如何更好的選擇協議
測試B/S系統選擇Web(Http/Html)。
測試一個C/S系統要根據所用到的後臺數據庫來選擇不同的協議:
1. 後臺數據庫是sybase,則採用sybaseCTlib協議。
2. 後臺數據庫是sql server,則使用MS sql server協議。
3. 後臺數據庫是oracle 數據庫,就使用oracle 2-tier協議。
4. 沒有數據庫的c/s(ftp,smtp)系統,可以選擇windowsSockets協議。
5. 其他的ERP,EJB(需要ejbdetector.jar),選擇相應的協議即可。
LoadRunner與Winsock協議
在討論winsock解決方案之前,我們先討論一下各種協議是如何工作。從前面的簡介可以瞭解到很多的高級協議,例如FTP,HTTP協議等。以及所有基於window的應用(例如IE,WS-FTP)底層都是在Winsocket層上通信,因此任何高級協議的底層都是用Winsocket通信。
什麼時候在LR中選擇Winsocket協議呢?你要先了解LR是怎麼樣工作的:LR捕捉API請求然後再把它們回放。所以當你在創建LR WEB腳本的時候,VUGEN捕捉從IE出去的所有的HTTP請求。除此之外lr還支持其他很多協議,例如Oracle,ODBC等。在選擇不同協議錄製腳本的時候,LR是依靠hooks捕捉正確的API請求。所以既然大部分網絡協議都是架構在winsocket協議之上的,那對於lr不支持的協議,我們都可以在winsocket層上錄製腳本。所以當找不到合適協議的時候,可以選擇winsocket來錄製。
錄製WinSock協議腳本!
Lr錄製新的虛擬用戶腳本,選擇winsock協議;
在web虛擬用戶腳本中錄製的是URL信息,所以VUGEN啓動流覽器並運行就可以了,但選擇Winsocket錄製的時候,可能會是各種形式的應用,並不簡簡單單就是瀏覽器,所以在開始的時候我們不需要指定應用的地址。
下面的例子我們選擇winsock來錄製web應用,正如上面說的我們開始要指定ie的地址。因爲本來lr是支持http協議的,所以這個例子並無具體的意義,只是爲了使例子簡單。
winsock腳本典型代碼:
lrs_create_socket("socket0","UDP","LocalHost="0"","RemoteHost=doors:2084",LrsLastArg);
lrs_create_socket("socket1","TCP","LocalHost=0","RemoteHost=www2。yahoo。com:80",LrsLastArg);
lrs_send("socket0","buf0",LrsLastArg);
lrs_receive("socket0","buf1",LrsLastArg);
lrs_send("socket1","buf2",LrsLastArg);
lrs_send("socket0","buf3",LrsLastArg);
lrs_receive("socket0","buf4",LrsLastArg);
這是訪問雅虎的一個應用,正如我們看到的,winsock先打開一個winsocket連接,然後收發包。我們發現錄製的腳本中比web腳本(三個文件)多一個文件。
第四個文件是data.ws,它裏面記載了在action裏面收發所有包的內容。
下面是一個data.ws的例子。
send buf0
"!"
recv buf1 1
"!"
send buf2
"GET / HTTP/1。1\r\n"
"Accept: */*\r\n"
"Accept-Language: en-us\r\n"
"Accept-Encoding: gzip,deflate\r\n"
"User-Agent: Mozilla/4。0 (compatible; MSIE 5。01; Windows NT 5。0)\r\n"
"Host: www。yahoo。com\r\n"
"Connection: Keep-Alive\r\n"
"Cookie: B="5oj83bst12l6m&b="2;" Y="v=1&n=8lln5lmi3f8g1&l=6ef8c0d34b0/o&p=m2a2s""
"qa4110004&r=3f&lg=us&intl=us; T="z=4TVE6A4ZqE6A9dIIpt30。NQNTYGNDE3NTYwM081&""
"a=AAE&sk=DAAEwinHlDtEm/&d=c2wBTWpFQk16WXdNakUzTkRneQFhAUFBRQF6egE0VFZFNkFn"
"V0E-; I="i1=010g1q1u24252e2i2k2p2r494a4g4m4q55565b5g6g6t6u7172737678797a7f7""
"g7k7n7o888f8k8p8q989c9f9i9k9l9n9qacanapb0b3bdbfbhblbqbrbuc0c1c4cgcmcscteie"
"jgr&ir=73\r\n"
"\r\n"
send buf3
"!"
recv buf4 1
"!"
recv buf5 2048
"HTTP/1。0 200 OK\r\n"
"Content-Length: 16030\r\n"
"Content-Type: text/html\r\n"
"\r\n"
"
buf2包含了發給www。yahoo。com的包,buf5包含了從server收到的迴應。正如看到的winsock錄製的腳本並不像web腳本那樣具有可讀性,因爲winsock是我們最後的選擇。在buf序列號的後面是buf的字節數。例如5號buffer後面的2048就是表示收到了2048個幀。
注意:在很多buffer裏面你會發現僅僅包含了一個“!”,這是一個網絡常識,這個幀對於應用來說沒有任何的作用,完全可以把這些楨清除掉,在data。ws清除這個幀是效果的,需要到action裏把這些楨註釋掉。譬如例子中收到和發出的buffer可以用//註釋掉。這樣可以使腳本運行得更快。下邊的例子:buffers 0,1,3 和4 可以註釋掉:
lrs_create_socket("socket0","UDP","LocalHost="0"","RemoteHost=doors:2084",LrsLastArg);
lrs_create_socket("socket1","TCP","LocalHost=0","RemoteHost=www2。yahoo。com:80",LrsLastArg);
// lrs_send("socket0","buf0",LrsLastArg);
// lrs_receive("socket0","buf1",LrsLastArg);
lrs_send("socket1","buf2",LrsLastArg);
// lrs_send("socket0","buf3",LrsLastArg);
// lrs_receive("socket0","buf4",LrsLastArg);
lrs_receive("socket1","buf5",LrsLastArg);
lrs_send("socket0","buf6",LrsLastArg);