【问题标题】:TestNG continues to execute testclasses even though a previous class failed即使前一个类失败,TestNG 仍继续执行测试类
【发布时间】: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


【解决方案1】:

你应该将你的测试用例设计成独立的,因为模块化降低了复杂性:如果测试是依赖的,如果最后一个测试用例失败了,你总是需要运行所有的测试用例,并且需要检查所有测试用例测试用例是否可能导致错误/失败。

使用独立测试,您可以运行所有测试,例如在夜间构建期间,即使其中一些失败。或者单独执行一个特定的。而且您不必担心测试的顺序。这就是为什么几乎所有的测试运行者都会执行所有的测试并且不保证他们的顺序。

这尤其适用于单元测试。对于一些集成测试和验收测试,一些依赖性可能是可以接受的。在这种情况下,请使用TestNG's dependency feature

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 2019-04-14
  • 2018-04-01
相关资源
最近更新 更多