在工作中,我们为我们的一个应用程序提供了一个自动化套件,该套件设置为在每次提交到 master/部署到产品时运行,并且很长一段时间以来,我们一直在尝试使其足够可靠。
测试在 Jenkins 中运行,使用 Selenium webDriver + Chrome + xvfb 作为显示服务器。我们知道测试是有效的,因为如果我们在笔记本电脑上本地运行它们(我和两个朋友已经尝试过),它们每次都会完美运行,但会失败almost每次在詹金斯。这almost是关键字,因为它们在那里也起作用......大约每 5 次一次。
当他们失败时,他们并不总是在同一个地方失败。有时是等待元素时超时,有时测试最终会出现一个本来不应该到达的错误页面,我不知道它是如何到达那里的......所以是的,这很令人沮丧。
我们尝试了很多不同的方法来调试它。重写每个测试的设置,以确保在每个测试结束时所有内容都被清除,以便下一个测试以干净的工作区/缓存开始,从而使 Selenium 在每次无法看到发生了什么时都会截取屏幕截图,尝试过不同版本的 chromedriver/chrome/selenium,将测试连续运行几次以查看是否有任何模式......并且由于我已经没有想法了,所以我想我可以在这里问!
有什么方法可以设置 Selenium 驱动程序来记录整个流程,而不是只是到处截图?我希望能够观看 Jenkins 中运行的测试,但我不知道这是否可能或如何做到。
测试使用Java7 + Spring + TestNG 6.8.1 + Selenium 2.45.0 + XVFB作为显示服务器。
关于我可以尝试什么的任何想法或提示?
阅读您尝试过的所有解决方案,我几乎可以肯定您使用虚拟机 (VM) 来执行 Selenium 测试。表明这一点的事实主要是:
当他们失败时,他们并不总是在同一个地方失败。有时是等待元素时超时,有时测试最终会出现一个本来不应该到达的错误页面,我不知道它是如何到达那里的......
我已经和同样的问题斗争了两年多了,相信我,我知道
是的,这很令人沮丧。
虚拟机的主要问题是它们没有正确的渲染功能,并且无论它们的 CPU 和 RAM 有多大,它们最终都无法重现您的本地(或任何物理)显卡。当您尝试并行运行所有测试时,事情会变得非常糟糕。例如,我的团队实际上无法在具有 12 GB RAM 的虚拟机上运行 4 个以上的浏览器!?!我的 8 GB easy 笔记本电脑可以运行 15 个浏览器,同时我可以继续做日常工作。所以底线:Selenium 驱动程序和浏览器之间的同步是问题所在。每次都不同,具体取决于渲染速度。
有什么方法可以设置 Selenium 驱动程序来记录整个流程,而不是只是到处截图?
实际上有几种方法。但保持简单 - 使用第二个线程,每 5 秒(或您的服务器可以跟上的尽可能多的时间)进行一次扫描,并将它们保存在每个测试的文件夹中。但出于性能原因,我建议使用Queue并只保留最后 12 个(最后一分钟)。
UPDATE:
我已经在片状测试中扩展了所有这些博客文章.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)