多浏览器多账号登录获取医疗模块ECG实时数据的方案咨询
解决方案:处理SignalR流式数据与多用户多浏览器测试需求
首先纠正一个误解:JMeter是可以处理SignalR/WebSocket流式数据的,你之前没拿到数据大概率是配置没覆盖SignalR的完整交互流程。另外,针对你要同时打开多个浏览器、用不同用户登录并加载实时流页面的需求,分两种场景给你方案:
一、用JMeter模拟(无需真实浏览器,适合性能测试)
如果你的目标是性能测试而非真实UI验证,JMeter完全可以实现多用户并发连接并接收ECG流式数据,关键是要正确处理SignalR的交互步骤:
- 步骤1:完成SignalR协商
SignalR不是直接连WebSocket,首先要发送一个GET请求到/negotiate端点(具体路径看你的应用配置),获取connectionId、accessToken等关键参数,这些参数会用于后续的WebSocket连接。 - 步骤2:建立WebSocket连接
使用JMeter的WebSocket Sampler,选择Streaming Connection模式,连接URL要带上之前获取的connectionId(比如wss://your-domain/signalr/connect?transport=webSockets&connectionId=xxx)。 - 步骤3:订阅流式数据
SignalR需要你发送特定格式的JSON消息来订阅ECG流,比如:
把这个消息通过WebSocket Sampler发送,之后就能持续接收设备推送的ECG波形数据了。{"H":"your-hub-name","M":"SubscribeToEcgStream","A":[],"I":1} - 多用户并发
用CSV Data Set Config加载多个用户的凭据,线程组设置对应数量的线程,每个线程独立完成登录、协商、WebSocket连接的流程,就能模拟多用户并发场景。
如果还是没拿到数据,建议查看jmeter.log,里面会有WebSocket连接的错误细节,比如握手失败、帧解析错误等。
二、真实打开多浏览器测试(适合UI/功能验证)
如果必须用真实浏览器打开页面并验证实时流,那需要用UI自动化工具:
- Playwright(首推)
微软的Playwright天生支持多浏览器、多独立上下文,每个上下文可以模拟不同用户(独立的cookie、localStorage)。你可以用几行代码启动多个Chrome/Firefox/Safari实例,每个实例用不同用户登录并打开实时流页面,示例逻辑:from playwright.sync_api import sync_playwright users = [{"username": "user1", "password": "pass1"}, {"username": "user2", "password": "pass2"}] with sync_playwright() as p: for user in users: browser = p.chromium.launch(headless=False) context = browser.new_context() page = context.new_page() # 登录流程 page.goto("/login") page.fill("#username", user["username"]) page.fill("#password", user["password"]) page.click("#submit") # 打开实时流页面 page.goto("/ecg-stream") - Selenium
经典的UI自动化工具,支持多浏览器实例。可以通过启动多个WebDriver实例,每个实例对应一个用户,完成登录和页面加载。如果需要大规模并行,还可以用Selenium Grid分布式运行。 - Cypress
虽然Cypress默认单浏览器,但可以通过命令行参数(比如cypress run --parallel)结合配置文件,启动多个并行实例,每个实例用不同的用户上下文(通过修改cookie或localStorage切换用户)。
内容的提问来源于stack exchange,提问作者Chitta Ranjan
相关产品推荐
相关产品推荐

