【问题标题】:Issue with the logic in LoadRunner scriptLoadRunner 脚本中的逻辑问题
【发布时间】:2015-06-11 14:01:25
【问题描述】:

我编写了一个基于 Web 协议的应用程序流程,我必须在其中选择 20 个报告进行下载。 ReportID 显示在请求中。我正在自定义请求,以便请求获取 20 个报告(报告 ID),它们是 EXCEL 或 CSV(报告输出),状态为成功(报告状态)。我已经使用 Ord=All 通过传统的“wsrp”成功捕获了 LR 参数,这是我的逻辑

int i;
int count=0;
char ro_buffer[25],rs_buffer[25];
lr_save_string("","R_buffer");

for(i=0;i<=atoi(lr_eval_string("{ReportID_count}");i++)
{
sprintf(RO_buffer,"%s",lr_paramarr_idx(ReportOutput,i))
sprintf(RS_buffer,"%s",lr_paramarr_idx(ReportStatus,i))
if((lr_eval_string(ro_buffer)=="EXCEL" || lr_eval_string(ro_buffer) =="CSV") && lr_eval_string(rs_buffer)=="S")
{
count++;
if(count>20) break;
lr_param_sprintf("R_buffer","%s%s%2c",lr_eval_string("{R_buffer}"),lr_paramarr_idx(ReportID,i));
 }
}

在上述代码中,即使条件满足,即报告输出格式为“EXCEL”或“CSV”且报告状态为“S”时,vugen 也不执行 if 块内的代码。即使从服务器响应中,我也看到根据 if 块成功推断出的值。 我还使用 lr_param_sprintf 语法代替 sprintf 但情况完全相同。 但是没用 无法得到缺失的点是什么...... 在这方面需要帮助..

【问题讨论】:

    标签: loadrunner vugen


    【解决方案1】:

    四个问题。

    1. 作为性能工程师,请在 for 循环之外将字符串转换为整数一次。我们应该像任何其他开发人员一样参与性能最佳实践

    2. 您使用 sprintf() 构建的字符串不包括 lr_eval_string("{paramname}"); 所需的大括号“{%s}”;

    3. 您的评估表达式中有 ro_buffer,但 sprintf() 表达式使用 RO_buffer(注意大写)。 C中的变量区分大小写

    4. 您的表达式无法用于比较两个字符串。看看 strcmp() - 字符串比较.....

    【讨论】:

    • 感谢 James,我错过了 strcmp()。就第 3 点而言,这是一个错字,vugen 会给出编译器错误。 Point#2 - 我没有使用花括号,但它有效:) 而且我没有得到你的第 1 点,你所说的“在 for 循环之外点击以将字符串转换为整数一次”是什么意思?
    • Sting 到 int 的成本很高。将其转换为循环外的整数数据类型一次,并将其存储在变量中,例如 int looplimit。然后,为您的循环评估 looplimit 而不是总是必须在循环开始时从 string 重铸为 int 进行评估。保留花括号,它会让你的生活更轻松。
    • 好的,知道了。谢谢你。
    【解决方案2】:

    你想要的代码看起来像这样:

    int i;
    int count=0;
    char ro_buffer[25],rs_buffer[25];
    lr_save_string("","R_buffer");
    
    for(i=0;i<=lr_eval_int("{ReportID_count}");i++)
    {
        if (((strcmp(lr_paramarr_idx("ReportOutput",i),"EXCEL")) == 0) & ((strcmp(lr_paramarr_idx("ReportOutput",i),"CSV")) == 0) & ((strcmp(lr_paramarr_idx("ReportStatus",i),"S")) == 0)) {
            count++;
            if(count>20) break;
            lr_param_sprintf("R_buffer","%s%s%2c",lr_eval_string("{R_buffer}"),lr_paramarr_idx(ReportID,i));
        }
    }
    

    我根本没有测试过这个。 您可能需要注意 ReportOutput、ReportStatus 和 ReportID 的索引,它们可能不会根据您的正则表达式对齐。您可能需要一个或两个新的“i”索引。

    【讨论】:

    • 谢谢 Mike,我刚刚使用了 sprintf,这样即使是低版本也能兼容脚本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2011-05-11
    • 2013-03-30
    相关资源
    最近更新 更多