Стресс-тестирование в NodeJS / Socket.io для 1000 пользователей?

в настоящее время я работаю на чат-приложение. Есть пользователи, чаты, сообщения-все это. Приложение питается от Node.js и сокет.ИО.

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

Как мне это сделать? Поисковые запросы Google, как представляется, вызывают несвязанные результаты.

Я заметил, что некоторые определили это как дубликат. Однако этот вопрос включает ASP.NET и об использовании Селена не может быть и речи. Кроме того, я изначально намеревался получить ответы, которые включают в себя выполнение специальные действия в узле.фреймворк на JS. Другой разработчик (больше не входящий в команду) написал несколько стресс-тестов это включает в себя определение пользовательского объекта пользователя и итеративную регистрацию этих пользователей, присоединение к комнате и т. д. Эти тесты являются неполными и больше не используются, хотя многое в кодовой базе изменилось с момента их написания. В любом случае ответ, который каким-то образом позволяет стресс-тестирование приложения другим способом, является приемлемым.

EDIT: вот моя попытка стресс-тестирования со многими пользователями.

function client() {
   // Define a testing client that responds to socket io events and the like
}

...
testers = [];
for (int i = 0; i <= 1000; i++) testers.push(new client());
// Each client connects to server with option 'force new connection: true'

it('Should login many users simultaneously') {
    // Use async.each on testers
    // Use client.login() on each client.
}

Я обнаружил, что это оказывается проблематично. Тест просто не заранее после входа в систему около 250 пользователей. В чем здесь проблема? Может быть, это связано с ограничениями node.js и сокет.Ио?

3 ответов


решение, которое моя команда и я в конечном итоге собирается следующим образом:

мы определили объект клиента в отдельном файле (клиент.js), с различными действиями и событиями, определенными в ответ на сокет.IO on события и тому подобное. В


вы можете использовать инструмент Apache JMeter, где вы можете имитировать N количество одновременных пользователей с помощью одного клиента.


пойдите, например, с Apache ab.

просто создайте API (только для целей тестирования) и используйте и конечную точку этого API, чтобы отправить много сообщений от apache ab.

ab -n 1000 -c 10 -T 'multipart/form-data; boundary=1234567890' -p post.txt  http://yourdomain.com/yourproject/api/sendmessage/

и пост.txt будет содержать что-то вроде:

--1234567890
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
from=myId&to=yourId&message=alrighty

<base64 data>
--1234567890

здесь данные base64 должна быть длинная строка, представляющая (base64) данные этого запроса POST.