目前,我的Web应用程序大约有200个测试类。我使用Selenium2 / Webdriver,并且测试是用Java编写的,使用TestNG作为框架。

当我自己运行每个测试时,该测试将通过100%的时间。

当我将任意数量的测试集中到一个套件中时,运行套件将对我的测试产生随机结果。有些会在一次运行中失败,通过另一次,在另一行代码中失败而又一次失败,依此类推。等等。

是否有一种已知方法可以确保在TestNG套件中运行时自动化测试的稳定性?

编辑:
故障与速度有关。有些WebElement会超时,无法找到,而另一些时候,我可以看到自动化的运行速度更快。

例如,我们的安装宏将随机失败。它包括输入用户/密码,单击按钮,通过单击从列表中选择角色,然后单击继续按钮。选择角色后,该按钮将变为启用状态。有时,测试会尝试在启用按钮之前先按下按钮。我没有实现waitForElement,因为独立运行测试时没有问题。那只是一个例子。

评论

尽管我运行的是Webdriver C#和NUnit,但这与我提出的问题类似:sqa.stackexchange.com/q/3581/18

嗯,我同意这绝对是相似的。我主要关心的是目标是最终将测试集成到我们的夜间构建中,如果测试失败,则将无法进行构建。因此,至关重要的一点是我们必须通过100%的测试通过率

我感到您很痛苦,最终我也希望在构建时也运行此框架,并设置可以运行各种排列的脚本,但是我不希望由于零星的测试失败而导致构建失败

在页面加载后甚至在任何JavaScript执行更改DOM的情况下,与第一个元素进行交互时,您都绝对应该实现waitForElement。就个人而言,我的抽象层会在每次与元素的交互时自动等待元素存在。时序问题可能很难预料,也很难追踪,这将其从等式中删除。

好建议。我偏离了使用它的时间,因为它有时会增加测试运行的时间。我可能会去添加那些在

#1 楼

我怀疑这不是TestNG问题。我将首先尝试生成最少的测试集,这些测试一起运行会导致失败。之后,我将探讨以下可能性:测试间交互更改测试与应用程序的交互:测试之间的交互可能会更改测试与应用程序交互的方式。一种检查方法是添加记录测试的日志,然后将隔离测试时的记录数据与运行测试时的日志数据与其他测试进行比较。
测试间交互违反了测试的前提:每个测试假设了一些前提条件。如果不满足前提条件,则测试将失败。一些先决条件将是明确的(测试要事先进行检查或自行设置的先决条件);其他的将是隐式的(测试假设的前提条件或作者忘记考虑的条件)。通常是隐式问题给您带来麻烦。
测试间交互会改变测试处理结果的方式:测试之间的交互可能会导致测试分析与Web应用程序的交互的方式出现错误。
测试间的交互会发现应用程序错误:当然,您总是有可能发现了一个实际的应用程序错误。
测试间的交互会导致资源问题:运行许多测试可能会导致您耗费大量精力。资源过多。


评论


可能是资源问题。测试的运行速度因每次执行而异。对于每个测试,我们先启动然后杀死Firefox驱动程序,所以我认为任何中间测试都不会导致这种情况

–挤压
2012年10月3日,19:35

#2 楼

最终成为TestNG问题。交织方法是一个已知问题。将测试分为套件并从一种XML运行所有套件可以缓解大多数问题。如果具有'dependsOnMethods'依赖项的测试在多个类中具有相同的方法名称,也会出现问题。如果通过了A类中的依赖方法,则可能导致B类中的方法触发。

#3 楼


通常,当测试离开/发现应用程序处于意外状态时,批量发生测试失败



这可能以多种方式表现出来。有时它的数据,有时它的缓存问题,有时UI对象状态等等。

我们通常解决这些问题的方法是确保应用程序基本状态作为表单测试的第一步断言,以便根据当前测试用例的前提条件,如果应用程序处于不良状态,我们可以立即使测试失败。例如,如果先前的测试取消了活动订单, ,它将在下一个测试中使用,因此在下一个测试中,作为第一步,我们将断言要使用的顺序处于活动状态。

所以我们要做的是就像我们每次执行测试时都会触发一个SQL查询以选择活动订单一样,因此在任何情况下,我们都会动态获取测试所需的数据,而不会对应用程序数据产生先前测试的任何副作用。

或者,如果在上次测试运行后不再有有效的订单数据,则当前测试将立即失败,并显示“ NO DATA FOUND”消息ge来澄清故障,以便进行简单的测试分析。