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端口(避免随机端口):
然后在防火墙中开放1099端口的入站规则,允许从机访问。server.rmi.localport=1099 server_port=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
相关产品推荐
相关产品推荐

