如何确保@Test方法始终在任何其他类别,套件或组之前运行?

时间:2012-03-15 18:43:25

标签: automated-tests testng

我对TestNG文档的阅读表明,如果我有一个标记为这样的测试方法:

  @BeforeSuite(alwaysRun = true)
  @Test
  public void MyTestMethod { ... }

然后MyTestMethod将在任何地方定义的任何其他测试之前运行,无论是类,套件还是组。但情况似乎并非如此。

有没有办法让测试方法在其他一切之前无条件地运行? (如果失败,则不会运行其他测试。)

修改

测试类:

class Suite_Setup
extends BaseTestSuite
{
  @BeforeSuite(alwaysRun = true)
  def setup() {
    System.out.println("Conducting test suite setup...")

    // Verify that the internal API is configured properly and that the API host is available...
    new Action(ApiHostname, new BasicCookieStore)
  }
}

修改

答案:

我们自动生成自己的TestNG.xml文件,并且未包含@BeforeSuite方法。一旦包含它,@BeforeSuite就会产生预期效果。

但是,似乎@BeforeSuite(可能还有其他@Before...@After...注释)可能@Test混合使用比禁止执行带注释的方法,它们使它不止一次运行

另外,我没有说明我正在使用哪个版本的TestNG。这是6.2。

5 个答案:

答案 0 :(得分:4)

尝试在类级别或方法级别使用组。

在我的情况下,我有一组需要在所有事情之前运行的冒烟测试,如果其中任何一个失败,则不应运行其他测试。

@Test(groups="smoke")
public class SmokeTests {
    public void test1 {
        //
    }
    ...
}

所有其他测试类都是:

@Test(dependsOnGroups = "smoke")
public class OtherTests {
    public void test1 {
        //
    }
    ...
}

答案 1 :(得分:2)

我认为答案是

  1. 将配置方法与测试方法分开,
  2. 使用@BeforeSuite作为套件中所有测试的执行方法(例如获取EntityManager)
  3. 使用dependsOnMethods来决定测试的运行顺序
  4. 在以下示例中,testRemove将在testInsert,testReadAll和testUpdate运行之后运行。 testReadAll将在testInsert运行后运行。 testUpdate将在testInsert运行后运行。 请注意,testReadAll和testUpdate之间没有依赖关系。

    @Test
    public void testInsert() 
    {..}
    
    @Test(dependsOnMethods={"testInsert"})
    public void testUpdate() 
    {..}
    
    @Test(dependsOnMethods={"testInsert"})`
    public void testReadAll()`
    {..}
    
    @Test(dependsOnMethods={"testInsert", "testUpdate", "testReadAll"})`
    public void testRemove()`
    {..}
    

答案 2 :(得分:1)

@Test(alwaysRun = True)

使测试始终运行,无论它依赖的方法或组,甚至它都失败

答案 3 :(得分:0)

删除@Test,方法不能同时是配置和测试方法。

答案 4 :(得分:0)

  

有没有办法标记测试方法,以便无条件地在其他所有方法之前运行?

尝试为目标测试分配最低优先级值。

@Test(priority = -2147483648)
public void myTest() {
    ...
}

您可以阅读有关TestNG测试优先级超过there的更多信息。

  

如果失败,则不会运行其他测试。

您需要使用以下选项之一根据此测试方法进行其他测试:

如果您将使用其中一个依赖项选项,则无需为第一个方法提供优先级。