locust websocket 压测

本文详细介绍使用Locust框架进行WebSocket服务性能测试的过程,包括如何创建WebSocket客户端、编写任务集以及分布式测试配置。通过具体代码示例,展示了如何发送请求、处理响应以及报告测试结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、首先建立一个websocket服务端

class LocustWebSocketClient(Locust):
    def __init__(self, ws_url='per.zldda.cn', callback=None):
        super().__init__()
        self.ws = websocket.create_connection("wss://%s/wsapi" % ws_url, timeout=10)
        self.ws_url = ws_url
        self.callback = callback

    def web_socket_request(self, dictmsg):
        resp = None
        total_time = None
        try:
            start_time = time.time()
            print('send:', dictmsg)
            self.ws.send(simplejson.dumps(dictmsg))
            result = self.ws.recv()
            resp = simplejson.loads(result)
            print("recv:", resp)
            total_time = int((time.time() - start_time) * 1000)
            if resp['code'] == (1001 or 1000 or 1002):
                pass
            else:
                print('error send:', dictmsg, 11111)
                events.request_failure.fire(
                    request_type='wss',
                    name='web_socket_request',
                    response_time=total_time,
                    exception=resp
                )
            events.request_success.fire(
                request_type='wss',
                name='web_socket_request',
                response_time=total_time,
                response_length=len(resp)
            )
            if self.callback is None:
                return resp
            else:
                return self.ws
        except Exception as e:
            print(e)
            events.request_failure.fire(
                request_type='wss',
                name='web_socket_request',
                response_time=total_time,
                exception=resp
            )

然后就开始写呗

class UserBehavior(TaskSet):
    def on_start(self):
        self.user_id_list = []
        self.all_sid = get_sid()
        self.url = 'perfor.zldhz.com'
        all_worker_info = worker_contract_list(get_ws_driver(ws_url='perfor.zldhz.com'), self.all_sid[0][0], flag=1,
                                               limit='15', page=1, project_id=self.all_sid[0][1], request_status='完成',
                                               status=0, with_charkt_value=True)
        for worker_info in all_worker_info['data']['worker_contract']:
            self.user_id_list.append(worker_info['id'])
        print(self.user_id_list)
        

    @task
    def test_project1(self):
        ws = LocustWebSocketClient(self.url)
        project_list(ws_driver=ws, sid=self.all_sid[0][0])
        ws.ws.close()
class WebUserLocust(LocustWebSocketClient):
    weight = 1
    task_set = UserBehavior
    min_wait = 3000
    max_wait = 7000

然后 locust -f xxx.py --no-web -c1 -r1 -t100

分布

主:

locust -f locust_test.py --master

locust -f locust_test.py --slave --master-host=192.168.22.62

<think>嗯,用户现在需要寻找用于WebSocket的工具。我之前已经回答过类似的问题,但需要再仔细看看他们提供的引用内容,确保推荐的工具准确且符合他们的需求。首先,用户提到之前有推荐Vue-WebSocket,不过那可能更多是开发工具,而不是用的。引用2到5中提到了JMeter、Locust、k6、Java-WebSocket库以及Swoole相关的方法,这些信息需要整合起来。用户可能希望知道有哪些工具适合WebSocket试,并且需要具体的推荐和对比。根据引用2,JMeter支持WebSocket协议,这应该是一个不错的选择。Locust和k6也在列表中,特别是k6适合持续集成,可能用户有自动化试的需求。引用3提到Swoole的需要使用协程模块,但用户的问题是关于WebSocket的通用工具,所以可能需要推荐更通用的工具。另外,引用4提到了Java-WebSocket库,可能适用于开发自定义工具,而引用5详细说明了JMeter的使用,包括WebSocket实例。用户可能需要具体的操作步骤或示例,比如如何配置JMeter进行WebSocket试。同时,用户可能关心工具的开源与商业选项,以及它们的优缺点,比如易用性、性能、扩展性等。 需要确保推荐的每个工具都有明确的适用场景和特点,比如JMeter适合图形化操作,Locust适合Python脚本编写,k6适合云原生环境。还要考虑用户的技术背景,如果他们熟悉PythonLocust可能更合适;如果喜欢图形界面,JMeter更好。此外,商业工具如LoadRunner或阿里云PTS是否需要提及,但用户可能更倾向于开源解决方案。 可能还需要提到一些实际案例或步骤,比如如何用JMeter配置WebSocket请求,或者用Locust编写试脚本。这样用户可以根据指导快速上手。同时,注意引用中的信息是否正确,比如引用3提到ab不能WebSocket,所以需要避免推荐不合适的工具。最后,生成的相关问题需要围绕工具选择、配置方法、性能优化等,帮助用户深入理解。例如,如何评估不同工具的性能差异,或者如何编写高效的试脚本。确保回答结构清晰,分点列出工具,每个工具都有特点、适用场景和示例,便于用户比较和选择。</think>针对WebSocket的工具推荐及使用指南如下: --- ### 一、主流WebSocket工具推荐 #### 1. **JMeter(开源)** - **特点**: - 支持WebSocket插件(需安装`WebSocket Samplers`插件)[^5] - 图形化界面,支持多协议混合试(HTTP+WebSocket) - 可生成详细报告(吞吐量、响应时间、错误率等) - **适用场景**: - 需要模拟复杂业务流(如WebSocket握手+消息交互) - 团队协作或非编程用户 - **示例配置**: ```bash # 安装WebSocket插件 jmeter-plugins-manager --install websocket-samplers ``` #### 2. **Locust(开源,Python编写)** - **特点**: - 基于代码定义逻辑,灵活性高 - 分布式支持,适合高并发场景 - 内置WebSocket客户端库(如`websockets`) - **适用场景**: - 需要自定义WebSocket消息逻辑(如动态生成数据) - 开发者友好型工具 - **示例代码**: ```python from locust import HttpUser, task, between import websockets class WebSocketUser(HttpUser): @task async def test_websocket(self): async with websockets.connect("ws://your-server") as ws: await ws.send("Hello") response = await ws.recv() ``` #### 3. **k6(开源,JavaScript语法)** - **特点**: - 轻量级,适合集成到CI/CD流程 - 原生支持WebSocket(`k6/ws`模块) - 低资源消耗,单机可模拟高并发 - **适用场景**: - 云原生环境下的自动化性能试 - 需要快速生成报告的团队 - **示例脚本**: ```javascript import ws from 'k6/ws'; export default function () { ws.connect('ws://your-server', {}, function (socket) { socket.on('open', () => socket.send('Ping')); socket.on('message', (msg) => console.log(msg)); }); } ``` #### 4. **Gatling(开源,Scala编写)** - **特点**: - 高性能,支持WebSocket长连接 - 提供专业级HTML报告 - 适合复杂协议栈试 - **适用场景**: - 企业级高并发稳定性试 - 需要详细性能指标分析的场景 --- ### 二、选型建议 | 工具 | 推荐场景 | 学习成本 | 性能上限 | |------------|-----------------------------------|----------|----------------| | **JMeter** | 快速验证、非编程团队 | 低 | 单机约5k并发 | | **Locust** | 自定义逻辑、分布式 | 中 | 分布式百万级 | | **k6** | 云原生集成、轻量级脚本 | 中 | 单机10k+并发 | | **Gatling**| 企业级报告、复杂协议 | 高 | 单机20k+并发 | --- ### 三、实战注意事项 1. **协议兼容性**:确保WebSocket握手阶段与服务器兼容(如`Sec-WebSocket-Key`生成逻辑)[^3] 2. **长连接管理**:模拟心跳包机制,避免连接被服务器主动断开 3. **数据动态化**:使用变量替换固定消息(如用户ID、时间戳) ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值