Selenium测试在本地工作但在Jenkins中失败

时间:2016-06-07 13:47:57

标签: java selenium jenkins continuous-integration

在工作中,我们为我们的某个应用程序设置了一个自动化套件,该套件设置为在每次提交时运行以进行主/部署,并且很长一段时间我们一直在努力使其足够可靠。

使用Selenium webDriver + Chrome + xvfb作为显示服务器在Jenkins中运行测试。我们知道测试是有效的,因为如果我们在笔记本电脑上本地运行它们(我和2个朋友已经尝试过它们),它们每次运行都很完美,但每次在Jenkins中几乎几乎几乎是关键字,因为它们也在那里工作......每5次左右一次。

当他们失败时,他们并不总是在同一地点失败。有时等待元素时超时,有时测试最终会出现在首先不应该达到的错误页面中,我不知道它是如何到达的......所以是的,这令人沮丧。

我们尝试了很多不同的方法来调试它。重写每个测试的设置,以确保在每次测试结束时清除所有内容,以便下一个测试以干净的工作区/缓存开始,这样Selenium每次都无法看到发生的事情时会截取屏幕截图,尝试过不同版本的chromedriver / chrome / selenium,让测试连续运行几次,看看是否有任何模式......而且由于我的想法已经用完了,我想我可以问这里!

有没有什么方法可以设置Selenium驱动程序来记录整个流程,而不是每次都在屏幕截图?我很乐意能够观看在詹金斯运行的测试,但我不知道这是否可能或如何做到这一点。

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

关于我可以尝试的任何想法或提示?。

3 个答案:

答案 0 :(得分:3)

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

  

当他们失败时,他们并不总是在同一地点失败。有时等待元素时会超时,有时候测试最终会出现在首先不应该达到的错误页面中,我不知道它是如何到达那里的......

我已经和他人争斗了两年多了,当我说我知道的时候相信我

  

所以是的,这令人沮丧。

VM的主要问题是它们没有正确的渲染,无论CPU和RAM有多大,它们最终都无法重现您的本地(或任何物理)视频卡。当您尝试并行运行所有测试时,事情变得非常难看。例如,我的团队无法在具有12 GB RAM的VM上实际运行超过4个浏览器!?!我的笔记本电脑8 GB轻松运行15个浏览器,而我继续做我的日常工作。所以底线:Selenium驱动程序和浏览器之间的同步是问题。每次都有所不同,具体取决于渲染速度。

  

有没有什么方法可以设置Selenium驱动程序来记录整个流程,而不是只是每次都截取屏幕截图?

实际上有几种方式。但是保持简单 - 使用第二个线程,每隔5秒(或者你的服务器可以跟上的数量)进行一次刷新,并在每次测试中将它们保存在一个文件夹中。但出于性能原因,我建议使用Queue并保留最后12(最后一分钟)。

更新:

我已经在片状测试blog post中扩展了所有这些。

答案 1 :(得分:0)

这是Jenkins奴隶(作为服务运行)的优先问题。

您需要将Jenkins从属优先级更改为高或实时 找到Jenkins从属进程并提高优先级。 跟随 - https://www.sevenforums.com/tutorials/83361-priority-level-set-applications-processes.html

答案 2 :(得分:0)

Jenkins臭名昭著,任务调度程序效率低下。

因此请同时使用!

  1. 创建一个蝙蝠文件,在其中调用硒脚本
  2. 如果您使用maven作为构建工具,则将其写在记事本中并以.bat扩展名保存

    CD C:\ProjectPath
    mvn test        
    
  3. 创建任务计划程序作业以运行bat文件。
  4. 通过以下方式从詹金斯(Jenkins)调用该“任务调度程序作业”:

    • 添加此构建步骤“运行Windows批处理命令”

          schtasks /Run /TN "Task Name"
      
  5. 恭喜,您的测试现在将以交互模式运行。