Java 硒测试在本地工作,但在Jenkins失败

Java 硒测试在本地工作,但在Jenkins失败,java,selenium,jenkins,continuous-integration,Java,Selenium,Jenkins,Continuous Integration,在工作中,我们为其中一个应用程序提供了一个自动化套件,该套件设置为在每次提交到master/deploy到prod时运行,很长一段时间以来,我们一直在努力使其足够可靠 这些测试在Jenkins中运行,使用SeleniumWebDriver+Chrome+xvfb作为显示服务器。我们知道测试是有效的,因为如果我们在本地的笔记本电脑上运行测试(我和两个朋友已经试过了),它们每次都运行得很好,但在詹金斯几乎每次都失败了。因为他们也在那里工作,所以几乎成为关键词。。。大约每5次就一次 当他们失败时,他们

在工作中,我们为其中一个应用程序提供了一个自动化套件,该套件设置为在每次提交到master/deploy到prod时运行,很长一段时间以来,我们一直在努力使其足够可靠

这些测试在Jenkins中运行,使用SeleniumWebDriver+Chrome+xvfb作为显示服务器。我们知道测试是有效的,因为如果我们在本地的笔记本电脑上运行测试(我和两个朋友已经试过了),它们每次都运行得很好,但在詹金斯几乎每次都失败了。因为他们也在那里工作,所以几乎成为关键词。。。大约每5次就一次

当他们失败时,他们并不总是在同一地点失败。有时在等待某个元素时会超时,有时测试会在错误页面中结束,而该页面本来就不应该到达,我不知道它是如何到达的。。。所以是的,这很令人沮丧

我们已经尝试了很多不同的方法来调试它。重新编写每个测试的设置,以确保在每个测试结束时清除所有内容,以便下一个测试从干净的工作区/缓存开始,使Selenium在每次看不到发生了什么时都截图,尝试了不同版本的chromedriver/chrome/Selenium,将测试连续运行几次,以查看是否存在任何模式。。。既然我的点子快用完了,我想我可以在这里问一下

我有没有办法设置Selenium驱动程序来记录整个流程,而不只是到处截图?。我希望能够观看詹金斯的测试,但我不知道这是否可行,也不知道如何做到

测试使用Java7+Spring+TestNG 6.8.1+Selenium 2.45.0+XVFB作为显示服务器


关于我可以尝试什么的想法或提示?

阅读您尝试过的所有解决方案,我几乎可以肯定您使用虚拟机(VM)来执行Selenium测试。指出这一点的事实主要是:

当他们失败时,他们并不总是在同一地点失败。有时在等待某个元素时会超时,有时测试会在错误页面中结束,而该页面本来就不应该到达,我不知道它是如何到达的

我已经为同样的事情奋斗了两年多了,相信我,当我说我知道的时候

所以是的,这很令人沮丧

虚拟机的主要问题是它们没有正确的渲染,无论它们的CPU和RAM有多大,它们最终都无法复制本地(或任何物理)视频卡。当您尝试并行运行所有测试时,情况会变得非常糟糕。例如,我的团队无法在一个内存为12GB的虚拟机上实际运行超过4个浏览器!?!我的笔记本电脑配备8GB easy,可以运行15个浏览器,同时我还可以继续做日常工作。因此,底线是:Selenium驱动程序和浏览器之间的同步是一个问题。根据渲染速度的不同,每次都会有所不同

我有没有办法设置Selenium驱动程序来记录整个流程,而不只是到处截图

实际上有两种方法。但要保持简单-使用第二个线程,每5秒(或服务器可以跟上的时间)进行一次sreenshoot,并在每次测试时将其保存在一个文件夹中。但出于性能方面的原因,我建议使用a,只保留最后12分钟(最后一分钟)

更新:

我已经在一个脆弱的测试中扩展了所有这些。

这是Jenkins slaves(作为服务运行)的优先级问题

您需要将Jenkins奴隶优先级更改为high或realtime 找到Jenkins从属进程并提高优先级。 跟随-

詹金斯臭名昭著,任务调度程序效率低下

所以两者都要用

  • 创建一个Bat文件,在其中调用selenium脚本
  • 如果您使用maven作为构建工具,那么将其写在记事本中,并使用.bat扩展名保存

    CD C:\ProjectPath
    mvn test        
    
  • 创建任务计划程序作业以运行bat文件
  • 通过以下方式调用Jenkins的“任务计划程序作业”:

    • 添加此生成步骤“运行windows批处理命令”

  • 恭喜,现在您的测试将以交互模式运行

  • 第一个建议是,您可以更新几乎所有正在使用的框架,以提高其效率。下一个建议是隐式等待或适当的显式等待。最后一个建议,如果它在本地运行良好,请将jenkins机器配置为与您的本地机器相同。您知道,我认为实际上就是这样。我们甚至没有考虑虚拟机如何以与实际物理机器不同的方式呈现/使用资源。我们现在正在对此进行研究,并添加了一些行,以便在假设失败之前,每个测试都会自动再次运行。
        schtasks /Run /TN "Task Name"