Я обычно создаю клиентскую программу, имитирующую один сеанс с сервером, нахожу столько Linux-боксов поблизости и запускаю тысячу из них на каждой машине из командной строки, например:
for i in {0..1000} ; ./myprogram serverip & done
В некоторых случаяхпротокол основан на тексте, а взаимодействие или тестирование просты, поэтому мне не нужно писать myprogram
, а просто использовать netcat , как при выполнении nc serverip < input >/dev/null
Если всенужно протестировать потоковые данные на вашем клиенте, я бы начал с netcat и продолжил свой путь оттуда.
Этот подход подходит для моих нужд, обычно мне не нужно тестировать больше параллелизма, чем несколькотысяч клиентов.Если вам нужна большая масштабируемость, вам, вероятно, придется написать клиентский симулятор с использованием io multiplexing (epoll), чтобы каждый экземпляр имитировал как можно больше взаимодействий - и вам придется проводить более контролируемые тесты, чтобы найти пределыВаш клиент.
Не смешивайте тестирование производительности с функциональным тестированием.Хотя в тестовой среде вы можете получить потрясающую производительность, в реальной среде она может сильно отличаться.Например, клиенты будут плохо себя вести, они будут отключаться в самое неподходящее время.Они могут отправить вам вредоносные данные.Они могут быть медленными, приводя к созданию внутренних очередей на сервере или оставляя вас с тысячами, казалось бы, бездействующих соединений (killall -STOP nc
, в то время как в процессе отправки данных на тестовые клиенты могут показаться вам интересные вещи)