TestNG:@BeforeClass 方法失败时会跳过所有后续测试类?
Posted
技术标签:
【中文标题】TestNG:@BeforeClass 方法失败时会跳过所有后续测试类?【英文标题】:TestNG: All subsequent Test classes are skipped when @BeforeClass method fails? 【发布时间】:2015-10-07 05:18:08 【问题描述】:我的设置:
一个TestBase 类,包含一个@BeforeClass 方法 几个测试类从 TestBase 类扩展并且还包含一个 @BeforeClass 方法 testNG 6.8.8为什么要这样设置?:
我需要 TestBase 类中的 @BeforeClass 来提供所有测试类都需要的设置,我不想在每个测试类中重复。例如依赖于线程 ID 的登录凭据。 TestBase 类还实例化 Selenium WebDriver 我需要测试类中的@BeforeClass 来初始化所有@Test 方法需要使用但只需要(或必须)为所有测试构建/调用一次的所有内容。这包括对所述 WebDriver 实例的调用(这就是“普通”构造函数在这里不起作用的原因)发生了什么:
当我通过 testNG xml 文件运行测试并且其中一个测试类的@BeforeClass 方法中存在异常时,TestNG 会跳过所有后续测试类。
为什么会这样?如何预防?
例如,当我将 TestBase 类中的注释更改为 @BeforeSuite 时,所有测试都会运行,即使 @BeforeClass 中有异常也是如此方法。
示例:
运行 xml 文件时,会跳过完整的 RunAllTestClasses02 类。
testNG xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<suite name = "MiscSuite">
<test name = "MiscTest">
<classes >
<class name="drkthng.misc.RunAllTestClasses01" />
<class name="drkthng.misc.RunAllTestClasses02" />
</classes>
</test>
</suite>
带有@BeforeClass 方法的TestBase 类:
public abstract class RunAllTestClassesBase
@BeforeClass
public void beforeClass()
// do something that all Test classes will need
在@BeforeClass 方法中抛出异常的测试类:
public class RunAllTestClasses01 extends RunAllTestClassesBase
@BeforeClass
public void beforeClass()
Assert.assertTrue(false);
@Test
public void Test01()
Assert.assertTrue(true);
【问题讨论】:
也许this 回答会有所帮助 @ErkiM。谢啦!这肯定会带来一些启示。还有一个问题,为什么所有后续的测试都被跳过了,只是因为一个!课程失败。 我相信这是设计使然,因为您的测试取决于@BeforeClass
的结果并且它失败了,因此执行被停止。为了解决这个问题,你可以用 alwaysRun
注释你的测试,docs :alwaysRun If set to true, this test method will always be run even if it depends on a method that failed.
我自己没有测试过,让我知道它对你来说是如何工作的。
我想测试中的错误 - 似乎已在 6.9.5 中修复:github.com/cbeust/testng/issues/471
@niharika_neo 非常感谢!!!这解决了整个问题!你不会把这个作为答案吗?因为这就是关于我更新的问题(testng 版本号 6.8.8)的内容 - 否则我必须自己做这件事,你不会得到全部功劳;-)
【参考方案1】:
这是 Testng 中的一个错误。在 6.9.5 中解决。请升级。
【讨论】:
不幸的是,该错误尚未完全解决 -> 如果孩子有 \@beforeClass 并且父类有 \@beforeClass,则当一个孩子在其自己的 \@beforeClass 方法期间失败时跳过孩子的问题仍然存在和 \@afterClass。 这里也一样 - 升级并没有为我解决问题。切换到@BeforeSuite
和@AfterSuite
确实如此。
即使在 6.11 上仍然可以看到该错误【参考方案2】:
尝试添加@AfterClass(alwaysrun = true)
或/和@AfterMethod(alwaysrun=true)
,因为默认情况下,如果未完成 BeforeClass 或 BeforeMethod,则会跳过它们。
有关 testNG 配置失败、策略和 alwaysRun 的文档解释了配置失败是否/何时导致侦听器方法(alwaysRun
和其他侦听器)被跳过、失败策略和最佳实践。
【讨论】:
以上是关于TestNG:@BeforeClass 方法失败时会跳过所有后续测试类?的主要内容,如果未能解决你的问题,请参考以下文章
TestNG中BeforeClass和BeforeTest的区别