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 

猜你喜欢

转载自blog.csdn.net/u014179640/article/details/104404997
今日推荐