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

person K.Sandell    schedule 05.08.2015

В кода, публикуван от 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);


Примерен изход (низ от стойности в ред, разделени с разделител):

ResultParam = BU21, BU25, BU28, BU44, BU100

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

person Charlesdwm    schedule 24.05.2017