You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter远程执行WebDriver Sampler脚本遇连接超时及脚本停滞问题

问题分析与解决方案

从你遇到的情况来看,核心问题是JMeter远程从机无法反向连接回主服务器,导致测试流程卡住——虽然ChromeDriver能启动浏览器,但后续的WebDriver脚本完全无法执行。下面分模块拆解问题并给出解决办法:


1. 你的WebDriver Sampler代码

var pkg = JavaImporter(org.openqa.selenium); //WebDriver classes
var support_ui = JavaImporter(org.openqa.selenium.support.ui.WebDriverWait); //WebDriver classes
WDS.sampleResult.sampleStart()
var wait = new support_ui.WebDriverWait(WDS.browser, 5000);
WDS.browser.manage().timeouts().implicitlyWait(25, TimeUnit.SECONDS);
WDS.browser.get('http://interview.erainfotechbd.com:5003/')
WDS.log.info("chat bot opended")
//var name= WDS.args[0]
//var number= WDS.args[1]
WDS.log.info("names are :" +WDS.args[0])
WDS.log.info("numbers are :" +WDS.args[1])
var wait=new support_ui.WebDriverWait(WDS.browser, 5)
WDS.browser.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
var userName = WDS.browser.findElement(pkg.By.xpath('//input[@name="nickname"]'))
userName.click(); //clicks search field
userName.sendKeys(WDS.args[0]) //types word "blazemeter" in field//saves search field into searchField
var mobileNumber = WDS.browser.findElement(pkg.By.xpath('//input[@name="mobile"]'))
mobileNumber.click(); //clicks search field
mobileNumber.sendKeys(WDS.args[1]) //types word "blazemeter" in field//saves search field into searchField
var loginButton = WDS.browser.findElement(pkg.By.xpath('//button[@id="Enter"]'))
loginButton.click(); //clicks login button
var wait=new support_ui.WebDriverWait(WDS.browser, 5)
var selectInterview= WDS.browser.findElement(pkg.By.xpath('//form[@id="myFormInt"]/input[1]'))
selectInterview.click()
var wait=new support_ui.WebDriverWait(WDS.browser, 20)
//timeouts.pageLoadTimeout(600, timeUnit.TimeUnit.SECONDS)
var returnedAnswer=WDS.browser.findElement(pkg.By.xpath('//input[@class="form-control"]')).getText()
var enterValidNumber= WDS.browser.findElement(pkg.By.xpath('//input[@class="form-control"]'))
enterValidNumber.sendKeys('01676912613')
var sendMessagebutton= WDS.browser.findElement(pkg.By.xpath('//button[@id="sendMessage"]'))
sendMessagebutton.click()
var wait=new support_ui.WebDriverWait(WDS.browser, 20)
//timeouts.pageLoadTimeout(600, timeUnit.TimeUnit.SECONDS)
WDS.vars.put('renderTime', renderTime.toString())
WDS.sampleResult.getLatency()
WDS.sampleResult.sampleEnd()

2. JMeter主服务器配置

server.rmi.ssl.disable=true
remote_hosts=127.0.0.1 , 10.11.200.203

3. 远程从机抛出的核心异常

RemoteListenerWrapper: testStarted(host) on 10.11.200.203
java.rmi.ConnectException: Connection refused to host: 10.0.75.1; nested exception is:
java.net.ConnectException: Connection timed out: connect
...(后续栈追踪省略)


问题根源与解决步骤

1. RMI反向连接失败(核心原因)

JMeter远程运行的逻辑是:主服务器发送指令到从机,但从机需要主动连接回主服务器来上报测试状态、结果。异常里的10.0.75.1应该是主服务器的虚拟/内部IP(比如虚拟机NAT地址),但从机无法访问这个IP,导致连接超时,进而卡住整个测试流程。

解决方法:

  • 启动主服务器JMeter时,指定从机能访问到的真实IP,通过java.rmi.server.hostname参数:
    jmeter -Jjava.rmi.server.hostname=你的主服务器真实IP -n -t 你的测试计划.jmx -r
    
  • 确保主服务器防火墙开放RMI相关端口:
    在主服务器的jmeter.properties里固定RMI端口(避免随机端口):
    server.rmi.localport=1099
    server_port=1099
    
    然后在防火墙中开放1099端口的入站规则,允许从机访问。

2. 环境一致性检查

即使RMI连接正常,也要确保从机和主机环境完全一致:

  • 从机安装的JMeter版本、WebDriver Sampler插件版本和主机完全相同
  • 从机的Chrome版本与ChromeDriver版本严格匹配,且在从机的jmeter.properties中配置好ChromeDriver路径:webdriver.chrome.driver=你的ChromeDriver绝对路径
  • 从机的Java版本和主机一致(比如都是1.8.0_231),避免版本差异导致的兼容性问题

3. 脚本自身的潜在问题

虽然当前是RMI问题导致卡住,但脚本里也有几个需要修正的点:

  • 重复创建多个wait变量,会覆盖之前的实例,建议区分命名(比如waitShort、waitLong)
  • renderTime变量未定义就使用,会导致脚本报错,需要删除该行或提前赋值
  • 隐式等待和显式等待混合使用可能导致等待逻辑混乱,建议统一使用显式等待(WebDriverWait)

内容的提问来源于stack exchange,提问作者MD. Ashfaqur Rahman Tahashin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:29:10