Стресс-тестирование в 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.