在工作中,我们为我们的某个应用程序设置了一个自动化套件,该套件设置为在每次提交时运行以进行主/部署,并且很长一段时间我们一直在努力使其足够可靠。
使用Selenium webDriver + Chrome + xvfb作为显示服务器在Jenkins中运行测试。我们知道测试是有效的,因为如果我们在笔记本电脑上本地运行它们(我和2个朋友已经尝试过它们),它们每次运行都很完美,但每次在Jenkins中几乎几乎。 几乎是关键字,因为它们也在那里工作......每5次左右一次。
当他们失败时,他们并不总是在同一地点失败。有时等待元素时超时,有时测试最终会出现在首先不应该达到的错误页面中,我不知道它是如何到达的......所以是的,这令人沮丧。
我们尝试了很多不同的方法来调试它。重写每个测试的设置,以确保在每次测试结束时清除所有内容,以便下一个测试以干净的工作区/缓存开始,这样Selenium每次都无法看到发生的事情时会截取屏幕截图,尝试过不同版本的chromedriver / chrome / selenium,让测试连续运行几次,看看是否有任何模式......而且由于我的想法已经用完了,我想我可以问这里!
有没有什么方法可以设置Selenium驱动程序来记录整个流程,而不是每次都在屏幕截图?我很乐意能够观看在詹金斯运行的测试,但我不知道这是否可能或如何做到这一点。
测试使用Java7 + Spring + TestNG 6.8.1 + Selenium 2.45.0 + XVFB作为显示服务器。
关于我可以尝试的任何想法或提示?。
答案 0 :(得分:3)
阅读您尝试过的所有解决方案,我几乎可以肯定您使用虚拟机(VM)来执行Selenium测试。指出这一点的事实主要是:
当他们失败时,他们并不总是在同一地点失败。有时等待元素时会超时,有时候测试最终会出现在首先不应该达到的错误页面中,我不知道它是如何到达那里的......
我已经和他人争斗了两年多了,当我说我知道的时候相信我
所以是的,这令人沮丧。
VM的主要问题是它们没有正确的渲染,无论CPU和RAM有多大,它们最终都无法重现您的本地(或任何物理)视频卡。当您尝试并行运行所有测试时,事情变得非常难看。例如,我的团队无法在具有12 GB RAM的VM上实际运行超过4个浏览器!?!我的笔记本电脑8 GB轻松运行15个浏览器,而我继续做我的日常工作。所以底线:Selenium驱动程序和浏览器之间的同步是问题。每次都有所不同,具体取决于渲染速度。
实际上有几种方式。但是保持简单 - 使用第二个线程,每隔5秒(或者你的服务器可以跟上的数量)进行一次刷新,并在每次测试中将它们保存在一个文件夹中。但出于性能原因,我建议使用Queue并保留最后12(最后一分钟)。有没有什么方法可以设置Selenium驱动程序来记录整个流程,而不是只是每次都截取屏幕截图?
更新:
我已经在片状测试blog post中扩展了所有这些。
答案 1 :(得分:0)
这是Jenkins奴隶(作为服务运行)的优先问题。
您需要将Jenkins从属优先级更改为高或实时 找到Jenkins从属进程并提高优先级。 跟随 - https://www.sevenforums.com/tutorials/83361-priority-level-set-applications-processes.html
答案 2 :(得分:0)
Jenkins臭名昭著,任务调度程序效率低下。
因此请同时使用!
如果您使用maven作为构建工具,则将其写在记事本中并以.bat扩展名保存
CD C:\ProjectPath
mvn test
通过以下方式从詹金斯(Jenkins)调用该“任务调度程序作业”:
添加此构建步骤“运行Windows批处理命令”
schtasks /Run /TN "Task Name"