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

虚拟机与本地环境测试性能对比:虚拟机测试异常缓慢

问题排查与优化方案

核心问题排查方向

  • 虚拟机资源受限:Jenkins所在虚拟机CPU、内存或网络带宽不足,无头Chrome启动及页面加载时资源抢占导致阻塞。
  • 网络环境差异:虚拟机与测试目标站点间网络延迟高,或存在未正确配置的代理,导致driver.get()请求长时间等待。
  • ChromeDriver与浏览器版本不兼容:代码中注释了Linux平台的driver路径,推测虚拟机为Linux环境,若ChromeDriver与Chrome版本不匹配,会引发初始化或页面加载异常耗时。
  • 无头模式参数缺失优化项:当前仅配置基础无头参数,未启用性能相关的资源限制、禁用非必要功能等配置。
  • Maven全量构建耗时:clean install会执行编译、打包、依赖下载等全流程,若虚拟机依赖下载慢或构建资源占用高,会间接拖慢测试执行速度。

落地优化方案

1. 优化Chrome无头模式启动参数

更新startBrowser()方法中的ChromeOptions,添加性能优化参数,适配多系统环境:

@Before
public WebDriver startBrowser(){
    loggerManager.info("Test is starting...");
    ChromeOptions options = new ChromeOptions();
    // 根据系统自动选择driver路径,避免硬编码
    String driverPath = System.getProperty("os.name").toLowerCase().contains("win") 
        ? "src/main/resources/drivers/winChromedriver.exe" 
        : "/usr/bin/chromedriver";
    System.setProperty("webdriver.chrome.driver", driverPath);
    
    // 无头模式核心优化参数
    options.addArguments("--headless=new"); // 新版无头模式,性能更优且兼容更多特性
    options.addArguments("--remote-allow-origins=*");
    options.addArguments("--ignore-ssl-errors=yes");
    options.addArguments("--ignore-certificate-errors");
    options.addArguments("--disable-gpu"); // 禁用GPU渲染,减少资源消耗
    options.addArguments("--no-sandbox"); // 关闭沙箱,避免权限问题及额外内存占用
    options.addArguments("--disable-dev-shm-usage"); // 解决Linux下/dev/shm内存不足导致的卡顿
    options.addArguments("--disable-extensions"); // 禁用浏览器扩展
    options.addArguments("--blink-settings=imagesEnabled=false"); // 非必要时禁用图片加载,大幅提速
    options.addArguments("--disable-javascript"); // 测试场景不需要JS时可禁用,根据实际调整
    
    if (driver == null){
        driver = new ChromeDriver(options);
    }
    driver.manage().window().setSize(new Dimension(1920, 1080)); // 替代maximize,避免窗口调整耗时
    return driver;
}

2. 精简Maven执行命令

避免全量构建,仅执行测试阶段,减少前置步骤耗时:

mvn -s .m2/settings.xml test -Dcucumber.filter.tags="@test"

若必须执行install,可添加-DskipTests=false确保仅运行指定测试,同时检查.m2/settings.xml中的镜像源是否为国内高速镜像,加速依赖下载。

3. 协同运维排查虚拟机环境

  • 确认虚拟机CPU(≥2核)、内存(≥4G)分配是否满足Chrome运行需求。
  • 检查虚拟机网络是否直连测试站点,或是否配置了正确的代理规则,消除网络延迟。
  • 验证ChromeDriver与Chrome版本是否匹配(执行chromedriver --version和google-chrome --version对比,需对应大版本一致)。

4. 测试代码细节优化

  • 确认driver单例模式生效:当前代码的if (driver==null)判断可避免每个场景重启浏览器,但需确保Cucumber钩子的作用域为全局(可通过@Before(order=1, value="@test")指定作用域)。
  • 为页面操作添加显式等待:避免依赖隐性等待导致的不必要阻塞,但核心仍需解决网络和资源瓶颈。

内容的提问来源于stack exchange,提问作者Jano Marek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:56:03