Как протестировать реализацию TCP-сервера?

Я написал реализацию TCP-сервера, с помощью которой я создал приложение, которое работает как эхо-сервис TCP.

Теперь я хочу протестировать этот эхо-сервер с точки зрения

  • Сколько подключений он может обрабатывать
  • Какое время отклика
  • Сколько памяти и процессора он использует

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

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

Я написал эту реализацию с использованием C # и .NET 3.5, хотя я считаю, что это не имеет значения применительно к вопросу.


person Hemant    schedule 01.12.2009    source источник


Ответы (2)


У меня есть бесплатный инструмент, который может вам помочь. Я использую его для тестирования серверов, созданных с помощью моей серверной среды C++. Инструмент доступен здесь: http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html. Это позволяет вам создавать настраиваемое количество соединений с вашим целевым сервером с настраиваемой скоростью, а затем отправлять данные по каждому соединению (опять же с настраиваемой скоростью).

Если вы обнаружите, что лучший способ его использования — это запустить его на другой машине, отличной от сервера (довольно очевидно, я знаю, но...) и, возможно, запустить несколько копий на нескольких разных машинах. Обратите внимание: если вы обнаружите, что не можете установить более 4000 подключений, вполне вероятно, что вам нужно настроить параметр реестра MAX_USER_PORT на машине, на которой работает клиент.

После того, как вы протестировали свой TCP-код, вы можете обнаружить, что вам нужно протестировать протокол, который поддерживает ваш сервер. Я написал тестовый инструмент для такого рода ситуаций на C#, который доступен на CodeProject (http://www.codeproject.com/KB/IP/testingsocketservers.aspx). Это позволяет вам написать «плагин» для поддержки вашего протокола и обрабатывает независимые от протокола вещи (множество соединений, разбивка сообщений, чтобы вы могли получать фрагментированные чтения и т. д.). Дизайн представляет собой довольно неприятный дизайн потока на соединение, и для большего количества соединений вам лучше реализовать что-то заново, используя асинхронный дизайн, но у меня есть инструменты C++ для этого, поэтому я так и не удосужился изменить эту тестовую программу. .

person Len Holgate    schedule 01.12.2009
comment
Я постоянно использую его версию для тестирования своего серверного фреймворка (он работает на моей сборочной машине для тестирования всех моих примеров серверов фреймворка), и он является основой нескольких пользовательских инструментов тестирования, которые я разрабатывал для клиентов на протяжении многих лет. . Дайте мне знать, если у вас есть какие-либо проблемы с версией, на которую есть ссылка из сообщения в блоге, и я могу обновить ее до последней версии, и если у вас все еще есть проблемы, я их исправлю. Что касается инструмента С#, вы сами по себе;) - person Len Holgate; 01.12.2009
comment
Большое спасибо. Ваше приложение работает, как и ожидалось (а мой сервер нет :). Буду публиковать запросы и комментарии в вашем блоге! - person Hemant; 01.12.2009

В вашей же ситуации раньше я использовал FunkLoad. Если вы можете написать небольшой клиент в виде фрагмента кода Python, то FunkLoad запустит на сервере столько из них, сколько вы хотите, и отобразит результаты в виде графика:

https://funkload.nuxeo.org/

Полностью проработанный пример для серии тестовых серверов является центральным элементом второго издания моей книги «Основы сетевого программирования на Python» на тот случай, если его общедоступный репозиторий исходного кода поможет:

https://github.com/brandon-rhodes/fopnp/tree/m/py2/chapter07

person Brandon Rhodes    schedule 17.07.2014