ЛР: Могу ли я сделать псевдослучайную выборку в LoadRunner детерминированной?

В сценариях LoadRunner есть несколько источников случайных чисел:

  • rand() функция
  • Случайные дельты времени обдумывания (параметры времени выполнения)
  • Компоненты случайного времени стимуляции (настройки времени выполнения)
  • Случайные параметры (в рамках теста VUGen)

Я использую эти функции, и я мог бы жить с их псевдослучайностью. Однако я не могу смириться с тем фактом, что все запуски сценариев, содержащие хотя бы одну из этих функций, ведут себя псевдослучайно И недетерминировано, т. е. для заданного начального состояния (случайное начальное число) я хочу, чтобы два запуска генерировали ТОЧНО одинаковую нагрузку, включая время ( темп и время на обдумывание). Поэтому я хочу, чтобы два прогона были основаны ТОЧНО на одних и тех же случайных последовательностях. Это означает, что я хочу сам заполнить все генераторы случайных чисел как часть инициализации каждого запуска.

Я могу использовать srand(), чтобы установить начальное значение для rand(). Установка определенного (жестко запрограммированного) начального значения при инициализации всегда приводит к одной и той же последовательности, предоставляемой rand() -- для всех виртуальных пользователей. Если бы я запустил номер VUser ID, я бы даже получил разные последовательности rand() для каждого vuser, в то время как они по-прежнему одинаковы от запуска к запуску для каждого пользователя.

А как насчет других псевдослучайных источников в LR, помимо rand ()? Есть ли у меня возможность заполнить их все, чтобы получить детерминированное поведение сценария?

Я думаю, это очень помогло бы.

Без такого механизма приходится планировать очень длинные и/или очень загруженные тестовые сценарии, чтобы «усреднить» случайность в статистике результатов (вы согласны с этим?), что я и делаю весь день.


person TheBlastOne    schedule 06.07.2010    source источник


Ответы (3)


Уже покрыто. Я работаю с LoadRunner с 4.51 и не могу припомнить версию без возможности установить случайное начальное число. Обычно это находится в настройках времени выполнения сценария, установленных в контроллере. Вы сможете найти документацию по этому вопросу для вашей версии LoadRunner, открыв Acrobat-версию руководства пользователя контроллера и выполнив поиск по термину «seed».

person James Pulley    schedule 06.12.2010
comment
Ух ты, круто. Потому что это правда. Как я мог не заметить это. Там, где он должен быть, но я не знал об этом. В следующий раз я проверю, что это действительно работает, но я думаю, что это был именно тот указатель, который я искал. Спасибо. - person TheBlastOne; 07.12.2010

Заполнение генератора случайных чисел обязательно для такой системы, как load runner. Прекрасный пример — у меня есть изменение кода, которое я хочу протестировать. Я запускаю генератор случайных чисел, а затем запускаю его с измененным кодом и без него. Последовательность выполняемых функций будет случайной, но оба теста будут использовать одну и ту же последовательность. Это позволяет мне увидеть точное влияние моего изменения кода. Без возможности видеть генератор случайных чисел мне пришлось бы запускать очень длинные тесты под очень высокой нагрузкой, чтобы попытаться усреднить случайность.

Без семени 2-й тест выбрал бы совершенно другой путь. И на другой итерации, еще один совершенно другой путь. Я хочу СЛУЧАЙНЫЕ последовательности, но ПОВТОРЯЕМЫЕ СЛУЧАЙНЫЕ последовательности. Вот почему все современные языки позволяют вам запускать генератор случайных чисел. Клиенту Load Runner просто нужно добавить одно текстовое поле, которое позволяет вам ввести «начальное значение» для их генератора случайных чисел.

person John    schedule 05.11.2010
comment
Я абсолютно согласен. Итак, как вы заполняете генераторы случайных чисел, которые VUgen загружает скрипты VUGen? Особенно случайные параметры? Вопрос не если, а как. - person TheBlastOne; 09.11.2010
comment
Теперь мне трудно принять ответ К.Сэнделла «НЕТ» или «ДА». ИМПЕРАТИВНЫЙ ответ от Джона. Оба правы: НЕТ, потому что это невозможно сделать, и ДА, потому что потребуется получить стабильные, сопоставимые результаты без создания нагрузки в течение длительного времени (таким образом, случайные средние значения получаются). - person TheBlastOne; 12.11.2010
comment
Я должен добавить, что даже если вы достигнете точной последовательности RND, есть другие вещи, которые отличаются от Controller/LoadGen, что в любом случае делает запуск другим. lr_think_time() использует (если установлено) случайное значение от X% до Y%, и это случайное время — это то, что вы не можете контролировать, и, насколько мне известно, заполнение невозможно. - person K.Sandell; 23.11.2010

Краткий ответ на ваш вопрос: НЕТ.

Random implies just what it says => "Random". 

Если вы используете «встроенные» случайные функции параметров, вы в значительной степени облажались, поскольку у вас нет контроля над тем, как инициализируются внутренние случайные семена, и это никак не может предсказать следующее значение.

Если вы в конечном итоге хотите экстраполировать результаты и предсказать поведение сервера под нагрузкой, вам предстоит очень тернистый путь.

Экстраполяция результатов

Your run with 100 vusers and achieve an avg. of 50-60 hits/sec with
response times under 3 sec.

Logically 1000 vusers (10x load) would give you 500-600 hits/sec ... 

But what about the response times? How do you extrapolate them? How do you know
when the web-server(s) chokes and achieves it's knee-point? 

Помните, что хиты/сек прямо пропорциональны времени отклика... поэтому прогнозирование хитов/сек (или страниц/сек) становится очень трудным и неточным.

Вещи, которые вы не можете контролировать

Даже если вы получите «точную» копию другого запуска, вам все равно придется иметь дело со временем отклика и сетевыми задержками, которые на самом деле всегда разные, независимо от обстоятельств (и также полностью вне вашего контроля).

Более "реалистичный" способ определения нагрузки

Нагрузочное тестирование само по себе не является точной наукой, и ни одно нагрузочное тестирование не может полностью имитировать реальный мир, но мы можем приблизиться к нему. Здесь мы делаем это так, что пытаемся смоделировать отдельных пользователей как можно ближе. Таким образом, мы можем установить ожидаемую нагрузку в соответствии с типами пользователей, о чем обычно имеют представление «деловые» люди.

Мы также делим «пользователей» на типы, такие как опытный, обычный или начинающий пользователь — разница между ними заключается в скорости, с которой они работают (и в том, как они используют пользовательский интерфейс).

Сделав это, мы можем «загрузить» целевое приложение с определенной «ожидаемой пользовательской нагрузкой» вместо значений страниц/сек, хитов/сек или других технических показателей.

Мы также выполняем более длительные прогоны, чтобы увидеть, как служба ведет себя с течением времени, поэтому 72-часовой или более тест не является чем-то необычным для этапа тестирования на выносливость. Это также показывает, есть ли какие-либо утечки памяти на серверах с течением времени и как фоновые процессы влияют на производительность сервера в «ночное время».

person K.Sandell    schedule 07.07.2010
comment
Я вижу и согласен с тем, что 72-часовой или более тест не является чем-то необычным для заявления о фазе испытаний на выносливость, откуда я исходю. Однако я категорически не согласен с тем, что Random подразумевает именно то, что он говорит => «Random». поскольку мы говорим о генераторах псевдослучайных чисел, которые являются на 100% детерминированными и, следовательно, воспроизводимыми, если у вас есть контроль над начальными значениями, и все еще псевдослучайными, если вы этого не делаете. Так что, если у меня действительно есть доступ ко всем начальным значениям, я не вижу смысла, почему я не должен сделать определенный нагрузочный тест более воспроизводимым, генерируя точно такую ​​же нагрузку — в зависимости от цели теста. - person TheBlastOne; 07.07.2010
comment
Ситуация такова, что случайно выбранные тестовые наборы приводят к очень и очень разным наборам данных (с точки зрения сложности), которые необходимо обработать, и у меня нет дешевого или надежного способа категоризировать набор данных тестового примера, чтобы выбрать только сложные или только дешевые тестовые случаи. Таким образом, выбор чего-либо случайным образом (и отсутствие управления всеми начальными значениями) заставляет меня выполнять очень, очень длинные нагрузочные тесты, поэтому огромные различия между тестовыми примерами усредняются, и запуск возвращает полезные результаты. - person TheBlastOne; 07.07.2010
comment
Таким образом, мы можем установить ожидаемую нагрузку в соответствии с типами пользователей, о чем обычно имеют представление деловые люди. -- да, обычно ;) - person TheBlastOne; 07.07.2010
comment
Теперь мне трудно принять ответ К.Сэнделла «НЕТ» или «ДА». ИМПЕРАТИВНЫЙ ответ от Джона. Оба правы: НЕТ, потому что это невозможно сделать, и ДА, потому что потребуется получить стабильные, сопоставимые результаты без создания нагрузки в течение длительного времени (таким образом, случайные средние значения получаются). - person TheBlastOne; 12.11.2010