LoadRunner中自定义C函数实现字符串替换

 
复制代码
1.在globals.h 中定义一个函数ReplaceStr,实现字符串的替换:

int ReplaceStr(char* sSrc, char* sMatchStr, char* sReplaceStr)
{
        int StringLen;
        char caNewString[1024];
        char* findPos;
        merc_timer_handle_t timer_ReplaceStr = lr_start_timer();

        lr_debug_message(LR_MSG_CLASS_EXTENDED_LOG ,"Notify:Function 'ReplaceStr' started.");
        findPos =(char *)strstr(sSrc, sMatchStr);
        if( (!findPos) || (!sMatchStr) ){
            lr_debug_message(LR_MSG_CLASS_EXTENDED_LOG ,"Notify:Function 'ReplaceStr' ended with error!");
            return -1;
        }               

        while( findPos)
        {
                memset(caNewString, 0, sizeof(caNewString));
                StringLen = findPos - sSrc;
                strncpy(caNewString, sSrc, StringLen);
                strcat(caNewString, sReplaceStr);
                strcat(caNewString, findPos + strlen(sMatchStr));
                strcpy(sSrc, caNewString);

                findPos =(char *)strstr(sSrc, sMatchStr);
        }
        lr_debug_message(LR_MSG_CLASS_EXTENDED_LOG,"Result:%s",sSrc);
        free(findPos);
        lr_debug_message(LR_MSG_CLASS_EXTENDED_LOG ,"Notify:Function 'ReplaceStr' ended (Duration: %lf)",
                         lr_end_timer(timer_ReplaceStr));
        return 0;
}

 

2.在init/Action/end 中调用:

char strView[1024];


  web_reg_save_param("viewState5",
        "LB=\"javax.faces.ViewState\" value=\"",
        "RB=\"",
        LAST);

sprintf(strView,lr_eval_string("{viewState5}"));

 ReplaceStr(strView,"+","%2B");
 ReplaceStr(strView,"/","%2F");
 ReplaceStr(strView,"=","%2D");

  lr_save_string(lr_eval_string(strView), "viewState6");

memset(strView,0,sizeof(strView));
 
 
3. 当然也可以打开一个文件,读取其内容,替换相对应的部分.

Action() {    //read file  char Data[1024];      //此变量需设置为全局变量,否则会出现定义超长的问题     char buffer[1024];    //此变量需设置为全局变量,否则会出现定义超长的问题     int count = 0;     long file_stream;     char * filename = "C:\\PTTool\\LRscript\\PCL-message\\Demographic\\1.txt";     if ((file_stream = fopen(filename, "rb+")) == NULL )  //读写方式打开文件     {         lr_error_message ("Cannot open %s", filename);         return -1;     }     // 一直读到文件结束     while (!feof(file_stream))      {         fread(buffer, sizeof(char), 1024, file_stream);         //此BUFFER大小可以自行设置,建议设置到接口允许的最大值,经测试,设置过小,而文件较大的时候,读取会出现读不完的问题,原因未知         if (ferror(file_stream))         {             lr_output_message ("Error reading file %s", filename);             break;

        }         strcat(Data,buffer);     }

        count = strlen(Data);     lr_output_message ("Total number of bytes read = %d", count);     lr_output_message ("Data is  = %s", Data);     // Close the file stream     if (fclose(file_stream))     {               lr_error_message ("Error closing file %s", filename);     }       cardNumber=lr_eval_string("{CardNum}");

lr_save_timestamp("paraTime",LAST);     lr_output_message(lr_eval_string("{paraTime}"));     timestp=lr_eval_string("{paraTime}");

    // call func     ReplaceStr(Data, "timeStamp",timestp);

ReplaceStr(Data, "cardNumber",cardNumber);

    lr_output_message ("Data changed to  %s", Data);        //end func         return 0; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值