LR中點鼠標做關聯(winsock協議)

發表于:2008-07-09來源:作者:點擊數: 標簽:中點鼠標Winsockwinsock協議
關鍵字: LR 今天寫一下 winsock 的關聯操作。 以前看過一個文檔。在英文版的講 winsock 的,其中講到關聯。大致操作是: 1, 錄制。 2, 回放。這里是失敗。 3, 到 data.ws 里找需要關聯的數據。 4, 按 F7, 打開 EBCDIC translation 對話框。 5, 查找數據的位
關鍵字:LR
今天寫一下winsock的關聯操作。
以前看過一個文檔。在英文版的講winsock的,其中講到關聯。大致操作是:
1,錄制。
2,回放。這里是失敗。
3,data.ws里找需要關聯的數據。
4,F7,打開EBCDIC translation對話框。
5,查找數據的位置及偏移量。
6,到腳本中寫函數用:lrs_save_param, lrs_save_param_ex, lrs_save_searched_string,這三個函數。
Notes:winsock的關聯函數要寫到需要關聯的代碼行的下面。
 
說明一下這幾個函數:
Lrs_save_param:
int lrs_save_param ( char *s_desc,char *buf_desc, char *param_name, int offset, int param_len);

這個函數保存buffer中的數據到一個參數里。這個函數是用來在腳本中做關聯的。
前兩個參數是為了指定特定的參數。
在指定活動的socketbuffer之后,需要指定一個參數來保存數據。指定偏移量來顯示buffer中數據的偏移量和數據的長度。
保存了參數之后,可以在腳本和數據文件使用它,代替所有需要替代的值。替換時要用選項中的定義的符號來引用。
注意:要從buffer中保存一個編碼過的數據到參數中,要用lrs_save_param_ex函數。

lrs_save_param_ex
int lrs_save_param_ex ( char *s_desc, char *type, char *buff, int offset, int length, char *encoding, char *param );

這個函數保存一個buffer或者一個buffer的某一部分到參數中。這個變量指定buffer中某種類型的數據被保存:用戶buffer,錄制的buffer,或者上一個接收到的buffer.推薦使用在用戶數據中。
[Z1] 

 
 
下面說不用這么麻煩的操作的,直接點幾下就可以了。
 

1         錄制腳本

這個沒什么說的吧。選擇協議winsock,這要是也不懂,我建議你去看十遍手冊。
我這里錄制到的腳本如下:

       lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=192.168.1.114:5560", LrsLastArg);
       lrs_send("socket0", "buf0", LrsLastArg);
       lrs_receive("socket0", "buf1", LrsLastArg);
       lrs_create_socket("socket1", "TCP", "LocalHost=0", "RemoteHost=192.168.1.114:5560", LrsLastArg);
       lrs_send("socket1", "buf2", LrsLastArg);
       lrs_receive("socket1", "buf3", LrsLastArg);

相應的data.ws如下:

;WSRData 2 1
 
send buf0 50
       "OPERTYPE(LOGIN)ACCOUNTNAME(admin)PASSWORD(admin)"
 
recv buf1 155
       "DATALEN{{155}}000000USERID{{90}}USERNAME{{DMS"
       "\xcf\xb5\xcd\xb3"
       "WEB"
       "\xb2\xe9\xd1\xaf\xd5\xca\xbb\xa7"
       "}}USERDESCRIBE{{"
       "\xba\xfe\xd6\xdd\xb5\xe7\xc1\xa6\xbe\xd6"
       "\\DMS"
       "\xcf\xb5\xcd\xb3"
       "WEB"
       "\xb2\xe9\xd1\xaf\xd5\xca\xbb\xa7"
       "}}DEPARTNAME{{"
       "\xce\xb4\xd6\xaa"
       "}}ADMIN{{0}}CLIENTSESSIONID{{2}}"
 
send buf2 53
       "CLIENTSESSIONID(2)OPERTYPE(INITDEPARTLIST)"
 
recv buf3 683
       "DATALEN{{683}}000000XMLDATA{{<?xml version=\"1.0\" encoding=\"GB2312\"?>\n"
       "<!DOCTYPE DepartList>\n"
       "<DepartList>\n"
       ………………………………………………………………………………………………
這里就省略了些數據。反正也看著也暈乎乎的。

這里說明一下,我這里是用GIS系統,需要sessionID關聯的。我這上面的代碼很簡單,在buf1中有一個sessionID,在buf2send時就用到了它。

2         回放一下

在不關聯時回放是一定會有問題的。我回放的結果是:

Virtual User scrīpt started
Starting action vuser_init.
Ending action vuser_init.
Running Vuser...
Starting iteration 1.
Starting action Action.
Action.c(4): lrs_create_socket(socket0, TCP, ...)
Action.c(6): lrs_send(socket0, buf0)
Action.c(8): lrs_receive(socket0, buf1)
Action.c(11): lrs_create_socket(socket1, TCP, ...)
Action.c(13): lrs_send(socket1, buf2)
Action.c(15): lrs_receive(socket1, buf3)
Action.c(15): Mismatch (expected 683 bytes, 42 bytes actually received)
Action.c(17): lrs_create_socket(socket2, TCP, ...)
Action.c(19): lrs_send(socket2, buf4)
Action.c(21): lrs_receive(socket2, buf5)
Action.c(21): Mismatch (expected 34143 bytes, 42 bytes actually received)
Action.c(23): lrs_create_socket(socket3, TCP, ...)
Action.c(25): lrs_send(socket3, buf6)
Action.c(27): lrs_receive(socket3, buf7)
Action.c(27): Mismatch (expected 100 bytes, 42 bytes actually received)
Action.c(29): lrs_create_socket(socket4, TCP, ...)
Action.c(31): lrs_send(socket4, buf8)
Action.c(33): lrs_receive(socket4, buf9)
Action.c(33): Mismatch (expected 134 bytes, 42 bytes actually received)
Action.c(35): lrs_send(socket4, buf10)
Action.c(38): lrs_receive(socket4, buf11)
Action.c(38): Mismatch (expected 17520 bytes, 42 bytes actually received)
Action.c(41): lrs_create_socket(socket5, TCP, ...)
Action.c(43): lrs_send(socket5, buf12)
Action.c(45): lrs_receive(socket5, buf13)
Ending action Action.
Ending iteration 1.
Ending Vuser...
Starting action vuser_end.
Ending action vuser_end.
Vuser Terminated.

主要來看一下藍色的部分,因為沒有關聯,服務器是返回了42字節的數據,但是和錄制時的數據是不同的。所以會mismatch。這里可以在LOGMismatch的值打印出來,不過太長了,我就不打印了。

3         轉到樹視圖做關聯

選擇buf1看到數據:

DATALEN{{155}}000000USERID{{90}}USERNAME{{DMS\xcf\xb5\xcd\xb3WEB\xb2\xe9\xd1\xaf\xd5\xca\xbb\xa7}}USERDESCRIBE{{\xba\xfe\xd6\xdd\xb5\xe7\xc1\xa6\xbe\xd6\\DMS\xcf\xb5\xcd\xb3WEB\xb2\xe9\xd1\xaf\xd5\xca\xbb\xa7}}DEPARTNAME{{\xce\xb4\xd6\xaa}}ADMIN{{0}}CLIENTSESSIONID{{2}}

選擇CLIENTSESSIONID{{2}}中的2.右擊后選擇:create parameter。在彈出窗口中??吹侥J的是用lrs_save_param,這個函數只能關聯固定長度的數據。如果是固定的話,到這里點擊一下OK,就關聯成功了。LR會自動生成語句并且提示檢查其他的需要關聯的地方。彈出一個窗口提示。
而我這里的sessionID是動態的值。所以需要選擇:extract parameter data using boundaries復選框。這時生成的語句是這樣的:

lrs_save_searched_string( "socket0", LRS_LAST_RECEIVED, "Parameter3", NULL, NULL, -1, 152, 1 );

左右邊界是NULL空的,這里點擊left的瀏覽,彈出選擇左邊界的窗口,用鼠標選擇:SESSIONID{{,點擊Done。
再點擊right的瀏覽,選擇}}。
就確定了左右邊界了。
這里的語句如下:

lrs_save_searched_string("socket0",LRS_LAST_RECEIVED,"Parameter4","LB/BIN=SESSIONID{{", "RB/BIN=}}", 1, 0, -1);

一路小跑點OK。
彈出提示是否替換所有符合左右邊界的值。
點擊yes。LR會自動搜索所有需要關聯的地方并替換。
再轉到腳本視圖,看到腳本如下:

  lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=192.168.1.114:5560", LrsLastArg);
       lrs_send("socket0", "buf0", LrsLastArg);
       lrs_receive("socket0", "buf1", LrsLastArg);  
   lrs_save_searched_string("socket0", LRS_LAST_RECEIVED, "Parameter1", "LB/BIN=SESSIONID{{", "RB/BIN=}}", 1, 0, -1);
    lr_output_message("小樣還抓不到你!你不就是: %s嘛!",lr_eval_string("{Parameter1}"));       lrs_create_socket("socket1", "TCP", "LocalHost=0", "RemoteHost=192.168.1.114:5560", LrsLastArg);
       lrs_send("socket1", "buf2", LrsLastArg);
       lrs_receive("socket1", "buf3", LrsLastArg);

看藍色部分。后面一句輸出是我加上去的。
這樣就關聯成功了。

4         再次回放

看到LOG如下:

Virtual User scrīpt started
Starting action vuser_init.
Ending action vuser_init.
Running Vuser...
Starting iteration 1.
Starting action Action.
Action.c(4): lrs_create_socket(socket0, TCP, ...)
Action.c(6): lrs_send(socket0, buf0)
Action.c(8): lrs_receive(socket0, buf1)
Action.c(10): lrs_save_searched_string(socket0, get_last_received_buffer, Parameter1, LB/BIN=SESSIONID{{, RB/BIN=}}, 1, 0, -1)
Action.c(12): 小樣還抓不到你!你不就是: 8嘛!
Action.c(14): lrs_create_socket(socket1, TCP, ...)
Action.c(16): lrs_send(socket1, buf2)
Action.c(18): lrs_receive(socket1, buf3)
Action.c(20): lrs_create_socket(socket2, TCP, ...)
Action.c(22): lrs_send(socket2, buf4)
Action.c(24): lrs_receive(socket2, buf5)
Action.c(26): lrs_create_socket(socket3, TCP, ...)
Action.c(28): lrs_send(socket3, buf6)
Action.c(30): lrs_receive(socket3, buf7)
Action.c(32): lrs_create_socket(socket4, TCP, ...)
Action.c(34): lrs_send(socket4, buf8)
Action.c(36): lrs_receive(socket4, buf9)
Action.c(38): lrs_send(socket4, buf10)
Action.c(41): lrs_receive(socket4, buf11)
Action.c(44): lrs_create_socket(socket5, TCP, ...)
Action.c(46): lrs_send(socket5, buf12)
Action.c(48): lrs_receive(socket5, buf13)
Ending action Action.
Ending iteration 1.
Ending Vuser...
Starting action vuser_end.
Ending action vuser_end.
Vuser Terminated.

看,輸出了:
Action.c(12): 小樣還抓不到你!你不就是: 8嘛!

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

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