JMeter WebDriver Sampler无法运行求助(多浏览器报错)
问题概述
使用JMeter的WebDriver Sampler自动化应用时,Chrome、Gecko、Chromium Driver均出现报错,核心错误为java.lang.NoClassDefFoundError: Could not initialize class org.openqa.selenium.remote.http.netty.NettyClient;Chromium浏览器虽能启动,但会触发超时错误。
环境版本
- JMeter:5.3
- Java:17.0.6 LTS
- Chrome Driver:120(对应Chrome浏览器120.0)
- WebDriver版本:4.13.0
示例脚本(BeanShell)
var driverHandler = JavaImporter(org.openqa.selenium, org.openqa.selenium.support.ui); var sleepSynchronizer = new driverHandler.WebDriverWait(WDS.browser, 5000); driverHandler.sampleResult.sampleStart(); //Render the home Page WDS.browser.get('<application URL>'); sleepSynchronizer.until(driverHandler.ExpectedConditions.elementToBeClickable(sleepSynchronizer.By.id('details-button'))); //Handling Cookies var sessionCOOKIES = WDS.browser.manage().getCookies(); WDS.vars.putObject('cookies', sessionCOOKIES) java.lang.Thread.sleep(6000);
报错详情
Chrome Driver报错
2024-01-13 19:55:24,522 ERROR o.a.j.JMeter: Uncaught exception in thread Thread[Thread Group 1-1,6,main] java.lang.NoClassDefFoundError: Could not initialize class org.openqa.selenium.remote.http.netty.NettyClient at org.openqa.selenium.remote.http.netty.NettyClient$Factory.createClient(NettyClient.java:124) ~[selenium-remote-driver-4.13.0.jar:?] at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:115) ~[selenium-remote-driver-4.13.0.jar:?] at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:92) ~[selenium-remote-driver-4.13.0.jar:?] at org.openqa.selenium.remote.service.DriverCommandExecutor.<init>(DriverCommandExecutor.java:89) ~[selenium-remote-driver-4.13.0.jar:?] at org.openqa.selenium.chromium.ChromiumDriverCommandExecutor.<init>(ChromiumDriverCommandExecutor.java:43) ~[selenium-chromium-driver-4.13.0.jar:?]
Gecko Driver报错
2024-01-13 19:37:27,069 ERROR o.a.j.JMeter: Uncaught exception in thread Thread[Thread Group 1-1,6,main] java.lang.NoClassDefFoundError: Could not initialize class org.openqa.selenium.remote.http.netty.NettyClient at org.openqa.selenium.remote.http.netty.NettyClient$Factory.createClient(NettyClient.java:124) ~[selenium-remote-driver-4.13.0.jar:?] at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:115) ~[selenium-remote-driver-4.13.0.jar:?] at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:92) ~[selenium-remote-driver-4.13.0.jar:?] at org.openqa.selenium.remote.service.DriverCommandExecutor.<init>(DriverCommandExecutor.java:89) ~[selenium-remote-driver-4.13.0.jar:?] at org.openqa.selenium.firefox.FirefoxDriver$FirefoxDriverCommandExecutor.<init>(FirefoxDriver.java:415) ~[selenium-firefox-driver-4.13.0.jar:?] at org.openqa.selenium.firefox.FirefoxDriver.generateExecutor(FirefoxDriver.java:147) ~[selenium-firefox-driver-4.13.0.jar:?] at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:132) ~[selenium-firefox-driver-4.13.0.jar:?]
Chromium Driver报错
注意:Chromium浏览器可启动,但出现以下报错
2024-01-13 19:38:16,709 ERROR o.a.j.t.JMeterThread: Error calling threadStarted org.openqa.selenium.WebDriverException: Timed out waiting for driver server to start. Build info: version: '4.13.0', revision: 'ba948ece5b*' System info: os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '17.0.6' Driver info: driver.version: unknown at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:248) ~[selenium-remote-driver-4.13.0.jar:?] at com.googlecode.jmeter.plugins.webdriver.config.ChromeDriverConfig.getThreadService(ChromeDriverConfig.java:47) ~[jmeter-plugins-webdriver-4.13.0.0.jar:?] at com.googlecode.jmeter.plugins.webdriver.config.ChromeDriverConfig.createBrowser(ChromeDriverConfig.java:26) ~[jmeter-plugins-webdriver-4.13.0.0.jar:?] at com.googlecode.jmeter.plugins.webdriver.config.ChromeDriverConfig.createBrowser(ChromeDriverConfig.java:14) ~[jmeter-plugins-webdriver-4.13.0.0.jar:?] at com.googlecode.jmeter.plugins.webdriver.config.WebDriverConfig.getPreparedBrowser(WebDriverConfig.java:221) ~[jmeter-plugins-webdriver-4.13.0.0.jar:?] at com.googlecode.jmeter.plugins.webdriver.config.WebDriverConfig.threadStarted(WebDriverConfig.java:152) ~[jmeter-plugins-webdriver-4.13.0.0.jar:?] at org.apache.jmeter.threads.JMeterThread$ThreadListenerTraverser.addNode(JMeterThread.java:769) [ApacheJMeter_core.jar:5.3]
解决方案
1. 补全Netty相关依赖包
NoClassDefFoundError核心原因是缺少Selenium 4.x依赖的Netty组件,需确保以下Jar包存在于JMeter的lib/ext目录:
netty-buffer-*.jarnetty-codec-*.jarnetty-codec-http-*.jarnetty-codec-http2-*.jarnetty-common-*.jarnetty-handler-*.jarnetty-resolver-*.jarnetty-transport-*.jar
若通过JMeter插件管理器安装WebDriver Sampler,可重新安装插件,自动补全所有依赖。
2. 匹配版本兼容性
JMeter 5.3官方推荐Java版本为8-11,Java 17兼容性有限,建议降级至Java 11 LTS。同时确认WebDriver Sampler插件版本与Selenium版本严格匹配(当前WebDriver 4.13.0对应插件版本4.13.0.0,检查lib/ext目录下jmeter-plugins-webdriver-4.13.0.0.jar是否存在)。
3. 检查Driver配置与权限
- 在WebDriver Config元件中,确保Driver路径指向正确的可执行文件(如
chromedriver.exe); - Linux/Mac系统需给Driver文件添加可执行权限:
chmod +x chromedriver; - 关闭浏览器自动更新,避免浏览器版本与Driver版本不匹配。
4. 延长Driver启动超时
针对Chromium的超时问题,在WebDriver Config元件中找到“Timeout”设置,将启动超时时间从默认值延长至60秒以上,避免系统资源不足导致启动失败。
5. 切换脚本语言为Groovy
BeanShell兼容性差、性能弱,建议替换为Groovy脚本,示例如下:
import org.openqa.selenium.support.ui.WebDriverWait import org.openqa.selenium.support.ui.ExpectedConditions def wait = new WebDriverWait(WDS.browser, 5) WDS.sampleResult.sampleStart() WDS.browser.get('<application URL>') wait.until(ExpectedConditions.elementToBeClickable(wait.by.id('details-button'))) def cookies = WDS.browser.manage().getCookies() WDS.vars.putObject('cookies', cookies) Thread.sleep(6000) WDS.sampleResult.sampleEnd()
6. 清理JMeter缓存
删除JMeterbin/cache目录下的所有文件,重启JMeter,避免旧缓存导致类加载冲突。
内容的提问来源于stack exchange,提问作者Jyoti Prakash Mallick

