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)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 长宁区| 青神县| 新源县| 大埔县| 炎陵县| 徐州市| 石首市| 姚安县| 孝义市| 渑池县| 揭西县| 巴中市| 易门县| 梁平县| 雷波县| 延津县| 蒙城县| 乌兰浩特市| 吉水县| 新巴尔虎右旗| 五华县| 宁安市| 威信县| 绩溪县| 隆德县| 青神县| 宣化县| 罗江县| 岫岩| 和平县| 镇巴县| 永吉县| 确山县| 萨嘎县| 台安县| 岢岚县| 九台市| 肇州县| 新巴尔虎右旗| 赣州市| 福鼎市|