qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          LoadRunner—win/websockets通信中獲取數據

           過socket進行通信的分布式應用是比較常見的,包括winsocket和websocket,LR支持這兩個協議。
            在使用LR回放socket協議的腳本時,可能會經常需要獲取服務器返回的數據,語句格式如下:
          lrs_create_socket("socket0", "TCP", "RemoteHost=1.2.3.4:12345",  LrsLastArg);
          lrs_send("socket0", "buf0", LrsLastArg);
          lrs_receive("socket0", "buf1", LrsLastArg);
            很明顯,socket0是通信所用套接字,buf0是LR將要發送給服務器的內容(來自用戶行為),buf1則接收服務器返回。
            我們經常需要通過提取buf1中的內容,并適當的加一些斷定語言,來判斷這個通信操作有沒有獲取期望的數據。經常使用函數lrs_get_last_received_buffer,如下:
            lrs_get_last_received_buffer("socket0", &ActualBuffer, &NumberOfBytes);
            這樣就把lrs_receive接收到的數據保存在了內存中(指針ActualBuffer指向的一個有LR自動動態分配的內存塊),并返回數據長度(保存在NumberOfBytes中)。
            然后就可以像使用用戶自定義的數組一樣使用該緩沖區,如ActualBuffer[0]。需要注意的是,使用完成后需要手動釋放ActualBuffer指向的內存,通過調用lrs_free_buffer。
            下面是一個簡單示例,在處理服務器返回數據時,我們將其作為char數組處理,經過驗證這是沒問題的。
            完整代碼:
          vuser_init.c
          #include "lrs.h"
          vuser_init()
          {
          lrs_startup(257);
          return 0;
          }
          Action.c

          /*********************************************************************
          * Created by Mercury Interactive Windows Sockets Recorder
          *
          * Created on: Tue Nov 12 14:51:33
          *********************************************************************/
          #include "lrs.h"
          Action()
          {
          int NumberOfBytes=0;
          char *ActualBuffer;
          unsigned char num1,num2,num3,num4;
          unsigned int jifen =0;
          int dj =0 ;
          char * tmp;
          int i=0;
          lrs_create_socket("socket0", "TCP", "RemoteHost=10.15.107.12:12345",  LrsLastArg);
          lrs_send("socket0", "buf0", LrsLastArg);
          lrs_receive("socket0", "buf1", LrsLastArg);
          /* Get the last received buffer and its size. */
          lrs_get_last_received_buffer("socket0", &ActualBuffer, &NumberOfBytes);
          //7B 9C 0B 00 00 0F 00 02 6C 00 00 00 08 00 90 5F 01 00 0D 00 00 00,從第偏移量17取數,直到14,作為積分;偏移量18為等級。
          lr_output_message("The last buffer's size is:%d/n", NumberOfBytes);
          num1 = ActualBuffer[17];  //最高位
          num2 = ActualBuffer[16];
          num3 = ActualBuffer[15];
          num4 = ActualBuffer[14];  //最低位
          lr_output_message("num1 = %d,num2 = %d,num3 = %d,num4 = %u\n",num1,num2,num3,num4);
          jifen = (num1 / 16 ) * 268435456 + (num1 % 16)* 16777216 + (num2 / 16)* 1048576 +(num2 % 16) * 65536 +(num3 / 16) * 4096 +  (num3 % 16 ) * 256 +(num4 / 16)* 16 + (num4 % 16) * 1; //注意00 90 5F 01是16進制格式,其中01(num1)是最高位。
          dj=(int)ActualBuffer[18];
          lrs_free_buffer(ActualBuffer);
          lr_output_message("jifen = %d\n",jifen );
          lr_output_message("dj = %d\n",dj );
          lrs_close_socket("socket0");
          return 0;
          }
          vuser_end.c
          [cpp] view plaincopy
          #include "lrs.h"
          vuser_end()
          {
          lrs_cleanup();
          return 0;
          }

          posted on 2013-12-10 10:53 順其自然EVO 閱讀(1179) 評論(0)  編輯  收藏 所屬分類: loadrunner

          <2013年12月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 杭锦旗| 新竹县| 武清区| 峡江县| 靖安县| 天气| 毕节市| 鄂温| 镇江市| 航空| 界首市| 温州市| 拜泉县| 安远县| 桐城市| 大城县| 若羌县| 秀山| 涟源市| 龙门县| 永州市| 祁门县| 通道| 肥东县| 永登县| 嘉祥县| 镇赉县| 岚皋县| 余江县| 仲巴县| 连城县| 凌云县| 黄大仙区| 江门市| 沙雅县| 隆林| 赞皇县| 静安区| 旌德县| 长汀县| 金坛市|