【问题标题】:LoadRunner Parameter not saving with value N%2FALoadRunner 参数未保存值为 N%2FA
【发布时间】:2018-11-19 13:36:46
【问题描述】:

我希望你们中的一个人能够帮助回答我遇到的这个脚本问题

在我的一个关联中,我有一个像这样保存的参数……

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".

这里有什么想法或想法吗?

编辑:

这是一个更好的例子

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;
}

【问题讨论】:

    标签: performance-testing loadrunner


    【解决方案1】:

    编辑:你会不会错过上次通话中的 %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]
    

    我们建议先进行所有操作,并仅在最终 URL 准备就绪时才调用 web_convert_param

    希望这会有所帮助。

    【讨论】:

    • 添加了更好的示例,您可以复制和粘贴。
    • facepalm 就是这样....我想知道为什么值不是 N%2FA 没关系。也许是因为特殊字符没有占位符..谁知道呢,谢谢你的帮助!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2022-10-19
    • 1970-01-01
    相关资源
    最近更新 更多