LoadRunner объединяет коррелированные значения

Я зафиксировал корреляционную переменную loadrunner «Дата», как показано ниже, используя ORD=ALL:

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

Как этого добиться?


person Nick1212    schedule 14.10.2014    source источник


Ответы (3)


Переменная C + цикл для ограничения вашего массива + sprintf()

person James Pulley    schedule 14.10.2014

Существует ряд функций для управления параметрами LR, и вам понадобятся следующие: 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

person K.Sandell    schedule 05.08.2015

В коде, опубликованном К. Санделлом, я не вижу конкатенации значений массива параметров; Я вижу, что значение 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);


Пример вывода (строка значений в строке, разделенная разделителем):

ResultParam = BU21, BU25, BU28, BU44, BU100

Между прочим, обычным и лучшим способом передачи значений параметров будет передача самого массива параметров следующему сценарию или действию, где вы хотите его использовать (не преобразовывать его в строки). Но в моем случае я хотел запустить приведенный выше код на контроллере LoadRunner в многопоточном режиме и собрать вывод для использования в отчете. Затем я использовал Windows findstr /s /C:"ResultParam" *.log для поиска по выходным данным контроллера, чтобы найти эти значения. Этот подход требовал, чтобы все данные располагались в одной строке файла журнала контроллера.

person Charlesdwm    schedule 24.05.2017