升级Chrome后JMeter的WebDriverSampler测试报错(WebSocket连接失败)
我有一个简易测试计划,配置了WebDriver Sampler测试及Chrome Driver Config Element,指定使用<JMETER_HOME>/bin目录中的兼容Chromedriver,测试内容参考两分钟指南。该测试此前运行正常,但在升级Chrome浏览器及驱动后无法正常工作。
环境信息:
- JMeter版本:5.5
- 操作系统:Mac OS X 12.6.4
- Google Chrome版本:111.0.5563.146(官方版本,arm64架构)
- 插件管理器及插件已更新至最新版本
执行测试时出现以下错误:
org.openqa.selenium.remote.http.ConnectionFailedException: 无法建立WebSocket连接到 http://localhost:51531/devtools/browser/2fa15e06-54bb-4e59-a09f-1cb2b742d2d5 Build info: version: '4.7.2', revision: '4d4020c3b7' System info: os.name: 'Mac OS X', os.arch: 'aarch64', os.version: '12.6.4', java.version: '18.0.2.1' Driver info: driver.version: ChromeDriver at org.openqa.selenium.remote.http.netty.NettyWebSocket.<init>(NettyWebSocket.java:102) ~[selenium-remote-driver-4.7.2.jar:?] at org.openqa.selenium.remote.http.netty.NettyWebSocket.lambda$create$3(NettyWebSocket.java:128) ~[selenium-remote-driver-4.7.2.jar:?] at org.openqa.selenium.remote.http.netty.NettyClient.openSocket(NettyClient.java:107) ~[selenium-remote-driver-4.7.2.jar:?] at org.openqa.selenium.devtools.Connection.<init>(Connection.java:78) ~[selenium-remote-driver-4.7.2.jar:?] at org.openqa.selenium.chromium.ChromiumDriver.lambda$new$2(ChromiumDriver.java:116) ~[selenium-chromium-driver-4.7.2.jar:?] at java.util.Optional.map(Optional.java:260) ~[?:?] at org.openqa.selenium.chromium.ChromiumDriver.<init>(ChromiumDriver.java:114) ~[selenium-chromium-driver-4.7.2.jar:?] at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:82) ~[selenium-chrome-driver-4.7.2.jar:?] at com.googlecode.jmeter.plugins.webdriver.config.ChromeDriverConfig.createBrowser(ChromeDriverConfig.java:28) ~[jmeter-plugins-webdriver-4.8.3.1.jar:?] at com.googlecode.jmeter.plugins.webdriver.config.ChromeDriverConfig.createBrowser(ChromeDriverConfig.java:14) ~[jmeter-plugins-webdriver-4.8.3.1.jar:?] at com.googlecode.jmeter.plugins.webdriver.config.WebDriverConfig.getPreparedBrowser(WebDriverConfig.java:221) ~[jmeter-plugins-webdriver-4.8.3.1.jar:?] at com.googlecode.jmeter.plugins.webdriver.config.WebDriverConfig.threadStarted(WebDriverConfig.java:152) ~[jmeter-plugins-webdriver-4.8.3.1.jar:?] at org.apache.jmeter.threads.JMeterThread$ThreadListenerTraverser.addNode(JMeterThread.java:797) ~[ApacheJMeter_core.jar:5.5] at org.apache.jorphan.collections.HashTree.traverseInto(HashTree.java:993) ~[jorphan.jar:5.5] at org.apache.jorphan.collections.HashTree.traverse(HashTree.java:976) ~[jorphan.jar:5.5] at org.apache.jmeter.threads.JMeterThread.threadStarted(JMeterThread.java:765) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.initRun(JMeterThread.java:753) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:264) ~[ApacheJMeter_core.jar:5.5] at java.lang.Thread.run(Thread.java:833) ~[?:?] 2023-04-07 11:37:16,235 ERROR o.a.j.t.JMeterThread: 测试失败! org.openqa.selenium.remote.http.ConnectionFailedException: 无法建立WebSocket连接到 http://localhost:51545/devtools/browser/e316304b-bf6b-46bf-96d7-28933b054a87 Build info: version: '4.7.2', revision: '4d4020c3b7' System info: os.name: 'Mac OS X', os.arch: 'aarch64', os.version: '12.6.4', java.version: '18.0.2.1' Driver info: driver.version: ChromeDriver at org.openqa.selenium.remote.http.netty.NettyWebSocket.<init>(NettyWebSocket.java:102) ~[selenium-remote-driver-4.7.2.jar:?] at org.openqa.selenium.remote.http.netty.NettyWebSocket.lambda$create$3(NettyWebSocket.java:128) ~[selenium-remote-driver-4.7.2.jar:?] at org.openqa.selenium.remote.http.netty.NettyClient.openSocket(NettyClient.java:107) ~[selenium-remote-driver-4.7.2.jar:?] at org.openqa.selenium.devtools.Connection.<init>(Connection.java:78) ~[selenium-remote-driver-4.7.2.jar:?] at org.openqa.selenium.chromium.ChromiumDriver.lambda$new$2(ChromiumDriver.java:116) ~[selenium-chromium-driver-4.7.2.jar:?] at java.util.Optional.map(Optional.java:260) ~[?:?] at org.openqa.selenium.chromium.ChromiumDriver.<init>(ChromiumDriver.java:114) ~[selenium-chromium-driver-4.7.2.jar:?] at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:82) ~[selenium-chrome-driver-4.7.2.jar:?] at com.googlecode.jmeter.plugins.webdriver.config.ChromeDriverConfig.createBrowser(ChromeDriverConfig.java:28) ~[jmeter-plugins-webdriver-4.8.3.1.jar:?] at com.googlecode.jmeter.plugins.webdriver.config.ChromeDriverConfig.createBrowser(ChromeDriverConfig.java:14) ~[jmeter-plugins-webdriver-4.8.3.1.jar:?] at com.googlecode.jmeter.plugins.webdriver.config.WebDriverConfig.getPreparedBrowser(WebDriverConfig.java:221) ~[jmeter-plugins-webdriver-4.8.3.1.jar:?] at com.googlecode.jmeter.plugins.webdriver.config.WebDriverConfig.iterationStart(WebDriverConfig.java:198) ~[jmeter-plugins-webdriver-4.8.3.1.jar:?] at org.apache.jmeter.control.GenericController.fireIterationStart(GenericController.java:399) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.control.GenericController.fireIterEvents(GenericController.java:391) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.control.GenericController.next(GenericController.java:160) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.control.LoopController.next(LoopController.java:134) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.AbstractThreadGroup.next(AbstractThreadGroup.java:99) ~[ApacheJMeter_core.jar:5.5] at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:266) ~[ApacheJMeter_core.jar:5.5] at java.lang.Thread.run(Thread.java:833) ~[?:?]
这类WebSocket连接失败问题,核心原因是版本不兼容或架构适配问题,按以下步骤排查:
严格匹配Chrome与ChromeDriver版本:Chrome 111.0.5563.146必须对应ChromeDriver 111.0.5563.64,且要下载arm64架构的版本。替换
<JMETER_HOME>/bin目录中的旧驱动,执行chmod +x chromedriver赋予可执行权限。升级Selenium版本:当前使用的Selenium 4.7.2对Chrome 111的支持不完善,需升级到Selenium 4.8.0及以上版本。可以通过JMeter插件管理器更新WebDriver插件,确保插件依赖的Selenium包同步升级。
添加Chrome启动参数:在Chrome Driver Config的「Arguments」字段中添加以下参数,修复WebSocket连接问题:
--remote-debugging-port=9222 --no-sandbox --disable-dev-shm-usage --headless=new(如果不需要无头模式,可去掉
--headless=new)更换Java版本:JMeter 5.5官方推荐使用Java 8或11,Java 18等高版本可能与Selenium/WebDriver插件存在兼容性问题,切换到Java 11测试。
验证驱动路径:确保Chrome Driver Config中指定的路径正确,或者将chromedriver加入系统PATH,让插件自动查找。
内容的提问来源于stack exchange,提问作者Janesh Kodikara

