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

来源:互联网 发布:meshlab shader 编程 编辑:程序博客网 时间:2024/06/18 13:59
 
复制代码
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;}

原创粉丝点击