您的位置:首页 > 其它

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

2017-05-26 16:42 302 查看
 

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: