Универсальная среда тестирования производительности для .NET - PullRequest
9 голосов
/ 28 сентября 2011

У меня есть клиент-серверное приложение, написанное на C # /. NET 3.5, на котором я хочу провести небольшое тестирование производительности. Я искал общие рамки, чтобы помочь мне, но мне не повезло. Я хотел бы что-то, что может управлять набором клиентов и выполнять произвольные действия для них на основе некоторых настроек. Затем я также хотел бы записать некоторые данные, относящиеся к этому, чтобы помочь мне работать с грубыми грубыми порогами для моей системы, например, Я могу поддерживать n пользователей, выполняющих x действий в секунду.

Я бы написал код, специфичный для моего приложения, для выполнения таких задач, как:

  • Вход / выход из клиента.
  • Отправка сообщений на сервер для выполнения различных действий.
  • Запись подтверждений и других сообщений с сервера.
  • Измерение статистики, специфичной для системы.

Я надеюсь, что фреймворк сможет принимать набор параметров для описания сценария тестирования, таких как:

  • Количество клиентов, вошедших в данный момент.
  • Выполнять определенное количество действий в секунду для каждого клиента.

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

Я не хочу выполнять профилирование моего кода; Я всегда могу прикрепить профилировщик при выполнении этих тестов позже. Вместо этого я хочу сделать некоторые грубые выводы о моей системе, то есть, сколько пользователей я могу бросить на нее, прежде чем она сломается. (Если для этого есть более подходящий термин, чем «тестирование производительности», пожалуйста, дайте мне знать ... Возможно, стресс-тестирование?)

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

Кто-нибудь знает что-нибудь, что может помочь? Мой поиск еще ничего не нашел. Я должен отметить, что я застрял с Visual Studio 2008 Professional в обозримом будущем, поэтому, если 2010 год сможет это сделать, это для меня не будет границ. Я предполагаю, что это не обязательно должен быть .NET-фреймворк, при условии, что я все еще могу легко подключить свой .NET-код.

РЕДАКТИРОВАТЬ Чтобы было ясно, что мое приложение не является веб-сайтом, это клиентское приложение Windows Forms, которое подключается через специальный протокол к службе .NET. Я могу написать код для выполнения соответствующих действий клиента, мне просто нужна среда для его установки.

Ответы [ 7 ]

6 голосов
/ 06 октября 2011

Ключевое слово, которое вы ищете, это "Распределенное тестирование".

Smart Bear имеет продукт под названием TestComplete , который поддерживает распределенное тестирование . Я не думаю, что он может запустить несколько экземпляров вашего клиента на одной машине (хотя, может быть, и может, но я думаю, что это не очень хорошая идея, так как это повлияет на результаты производительности).

У них также есть проект с открытым исходным кодом, называемый LoadUI , он построен для интеграции с SoapUI, однако вы можете подключить его к своему собственному инструменту для тестирования клиентов. Я понятия не имею, сколько усилий это будет стоить.

Это инструменты, которые я знаю, но есть еще много инструментов для распределенного тестирования. Хотя большинство из них действительно предназначено для тестирования веб-баз, они часто достаточно расширяемы, чтобы просто запустить другую (основанную на графическом интерфейсе) среду тестирования (мой любимый QAliber ), которая запускает тесты в вашем клиентском приложении.

4 голосов
/ 05 октября 2011

Насколько мне известно, такой структуры в настоящее время не существует (и, вероятно, она не будет существовать, потому что сценарии anyones настолько разные).Поскольку «Производительность» означает разные вещи для разных людей и разных проектов, вам, как правило, придется делать свои собственные.К счастью, с появлением .NET4 и TPL это стало проще, чем когда-либо прежде.

Существует три аспекта, которые должен охватывать тест производительности:

  1. Определение «Load»
  2. Измерение «производительности»
  3. Оценка результатов

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

Итак, ваш первый шаг - определить «единицу измерения».загрузить ", что вы можете легко увеличить.Например, вы можете создать класс ClientUnitLoad, который имитирует клиента и периодически выполняет действия против вашего сервиса. TPL позволяет легко масштабировать ClientUnitLoad (за исключением, конечно, ограничений, связанных с аппаратным обеспечением).

Следующим шагом является измерение производительности.То, насколько сильно вы измеряете, зависит от метрики, которую вы хотите собрать: простой секундомер хорош в 90% случаев, но может измерять только время.Создание пользовательской инфраструктуры трассировки и сбора метрик, безусловно, того стоит, так как она вам также понадобится в производстве, чтобы проверить, работает ли ваша система в реальных условиях, как ожидается.

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

В зависимости от желаемого уровня сложности этот базовый уровень производительности может иметь простые критерии приемлемости (такие как: время ответа менее 100 мс) или расширенные, специфические критерии (например: время отклика не уменьшается более чем на 10%, когда количество зарегистрированных пользователей равно 10 против 1).

1 голос
/ 05 октября 2011

http://blog.maartenballiauw.be/post/2008/02/code-performance-analysis-in-visual-studio-2008.aspx

Доступно в Visual Studio 2008 для разработчиков и командных разработчиков. Я думаю, что в Visual Studio 2010 эта функция была улучшена.

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

1 голос
/ 04 октября 2011

Не можете действительно сказать, существует ли среда тестирования для такой конкретной цели, но, возможно, вы могли бы использовать простое консольное приложение (поскольку основная идея заключается в тестировании производительности сервера)?Вы можете сделать несколько звонков на сервер в разных потоках и использовать, например, класс Секундомер для измерения времени ответа.

Или вы можете попытаться перегрузить службу, просто увеличив количество вызовов (вероятно, служба замедлится до того, как в пуле потоков закончатся потоки?).

1 голос
/ 03 октября 2011

Я сам не пробовал, но это может подойти для ваших нужд.

https://browsermob.com/performance-testing

1 голос
/ 03 октября 2011

Пожалуйста, проверьте по следующей ссылке. Это может помочь вам.http://msdn.microsoft.com/en-us/library/aa337591.aspx

Полагаю, вы получите эту функцию даже в VS2008, но для окончательной редакции.

0 голосов
/ 20 февраля 2013

Некоторое время назад я провел несколько тестов производительности в клиент-серверном приложении, используя нагрузочный тест Microsoft Visual Studio

Когда вы добавляете модульные тесты внагрузочный тест, вы проверяете производительность серверных компонентов вне Интернета

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...