不能将自定义字符串的相关值捕获为“左边界”

时间:2019-04-04 15:16:26

标签: c loadrunner

我正在捕获一个字符串作为我的左边界(LB),然后使用strcpy将LB分为3个部分,并将值放入char MyString中。播放脚本时,没有捕获到相关性。

char MyString正在正确捕获值,因为当我使用lr_output_message打印它时,它正向我显示来自服务器响应值的正确LB。

这正是我在做什么...

char MyString[9999];

// original LB value is LB=DesktopQueuedActivitiesLV:0:CreateDate\" label=\"Create Date\" value=\"",

for (i = 0 ; i < 1 ; i++) {
    lr_save_int(i,"MyRow");
    strcpy(MyString, "DesktopQueuedActivitiesLV:");
    strcat(MyString, lr_eval_string("{MyRow}"));
    strcat(MyString, ":CreateDate\\\" label=\\\"Create Date\\\" value=\\\"");

    lr_output_message("MyString = %s",MyString);

    web_reg_save_param("DateReceived",
    lr_eval_string("LB={MyString}"),      
    "RB=\">", 
    "Ord=1",
    LAST);
}

重播时找不到DateReceived的值

如果将行lr_eval_string("LB={MyString}")替换为实际的LB值,则它可以正常工作。另外,lr_output_message("MyString = %s",MyString);正在打印完全相同的原始LB值。

无法弄清楚MyString为什么捕获正确的值,但是在播放web_reg_save_param("DateReceived",时无法在实际行中替换。请帮忙。

1 个答案:

答案 0 :(得分:0)

您正在对循环内部的C参数使用loadrunner参数指定。这里的两个loadrunner参数引用都是奇怪的,因为多次重复执行相同的相关性语句也是一样,因为只有最后一个在执行时才会产生影响。

lr_output_message("MyString = %s",MyString);

web_reg_save_param("DateReceived",
lr_eval_string("LB={MyString}"),

注意,lr_output_message()将MyString视为C变量,但是web_reg_save_param()的第二个参数将同一元素视为LoadRunner参数。您需要将C字符串转换为LoadRunner参数,建议使用其他名称,例如LR_MyString来区分C字符串和LR参数,或创建形式为“ LB = myleftboundary”

的C参数。
lr_output_message("MyString = %s",MyString);
lr_save_string(MyString, "LR_MyString");

web_reg_save_param("DateReceived",
lr_eval_string("LB={LR_MyString}"),

OR

strcpy(MyString, "LB=DesktopQueuedActivitiesLV:");
strcat(MyString, lr_eval_string("{MyRow}"));
strcat(MyString, ":CreateDate\\\" label=\\\"Create Date\\\" value=\\\"");

lr_output_message("MyString = %s",MyString);

web_reg_save_param("DateReceived",
MyString,      

由于在此测试中执行一次循环,因此您似乎正在使用DateReceived创建伪数组的路径,但是您可能希望增加循环条目的数量。在这种情况下,任何数量的大于1的数组元素都可能失败,因为您将始终以最后一次执行为已完成的关联。