我目前正在开发一个类似聊天的应用程序。有用户,聊天室,信息-所有这些东西。该应用程序由Node.js和Socket.IO提供动力。
不过,我感兴趣的一件事是对应用程序进行压力测试。目前存在的测试只是一些使用1客户机的特性测试。但是,我想做的事情像测试1000人同时登录应用程序,很多人进入聊天室,每个人都在那个房间发送消息,等等……
我该怎么做呢?谷歌搜索似乎显示了不相关的结果。
我注意到有些人认为这是一种复制。然而,这个问题涉及到ASP.NET,硒的使用是不可能的。此外,我最初打算得到在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的局限性有关?
发布于 2015-08-18 22:15:22
我和我的团队最终提出的解决方案如下:
我们在自己的文件(client.js)中定义了一个客户端对象,定义了各种操作和事件,以响应事件上的Socket.IO等等。在test.js文件中,我们将实例化客户机对象的许多实例,创建许多连接和客户端。
我们遇到的限制可能涉及运行测试的计算机的功能(不过,承载服务器的设备可以与1000个用户一起运行测试)。
发布于 2015-08-06 07:33:00
您可以使用Apache JMeter工具,在其中可以使用单个客户端模拟N个并发用户。
发布于 2017-09-15 09:53:12
例如,使用Apache ab。
只需创建一个API (仅用于测试目的),并使用该API的端点从apache发送大量消息。
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 data应该是一个长字符串,表示(base64)该POST请求的数据。
https://stackoverflow.com/questions/31848360
复制相似问题