LoadRunner脚本

时间:2015-06-11 14:01:26

标签: loadrunner vugen

我编写了一个基于web protcol的应用程序流程,我必须选择下载20个报告。 ReportID显示在请求中。我正在自定义请求,以便请求获取20个报告(ReportID),这些报告是EXCEL或CSV(ReportOutput),状态为成功(ReportStatus)。我用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,但情况完全相同。 但没用 无法得到遗漏点...... 需要帮助..

2 个答案:

答案 0 :(得分:0)

四个问题。

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

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

  3. 你的evalaution表达式中有ro_buffer,但sprintf()表达式使用RO_buffer(注意大写)。变量在C

  4. 中区分大小写
  5. 您的表达式无法比较两个字符串。看一下strcmp() - String Compare .....

答案 1 :(得分:0)

您希望代码看起来像这样:

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的索引,这些索引可能根据您的正则表达式而不对齐。你可能需要一个新的&#39; i&#39;指数或两个。