LoadRunner连接相关值

时间:2014-10-14 18:05:14

标签: correlation loadrunner

我使用ORD = ALL:

捕获了如下所示的loadrunner相关变量“Date”
vuser_init.c(165): Notify: Saving Parameter "Date_1 = 101".
vuser_init.c(165): Notify: Saving Parameter "Date_2 = 102".
vuser_init.c(165): Notify: Saving Parameter "Date_3 = 103".
vuser_init.c(165): Notify: Saving Parameter "Date_4 = 104".
...

现在我想在后续请求中用逗号分隔格式替换这些值,如下所示:

101, 102, 103, 104...

如何实现这一目标?

4 个答案:

答案 0 :(得分:0)

C变量+循环限制你的数组+ sprintf()

答案 1 :(得分:0)

有许多操作LR Params的功能,以及你需要的功能     char * lr_paramarr_idx(const char * paramArrayName,unsigned int index);     int lr_paramarr_len(const char * paramArrayName);

我很快就制作了一个可用于此的功能:

/**
* ArrayToString( char *ResultParam, char *ArrayParam, char *Delimiter)
*
* @param ResultParam    The resulting LoadRunner variable to contain result
* @param ArrayParam     The Array param where the elements are
* @param Delimiter      Delimiter to use between elements in list
*
*/
int ArrayToString( char *ResultParam, char *ArrayParam, char *Delimiter)
{
  int idx,count;
  char buf[1024];

  // Create a tmp buffer with "{ResultParam}"
  sprintf(buf,"{%s}",ResultParam);

  // Get the Count of params
  count = lr_paramarr_len("Date");

  // Clear the variable
  lr_save_string("",ResultParam); 

  // Add 1st variable
    lr_param_sprintf(ResultParam, "%s",lr_paramarr_idx(ArrayParam, 1));

    // Loop all variables, adding them to "ConcattedDates", starting at idx=2
    for (idx=2; idx<=count; idx++) {
      lr_param_sprintf (ResultParam, "%s%s%s", 
         lr_eval_string(buf), 
         Delimiter,
         lr_paramarr_idx(ArrayParam, idx)
       );
    }

    // Return the length of the Concatenated buffer. 0=Nothing in buffer
    return strlen(lr_eval_string(buf));
}

使用示例

// Take "Date" array param, output to "DateConcat" param
ArrayToString("DateConcat", "Date", ",");

// Debug output
lr_error_message( "DateConcat='%s'", lr_eval_string("{DateConcat}") );

在您的情况下,生成的DateConcat字符串将为101,102,103,104

答案 2 :(得分:0)

在K.Sandell发布的代码中,我没有看到参数数组值的连接;我看到ResultParam的值被替换而不是连接。我的目标是在一行中输出数组的所有值(我收集它以在另一个脚本中使用)。以下代码,使用strcat,为我完成了工作:

// Loop all variables, adding them to "stringOfValues"
for (idx=1; idx<=TotalNumberOfMatches; idx++) 
{      
  strcat(stringOfValues,  lr_paramarr_idx("arrParameter", idx));
  strcat(stringOfValues, Delimiter);

  lr_output_message("ResultParam =%s", stringOfValues);         

}

//最终输出将打印连接值

lr_output_message(“ResultParam =%s”,stringOfValues);

Sample Output(由分隔符分隔的行中的一串值):

ResultParam = BU21,BU25,BU28,BU44,BU100

顺便提一下,传递参数值的正常,更好的方法是将参数数组本身传递给您想要使用它的下一个脚本或操作(不将其转换为字符串)。但在我的情况下,我想以多线程的方式在LoadRunner控制器上运行上面的代码,并收集输出以用于报告。然后我使用Windows findstr / s / C:“ResultParam”* .log来搜索控制器的输出以找到这些值。此方法要求所有数据都在控制器日志文件中的单行上。

答案 3 :(得分:0)

// Storing the number of matches in count integer variable as Date_count will store all the matches
count = atoi(lr_eval_string("{Date_count}"));

// Storing all the values in commaSep variable
for (i=1; i<=count; i++)
{
    if(i == count)
    {
        sprintf(value,"{Date_%d}",i);
        strcat(commaSep,value);
    }
    else
    {
        sprintf(value,"{Date_%d}",i);
        strcat(commaSep,value);
        strcat(commaSep,",");
    }
} 

// Printing the result in Output console, after this you can use this variable wherever you want in your script
lr_output_message("Comma Separated value is = %s,lr_eval_string(commaSep));