Как я могу запустить нового пользователя, когда захочу, в нагрузочном тесте Visual Studio

Как я могу закрыть одного виртуального пользователя и запустить другого нового пользователя во время моего выбора в нагрузочном тесте Visual Studio (2012 Ultimate).

Для моей системы мне нужно выполнить некоторые действия в цикле. Слишком много итераций и слишком большой промежуток времени, чтобы запустить все это в одном веб-тесте производительности. Следовательно, у меня должен быть тест входа в систему и ряд других тестов для одного и того же виртуального пользователя. После некоторого неизвестного количества этих других тестов система отправляет в ответ сообщение «Вы закончили». Затем мне нужно выйти из системы и завершить работу этого виртуального пользователя и запустить другого виртуального пользователя.

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

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

После завершения тестов я хотел бы, чтобы каждая горизонтальная линия в диаграмме Detail в результатах нагрузочного теста показывала один вход в систему, переменное количество действий и, наконец, один выход из системы. Таким образом, каждый вход в систему должен запускать нового виртуального пользователя.

Веб-поиск плагинов для нагрузочных тестов быстро находит способы изменить количество виртуальных пользователей в большую или меньшую сторону. Но нет результатов для управления текущим виртуальным пользователем.


person AdrianHHH    schedule 12.08.2014    source источник


Ответы (2)


Насколько я знаю, нет возможности управлять виртуальными пользователями вне настроек нагрузочного теста.

Однако ничто не мешает работающему виртуальному пользователю выполнить выход из системы на основе ответа, а затем войти в систему с новым набором учетных данных.

Для нагрузочного теста это один пользователь, работающий непрерывно, но для тестируемой системы это завершение работы пользователем и запуск нового пользователя.

person John O.    schedule 10.10.2014

Время от времени я сталкивался с подобным препятствием и еще не нашел решения, которое мне действительно нравится как «конечное» решение. Однако есть несколько способов приблизиться к тому, чего вы хотите.

Я все еще использую Visual Studio 2010, но предполагаю, что вы сможете сделать это и в более поздних версиях. Я также говорю с точки зрения использования декларативных веб-тестов, а не закодированных. Я уверен, что то же самое можно сделать и в закодированном веб-тесте, но я не работаю с ними напрямую на регулярной основе.

Большая часть того, что вы хотите сделать с помощью существующих плагинов. Сложная часть может (и, вероятно, будет) в том, как вы обрабатываете данные сеанса после выхода пользователя из системы. Шаги высокого уровня, если я правильно понял ваш вопрос, будут заключаться в следующем:

  1. Запустите тест инициализации для виртуального пользователя (ваша часть теста для входа в систему).
  2. Выполните серию тестов на основе одного из профилей нагрузки.
  3. Выход пользователя на основе определенного ответа.
  4. Зарегистрируйте «нового» пользователя после шага 3.

Я уверен, что вы уже выполнили шаги 1 и 2. Поэтому я сосредоточусь на идеях для шагов 3 и 4.

Шаг 3.

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

  1. Правило извлечения для извлечения информации из ответа.
  2. Условный шаг, который выполняется на основе информации, извлеченной вашим правилом извлечения.

Внутри условного оператора вы можете выполнить выход из системы. Учитывая характер того, как вы хотите это сделать, я бы сделал выход из системы отдельным тестом, на который вы ссылаетесь... но вы также можете вставить запрос (ы) выхода в условный раздел теста.

Шаг 4.

Проще всего было бы снова вызвать тест входа в систему сразу после выхода из вашего условного цикла. В зависимости от того, какую информацию о сеансе вам нужно сохранять в тестах... это часть, которая может стать сложной. Повторный вход из веб-теста может привести к тому, что некоторые данные, которые сохранялись в ходе теста инициализации, станут недействительными. Таким образом, вам нужно будет справиться с этим, обновив существующие параметры контекста. Если у вас нет каких-либо параметров контекста, которые переносятся через тесты из вашего теста инициализации... тогда вы настроены.

Кроме того, если вы не хотите, чтобы «новый» пользователь входил в систему сразу после того, как существующий завершил работу... тогда потребуется некоторый дополнительный творческий подход.

Если вам не нужно изменять максимальное количество виртуальных пользователей, вам никогда не понадобится входить в систему нового виртуального пользователя. Скорее, вы можете просто снова выполнить тест входа в систему с этим существующим виртуальным пользователем. Если вам нужно изменить общее количество доступных виртуальных пользователей, вам потребуется проявить творческий подход с помощью плагинов для нагрузочного тестирования. Есть способы сделать это, и несколько хороших примеров можно найти в одной из записей блога Шона Ламли: http://blogs.msdn.com/b/slumley/archive/2009/04/10/load.-test-plug-ins.aspx

Я надеюсь, что эта информация поможет.

person Daileyo    schedule 21.10.2014
comment
Спасибо, я уточнил вопрос. Проблема не в количестве пользователей, а в том, чтобы определить, когда зациклиться или когда выйти из системы. Я хочу контролировать, когда виртуальные пользователи (как указано в таблице Detail) заканчивают работу. - person AdrianHHH; 22.10.2014
comment
Мне никогда не приходилось делать это самому, но это все еще может быть выполнимо. Две возможности: создать свой собственный профиль нагрузки или попытаться создать подключаемый модуль нагрузочного теста, который отключает значения UserContext.UserId или UserContext.IsNewUser. Я считаю, что эти два значения дадут вам средства управления поведением при выполнении теста, специфичным для виртуального пользователя. Мне все еще любопытно, почему важно, чтобы фактический виртуальный пользователь изменился? Мне кажется, что пока виртуальный пользователь начинает новый сеанс с веб-сайтом, он все равно будет выполнять то, что вы хотите. - person Daileyo; 22.10.2014
comment
Некоторые дополнительные детали для моего вопроса: пока виртуальный пользователь начинает новый сеанс с новым тестовым пользователем, не будет ли это выполнять то, что вы пытаетесь сделать? Из вашего описания требований к тесту я вижу, что каждый набор тестов необходимо запускать от имени другого вошедшего в систему пользователя, но похоже, что один виртуальный пользователь может пройти несколько тестов. пользователей в рамках одного тестового запуска. - person Daileyo; 22.10.2014