如果一个TestCase(类)失败了,为什么TestNG继续执行测试?
例如,testoutput是:
1 test passed, 1 test failed.(3599,0 s)
TestSuite FAILED
run FAILED: check5=3 Expected: <3> got: <5>
run passed (1.0s) // <--- this should not have been executed
为什么还要执行第二次运行?我的testngsuite.xml:
<suite name="TestSuite_03">
<test name="TestCase_17">
<groups>
<run><include name="functest"/></run>
</groups>
<classes>
<class name="TestStep_003" desc="will fail" />
<class name="TestStep_012" desc="will pass" />
</classes> ...
我正在通过NetBeans使用Maven,TestNG和Java
我的结构:
public abstract class TestCommon
{
@BeforeSuite(groups={"functest})
public void BeforeSuite()
{
// clean report folder
}
@BeforeTest(groups={"functest})
public void BeforeTest()
{
// start selenium browser
}
@AfterMethod(groups={"functest})
public void AfterMethod()
{
// check for failure and capture screenshot
}
@AfterTest(groups={"functest})
public void AfterTest()
{
// close browser
}
}
public class TestStep_003 extends TestCommon
{
@Test(groups = {functest})
public void run()
{
assertThat(5, Matchers.equalTo(3)); // will fail
}
}
public class TestStep_012 extends TestCommon
{
@Test(groups = {functest})
public void run()
{
assertThat(5, Matchers.equalTo(5)); // will pass
}
}
您应该将测试用例设计为独立的,因为模块化会降低复杂性:如果测试是从属的,如果最后一个失败,则始终需要运行所有测试用例,并且需要检查所有测试用例是否可能导致了错误/失败。
使用独立测试,您可以运行所有这些,例如在夜间构建期间,即使其中一些失败。或单独执行一个特定的程序。而且您不必担心测试的顺序。这就是为什么几乎所有测试跑步者都执行所有测试并且不保证其订单的原因。
这尤其适用于单元测试。对于一些集成测试和验收测试,某些依赖性可能是可以接受的。在这种情况下,请使用TestNG's dependency feature。