LoadRunner Параметр не сохраняется со значением N% 2FA - PullRequest
0 голосов
/ 19 ноября 2018

Я надеялся, что кто-то из вас сможет помочь решить эту проблему со сценарием, которая у меня есть

В одном из моих соотношений у меня есть параметр, который сохраняется как ...

C_RegionValue = “N/A”

Однако, когда мне нужно заменить это значение на один из моих URL, N / A необходимо изменить на N% 2FA Итак, я выполняю это следующим образом:

if ( (strcmp("N/A", lr_eval_string("{C_RegionValue}"))) == 0){
        lr_save_string("N%2FA", "C_RegionValue");
}

И это работает правильно

do_create_RegionString.c(16): Notify: Saving Parameter "C_RegionValue = N/A".
do_create_RegionString.c(18): Notify: Parameter Substitution: parameter "C_RegionValue" =  "N/A"
do_create_RegionString.c(19): Notify: Saving Parameter "C_RegionValue = N%2FA".

И я даже могу снова использовать этот новый параметр в последующих вызовах

lr_param_sprintf("temp_RString", "&vs_geoType_%d=Region&vs_geo_%d=%s", i, i, 
lr_eval_string("{C_RegionValue}"));

do_create_RegionString.c(23): Notify: Parameter Substitution: parameter "C_RegionValue" =  "N%2FA"
do_create_RegionString.c(23): Notify: Saving Parameter "temp_RString = &vs_geoType_6=Region&vs_geo_6=N%2FA".

Но по какой-то причине я не могу использовать его на этом звонке

lr_param_sprintf(lr_eval_string("{RegionString}"), lr_eval_string("{P_RGet_TmpVal}{temp_RString}"));

Нет ошибок, просто никогда не сохраняется новое значение, Он заменяет все правильно, но значение никогда не сохраняется. Я знаю, что этот раздел кода работает, потому что он делает это 5 раз до этого вызова.

do_create_RegionString.c(35): Notify: Parameter Substitution: parameter "RegionString" =  "PickAnyRegion_XL"
do_create_RegionString.c(35): Notify: Parameter Substitution: parameter "P_RGet_TmpVal" =  "&vs_geoType_0=Region&vs_geo_0=Global (All Regions)&vs_geoType_1=Region&vs_geo_1=E&vs_geoType_2=Region&vs_geo_2=GC&vs_geoType_3=Region&vs_geo_3=I&vs_geoType_4=Region&vs_geo_4=NA&vs_geoType_5=Region&vs_geo_5=SA"
do_create_RegionString.c(35): Notify: Parameter Substitution: parameter "temp_RString" =  "&vs_geoType_6=Region&vs_geo_6=N%2FA"

И это становится еще более странным, если я не изменяю значение на N% 2FA и оставляю его как N / A, или даже если я использую тот же оператор If и меняю значение обратно на N / A, все работает правильно ...

do_create_RegionString.c(35): Notify: Parameter Substitution: parameter "RegionString" =  "PickAnyRegion_XL"
do_create_RegionString.c(35): Notify: Parameter Substitution: parameter "P_RGet_TmpVal" =  "&vs_geoType_0=Region&vs_geo_0=Global (All Regions)&vs_geoType_1=Region&vs_geo_1=E&vs_geoType_2=Region&vs_geo_2=GC&vs_geoType_3=Region&vs_geo_3=I&vs_geoType_4=Region&vs_geo_4=NA&vs_geoType_5=Region&vs_geo_5=SA"
do_create_RegionString.c(35): Notify: Parameter Substitution: parameter "temp_RString" =  "&vs_geoType_6=Region&vs_geo_6=N/A"
do_create_RegionString.c(35): Notify: Saving Parameter "PickAnyRegion_XL = &vs_geoType_0=Region&vs_geo_0=Global (All Regions)&vs_geoType_1=Region&vs_geo_1=E&vs_geoType_2=Region&vs_geo_2=GC&vs_geoType_3=Region&vs_geo_3=I&vs_geoType_4=Region&vs_geo_4=NA&vs_geoType_5=Region&vs_geo_5=SA&vs_geoType_6=Region&vs_geo_6=N/A".

Есть какие-нибудь мысли или идеи здесь?

EDIT:

Вот лучший пример

Action()
{

lr_save_string("N/A","C_RegionValue");
lr_save_string("XL_PickAnySearch", "RegionString");
lr_save_string("&vs_geoType_0=Region&vs_geo_0=test","temp_RString");
lr_save_string(lr_eval_string("{temp_RString}"), "XL_PickAnySearch");

/*
Lines 12-13 section will convert N/A into N%2FA, if left uncommented Line 20 
will not save the string, if commented line 20 will save the string
*/
web_convert_param("C_RegionValue", "SourceEncoding=PLAIN", 
"TargetEncoding=URL", LAST);

lr_param_sprintf("temp_RString", "&vs_geoType_%d=Region&vs_geo_%d=%s", 1, 1, 
lr_eval_string("{C_RegionValue}"));

lr_param_sprintf("P_RTmpVal", "{%s}", lr_eval_string("{RegionString}"));
lr_param_sprintf("P_RGet_TmpVal", "%s", lr_eval_string(lr_eval_string("{P_RTmpVal}")));

lr_param_sprintf(lr_eval_string("{RegionString}"), lr_eval_string("{P_RGet_TmpVal}{temp_RString}"));
    return 0;
}

1 Ответ

0 голосов
/ 19 ноября 2018

РЕДАКТИРОВАТЬ: Не могли бы вы пропустить% s в последнем звонке?

lr_param_sprintf (lr_eval_string ("{RegionString}"), "% s" , lr_eval_string ("{P_RGet_TmpVal} {temp_RString}"));

Я не уверен, что понимаю вашу проблему, но я постараюсь дать вам несколько указаний для продолжения.

1) lr_param_sprintf принимает имя параметра в качестве первого аргумента, но, похоже, вы пытаетесь отправить ему оцененный параметр в lr_param_sprintf(lr_eval_string("{RegionString}"), ... Может быть, вы имеете в виду lr_param_sprintf("RegionString",...)?

2) Изменение «N / A» на «N% 2FA» известно как кодировка URL. Вы можете сделать это без if с помощью встроенной функции. Смотрите пример:

lr_save_string("N/A","C_RegionValue");

web_convert_param("C_RegionValue", "SourceEncoding=PLAIN", 
    "TargetEncoding=URL", LAST);


lr_save_string("CA","C_RegionValue");

web_convert_param("C_RegionValue", "SourceEncoding=PLAIN", 
    "TargetEncoding=URL", LAST);

Выход:

Action.c(3): Notify: Saving Parameter "C_RegionValue = N/A".
Action.c(5): web_convert_param started             [MsgId: MMSG-26355]
Action.c(5): Notify: Saving Parameter "C_RegionValue = N%2FA".
Action.c(5): web_convert_param was successful             [MsgId: MMSG-26392]
Action.c(9): Notify: Saving Parameter "C_RegionValue = CA".
Action.c(10): web_convert_param started          [MsgId: MMSG-26355]
Action.c(10): Notify: Saving Parameter "C_RegionValue = CA".
Action.c(10): web_convert_param was successful           [MsgId: MMSG-26392]

Мы рекомендуем сначала выполнить все манипуляции и совершать вызов web_convert_param, только когда готов окончательный URL.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...