【发布时间】:2012-01-29 12:31:36
【问题描述】:
如果一个TestCase(类)失败了,为什么TestNG还要继续执行测试?
例如测试输出为:
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
}
}
【问题讨论】:
-
因为我会假设如果一个测试类失败了,那么测试环境已经损坏并且应该停止进一步的测试,而不是套件,但至少是当前的测试。
-
哦。我不会假设,我所知道的任何测试运行程序也不会,除非您明确告诉运行程序在第一个错误处停止。不过,您似乎只想对特定套件执行此操作,因为单个测试失败是完全合法的,例如,更改破坏了测试。
-
哇,好吧。所以我的测试就像 test1 打开 url,test2 将数据输入表单......如果 test1 失败,则不需要 test2。在不停止整个套件的情况下,我如何才能停止测试当前测试?
-
TestNG 是否能保证所有测试用例都按“正确”的顺序依次运行?这对我来说似乎有些牵强,但是由于我设计了我的测试用例以使它们彼此独立,所以我并没有真正查过。
-
总是按照测试在 XML 中输入的顺序,如果你想随机:
标签: java maven selenium testng