2017-06-06 94 views
0

目前,我有五个phantomjs在我的Selenium网格上设置的实例都在不同的节点上。我试图一次运行5个并行测试,但其中一些测试会失败。每一次,这是一个不同的测试,将在不同的线路上失败。为并行执行优化Selenium测试

我也放入了等待和断言等到元素出现,但测试用例每次仍然在不同的点上失败。但是,当我逐个运行测试时,所有测试都会通过100%的时间。

有什么办法可以优化我的并行执行测试吗?

我的测试是在Windows环境下用Java编写的。我使用的是phantomjs 1.9.8和Selenium 3.54

+0

我想你应该尝试找出瓶颈:可能是记忆,资源冲突 - 几乎任何东西。一旦你知道它是什么,你可以消除它,或者解决它。 –

回答

1

轶事:当我发现我的测试在我的机器上运行良好但在网格节点上运行得并不好时,它通常是计时问题。我的工作站比我的虚拟机(网格节点)功能强大,所以简单的动画渲染时间更长。它达到了我使用.ClickViaJavaScript()来代替.Click()的地步。在js点击之后,我还投入了500毫秒的睡眠时间。

// Click element via JavaScript 
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click()", element); 
// Wait a moment 
System.Threading.Thread.Sleep(500); 

并行并没有真正必要被重写任何代码,只要你不要在运行时改变全局变量和每个测试是原子。

+0

我的测试涉及大量的点击和加载不同的页面,这可能是问题所在。我处于活动等待状态(所以请等待,直到页面上的某个元素出现),但这些会在约4秒后等待超时)。我听说静态等待是一种不好的编码习惯? – Jay

+0

静态等待并不被认为是最佳实践,但有时你会做你必须做的。另外,你4秒的超时时间非常短。通常,我会在10,30或60秒钟左右(无论是隐式还是显式)看到超时。 –

+0

是的,我增加了我的动态超时时间,并会给出一个镜头,如果这不起作用,我会研究静态等待。谢谢你的帮助 :) – Jay