loadrunner使用socket協議發送16進制數據

在性能測試過程中,我們經常會見到socket協議的接口測試傳輸的是16進制,遇到這種我們如何把data.ws裏的數據傳輸到服務器?

第一步:確認傳輸數據的內容,然後每兩位數據前邊添加\x;例如:字符串04077b22636d6422需要轉換成loadrunner可以讀取的數據\x04\x07\x7b\x22\x63\x6d\x64\x22

第二步:確認數據傳輸的格式;有的數據不會要求傳輸數據的多少,但是會判斷字符串最後是否添加有"00",那麼我們需要把字符串內容末尾加上"\x00";字符串04077b22636d6422需要轉換成loadrunner可以讀取的數據\x04\x07\x7b\x22\x63\x6d\x64\x22\x00

第三部:數據參數化;當我們做完第一、二步,我們需要根基測試場景製造測試數據,測試數據的製造我們需要注意兩點:

      1、數字佔用倆個字符

       2、字母可能佔用倆個字符或者佔用四個(我還不太確定、因爲曾經將一個字母改成數字,發現服務器無法接受數據)

個人建議:16進制數據需要參數化時,全部使用數字,這樣可以避免不必要的麻煩。

參數化內容:如果參數化的數據是數字,我們可以直接將16進制替換成數字(注意:16進制是2個一組的,刪除掉一組16進制數據,我們就需要添一個數字),保持原數據長度不變,我們就可以開始性能測試了。

現在拿一個自己寫的例子:(如果不能實現請勿怪,我只是希望我自己以後寫的時候別忘了,各種函數的使用)

    char *Data;
    int rc;
    int Size = 0;
    int msgOk = -1;
    char *position = "";
    char *passMsg = "succ";
    int nSizeStr = 0;
    char* buf;
    char totalbuf[1024];

    int receive_code;
    int send_code;
    memset( &Data,0,8 );
    
    lr_start_transaction("lianjie1");

    rc = lrs_create_socket("sock0", "TCP", "LocalHost=0", "RemoteHost=127.0.0.1:9988", LrsLastArg);

    lr_output_message("%d", rc);

    if (rc != 0) {

    lr_end_transaction("lianjie1", LR_FAIL);

    }

    else {

    lr_end_transaction("lianjie1", LR_PASS);

    }

    lr_start_transaction("trans_01");

    lrs_set_send_timeout(90,0);

//    lrs_send("sock0", "buf0", LrsLastArg);  \x34\xf9\x68
//     nSizeStr = -2013134848;
//     buf = (char*)nSizeStr;
//     lr_output_message("%s", lr_eval_string("buf"));
//     strcat(totalbuf, lr_eval_string("buf"));
//     strcat(totalbuf, lr_eval_string("{buf0}"));
//     lr_output_message("%s", lr_eval_string("totalbuf"));

    lr_rendezvous("fasong");

    lrs_send("sock0", "buf0", LrsLastArg);
//往"tt"發送"buf0"中的數據

    lr_output_message("%d", send_code);

//    lrs_set_recv_timeout2(10,0);
//這裏設置返回超時10秒
    lrs_receive("sock0", "buf1", LrsLastArg);

    receive_code = lrs_receive("sock0", "buf1", LrsLastArg);

//將"tt"中返回的數據存放到"buf1"中
//注意,這裏需要調整buf1的長度適應實際業務中的數據

    lr_output_message("%d", receive_code);
     lr_output_message("成功,交易響應碼: %s",lr_eval_string("<buf1>"));

     lrs_get_last_received_buffer("sock0", &Data, &Size);

     position=(char*)strstr(Data,passMsg);

     msgOk = (int) ( position - Data + 1);

    lrs_save_param_ex("sock0", "user", Data, 20, 3, "ascii", "new_parameter");
//    lrs_save_param_ex("sock0", "user", Data, 0, 2942, "ascii", "new_parameter");

    lrs_free_buffer(Data);

    lr_output_message("%d", Size);

    lr_output_message("%d", receive_code);

    lr_output_message("%s", lr_eval_string("<new_parameter>"));


     lrs_save_param("sock0", NULL, "new_parameter", 49, 3);
    


    if(strcmp(lr_eval_string("<new_parameter>"),"cmd")==0)
     {
    lr_output_message("成功,交易響應碼: %s", lr_eval_string("<new_parameter>"));

    lr_end_transaction("trans_01", LR_PASS);

    }
    else
    {

    lr_output_message("失敗,交易響應碼: %s", lr_eval_string("<new_parameter>"));

    lr_end_transaction("trans_01", LR_FAIL);


    }

    lrs_close_socket("sock0");

    return 0;

data.ws

send buf0
    "\x04\x07\x7b\x22\x63\x6d\x64\x22<number>\x00

其中:參數化number內容:000001~010000

recv buf1 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章