<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

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

    使用LoadRunner進行服務器性能測試

     由于項目進入尾聲,需要進行性能測試,沒有專業的性能測試工程師,只好自己動手,研究一下loadrunner.
      發現loadrunner對web測試介紹比較多,牽涉到winsocket測試的資料極少,不過到處找一找,研究一下,也是可行的.
      先說一下我們的協議,采用tcp協議,與客戶端采用自定義二進制流的方式進行通信.遵從普通的自定義協議的方式,即協議結構采用包頭+包體的形式,包頭為固定大小的長度,并在包頭中加入包體總長度的字段.
      好了,下面可以用loadrunner進行協議測試了.首先想法在PC上實現一個簡單的協議生成軟件,我采用python進行編制,將協議跑一遍,然后用loadrunner進行錄制.由于是針對單個的協議錄制,因而在loadrunner中生成的腳本一目了然.考慮到同一條協議根據不同的條件,返回的數據是不一樣的,因此腳本稍有點復雜.
      錄制的腳本默認采用函數lrs_receive()來接收腳本,根據loadrunner的匹配規則,默認用data.ws中recv buf 中指定的長度來進行匹配,這樣,由于同一個協議返回的數據總是不斷變化的,就必然導致測試不通過的情況.在網上查到,可以通過某個設置使得每次達到錄制時的數據量即可,但這樣做有個明顯的缺陷,每次讀到到指定的數據后就不讀取了,針對短連接,或是只測試一次的還可以,要是長連接,需要不停發送和接收的,必然出現測試不準確的問題.
      以下為解決方法,將lrs_receive改為lrs_receive_ex,并將一次讀取改為兩次讀取,第一次讀取固定大小的包頭,讀完包頭后,解析出包體的大小,然后再讀取包體.
      此方法適用所有自定義winsocket協議,附上相關腳本.
    /********************************************************************* * Created by Mercury Interactive Windows Sockets Recorder * * Created on: Fri Jul 13 16:08:19 *********************************************************************/
    #include "lrs.h"
    vuser_init()
    {
    lrs_startup(257);
    lr_start_transaction("create_socket");
    lrs_create_socket("socket0", "TCP", "RemoteHost=127.0.0.1:110",  LrsLastArg);
    lr_end_transaction("create_socket", LR_AUTO);
    return0;
    }
    /********************************************************************* * Created by Mercury Interactive Windows Sockets Recorder * * Created on: Fri Jul 13 16:08:19 *********************************************************************/
    #include "lrs.h"long getNextRecvLen(char* socketID)
    {
    int NumberOfBytes = 0;
    int NextRecvLen = 0;
    char *Buffer;
    lrs_get_last_received_buffer(socketID, &Buffer, &NumberOfBytes);
    memcpy((char*)&NextRecvLen, Buffer+20, 4);
    lr_log_message("last_received:%d, NextRecvLen:%d", NumberOfBytes, NextRecvLen);
    return NextRecvLen;
    }
    int receive_ex(char* socketID, char* buf)
    {
    long NextRecvLen = getNextRecvLen(socketID);//getNextRecvLen("socket0");char flag[50];
    memset(flag, 0, sizeof(flag));
    sprintf(flag, "NumberOfBytesToRecv=%d", NextRecvLen);
    lr_log_message(flag);
    lrs_receive_ex(socketID, buf, flag, LrsLastArg);
    }
    void doOneThing(int index)
    {
    char sendbuf[50];
    char recvbuf1[50];
    char recvbuf2[50];
    char transbuf[50];
    memset(transbuf, 0, sizeof(transbuf));
    sprintf(transbuf, "one_send_recv_%d", index);
    lr_start_transaction(transbuf);
    memset(sendbuf, 0, sizeof(sendbuf));
    memset(recvbuf1, 0, sizeof(recvbuf1));
    memset(recvbuf2, 0, sizeof(recvbuf2));
    sprintf(sendbuf, "buf%d", 2*index);
    sprintf(recvbuf1, "buf%d", 2*index+1);
    sprintf(recvbuf2, "dbuf%d", index);
    lrs_send("socket0", sendbuf, LrsLastArg);
    lrs_receive_ex("socket0", recvbuf1, "NumberOfBytesToRecv=32", LrsLastArg);
    receive_ex("socket0", recvbuf2);
    lr_end_transaction(transbuf, LR_AUTO);
    }
    Action()
    {
    lr_rendezvous("read_all_req_0");
    doOneThing(0);
    }
    /********************************************************************* * Created by Mercury Interactive Windows Sockets Recorder * * Created on: Fri Jul 13 16:08:19 *********************************************************************/
    #include "lrs.h"
    vuser_end()
    {
    lrs_close_socket("socket0");
    lrs_cleanup();
    return0;
    }
      由于是分兩次讀取數據,必然讀取的內容與錄制的會稍有不同,幸好我們判斷成功與否不是用返回的數據進行比較,而只是核對一下數據的大小,因此完全可以手動修改數據腳本,以下為在錄制的基礎上手工修改的腳本(注意,只是更改了接收端)
    send  buf0 28
    "Test"
    "\x00\x1b\x00\x00\x00"
    "\x00\x00\x00\x00"
    "\x12\x01\x00\x00\x00\x01\x00\x00\x00"
    "\x02\x00\x01\x00\x01\x00"
    recv  buf1 -1
    recv rbuf0 -1
     

    posted on 2014-08-27 10:32 順其自然EVO 閱讀(869) 評論(0)  編輯  收藏 所屬分類: loadrunner

    <2014年8月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲熟妇色自偷自拍另类| 国产又长又粗又爽免费视频| 国产一级片免费看| 毛片在线播放免费观看| 搡女人免费免费视频观看| 中文字幕免费视频精品一| 久久免费视频一区| a级毛片毛片免费观看久潮喷| 韩国免费A级毛片久久| 热久久这里是精品6免费观看| a级成人免费毛片完整版| 香蕉成人免费看片视频app下载| 无码国产精品一区二区免费3p| 99re视频精品全部免费| 无码国产精品一区二区免费式直播 | 日韩精品视频免费在线观看| 成人a视频片在线观看免费| 国产极品美女高潮抽搐免费网站| 免费一级毛片免费播放| 亚洲女同成人AⅤ人片在线观看| 久久久久亚洲AV无码专区网站| 亚洲精品无码永久在线观看你懂的| 久久精品亚洲综合专区| 亚洲午夜在线一区| 亚洲乱码日产精品一二三| 男女作爱免费网站| 久久国产乱子伦精品免费强| 67pao强力打造国产免费| 天天摸天天碰成人免费视频| 亚洲国产成人精品无码久久久久久综合 | 国产亚洲美女精品久久久久| 一级白嫩美女毛片免费| 久久综合九色综合97免费下载| 成人免费视频网站www| 国产精品国产午夜免费福利看| 国产亚洲AV夜间福利香蕉149| 亚洲小视频在线观看| 亚洲国产欧美国产综合一区| 国产精品高清免费网站| 亚洲成年人免费网站| 国产大片线上免费看|