在討論 winsock 解決方案 之前,我們先討論一下各種協議是如何工作。從前面的簡介可以了解到很多的高級協議,例如 FTP" name="description" />

LoadRunner與Winsock協議

發表于:2008-10-09來源:作者:點擊數: 標簽:
MI LY: 宋體; mso-font-kerning: 0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋體">在討論 winsock 解決方案 之前,我們先討論一下各種協議是如何工作。從前面的簡介可以了解到很多的高級協議,例如 FTP

MILY: 宋體; mso-font-kerning: 0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋體">在討論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的字節數。例如5buffer后面的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);

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97