web_convert_param для порядковых значений в loadrunner

Я ищу преобразование каждого порядкового значения, возвращаемого из web_reg, с помощью web_convert_param в цикле for и выполняю некоторые операции. Ниже мой код:

char str1[] = "";
web_reg_save_param("fetch", "LB=XXXXX", "RB=YYYYY", "ORD=ALL", LAST);

lr_param_sprintf("c_final_buf", "");

for (k = 1; k <= atoi(lr_eval_string("{fetch_count}")); k++){

        sprintf(str1, "%s", lr_paramarr_idx("fetch",k));

        lr_save_string(str1, "buffer1");

        web_convert_param("buffer1Conv", "SourceString={buffer1}", "SourceEncoding=PLAIN", "TargetEncoding=URL",LAST);

        lr_param_sprintf("c_buffer", "ABC%s=%s&",
                         lr_paramarr_idx("c_param",k), lr_eval_string("{CovPunchVal}"));

        lr_param_sprintf("c_final_buf", "%s%s", lr_eval_string("{c_final_buf}"), lr_eval_string("{c_buffer}"));
    }

Используя приведенный выше код, я иногда получаю ИСКЛЮЧЕНИЕ НАРУШЕНИЯ ПАМЯТИ в sprintf(str1, "%s", lr_paramarr_idx("fetch",k));. Может кто-нибудь предложить, как я могу добиться выше, не привлекая никаких внешних переменных.

EDIT1: хотелось бы избежать использования lr_paramarr_idx("c_param",k), так как это может вызвать исключения памяти во время выполнения в соответствии с несколькими онлайн-формами.


person S.ai    schedule 20.04.2020    source источник


Ответы (2)


Причина, по которой вы получаете MEMORY VIOLATION EXCEPTION в sprintf(str1, "%s", lr_paramarr_idx("fetch",k));, может быть связана с объявлением str1.

Это должен быть массив символов фиксированного размера, например char str1[256];, а не char str1[] = "";.

Кроме того, возможно, следующий код может быть вам полезен в качестве альтернативы:

    int k;    
    int count;

//web_reg_save_param("fetch", "LB=XXXXX", "RB=YYYYY", "ORD=ALL", LAST);

// simulation of parameters array

            lr_save_string("101:abc","fetch_1");
            lr_save_string("102:abc","fetch_2");
            lr_save_string("103:abc","fetch_3");
            lr_save_string("104:abc","fetch_4");
            lr_save_string("105:abc","fetch_5");
            lr_save_string("106:abc","fetch_6");
            lr_save_string("107:abc","fetch_7");
            lr_save_string("108:abc","fetch_8");
            lr_save_string("109:abc","fetch_9");
            lr_save_string("110:abc","fetch_10");
            lr_save_string("111:abc","fetch_11");
            lr_save_string("112:abc","fetch_12");
            lr_save_string("113:abc","fetch_13");
            lr_save_string("114:abc","fetch_14");
            lr_save_string("115:abc","fetch_15");
            lr_save_string("116:abc","fetch_16");
            lr_save_string("117:abc","fetch_17");
            lr_save_string("118:abc","fetch_18");
            lr_save_string("119:abc","fetch_19");
            lr_save_string("120:abc","fetch_20");

            lr_save_string("20","fetch_count");


// convert values inside array            
count =  atoi(lr_eval_string("{fetch_count}"));          

for (k = 1; k <= count; k++){
                lr_save_int(k,"ParamIndex");
                web_convert_param(lr_eval_string("fetch_{ParamIndex}"), "SourceEncoding=PLAIN", "TargetEncoding=URL",LAST);
}

// continue the required manipulations…

person Buzzy    schedule 21.04.2020

Вопрос решился сейчас. Ниже приведен код обновления:

char tmpbuf[256];
for (k = 1; k <= atoi(lr_eval_string("{fetch_count}")); k++){

        // sprintf(str1, "%s", lr_paramarr_idx("fetch",k));
        // lr_save_string(str1, "buffer1");

        sprintf(tmpbuf, lr_paramarr_idx("fetch",k));

        lr_save_string(tmpbuf, "buffer1");

        web_convert_param("buffer1Conv", "SourceString={buffer1}", "SourceEncoding=PLAIN", "TargetEncoding=URL",LAST);

        lr_param_sprintf("c_buffer", "ABC%s=%s&",
                         lr_paramarr_idx("c_param",k), lr_eval_string("{CovPunchVal}"));

        lr_param_sprintf("c_final_buf", "%s%s", lr_eval_string("{c_final_buf}"), lr_eval_string("{c_buffer}"));
    }

person S.ai    schedule 22.04.2020