在NodeJS / Socket.io中对1000个用户进行压力测试?

时间:2015-08-06 06:32:53

标签: node.js socket.io stress-testing

我目前正在开发类似聊天的应用程序。有用户,聊天室,消息 - 所有这些东西。该应用程序由Node.js和Socket.IO提供支持。

但是,我有兴趣做的一件事是对应用程序进行压力测试。目前存在的测试只是一些使用1个客户端的功能测试。但是,我想做的事情就是测试1000个人同时登录应用程序,很多人进入聊天室,每个人都在那个房间里发送消息等等......

我该怎么做呢? Google搜索似乎会带来无关的结果。

我注意到有些人认为这是重复的。但是,这个问题涉及ASP.NET,并且使用Selenium是不可能的。另外,我原本打算获得涉及在node.js框架中执行特殊操作的答案。另一个开发人员(不再是团队的一员)写了一些压力测试,涉及定义一个自定义用户对象并迭代注册这些用户,加入一个房间等。这些测试是不完整的,不再可用,因为代码库中的很多内容已经改变因为他们写的。无论如何,以某种方式允许以另一种方式对应用程序进行压力测试的答案是可以接受的。

编辑:这是我与许多用户进行压力测试的尝试。

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和socket.io的限制有关吗?

3 个答案:

答案 0 :(得分:4)

我和我的团队最终采用的解决方案如下:

我们在自己的文件( client.js )中定义了一个Client对象,其中定义了各种操作和事件以响应事件等上的Socket.IO 。在 test.js 文件中,我们将实例化Client对象的许多实例,创建许多连接和客户端。

我们遇到的限制可能涉及运行测试的计算机的功能(托管服务器的设备可以运行1000个用户的测试)。

答案 1 :(得分:2)

您可以使用Apache JMeter工具,您可以使用单个客户端模拟N个并发用户。

答案 2 :(得分:0)

例如,使用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/

post.txt 会包含以下内容:

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

<base64 data>
--1234567890

其中 base64数据应该是一个长字符串,表示(base64)该POST请求的数据。