如果一个TestCase(Class)失败,为什么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
}
}
答案 0 :(得分:5)
您应该将测试用例设计为独立的,因为模块化会降低复杂性:如果测试依赖,如果最后一个测试用例失败,则需要运行所有测试用例,并且需要检查所有测试用例测试用例是否可能导致错误/失败。
使用独立测试,您可以运行所有这些测试,例如在夜间建造期间,即使其中一些失败。或者单独执行特定的一个。而且您无需担心测试的顺序。这就是为什么几乎所有测试跑步者都执行所有测试并且不保证他们的订单。
这尤其适用于单元测试。对于一些集成测试和验收测试,可能会接受一些依赖性。在这种情况下,请使用TestNG's dependency feature。