Automated tests 如何确保@Test方法始终在任何其他方法之前运行,而不考虑类、套件或组?

Automated tests 如何确保@Test方法始终在任何其他方法之前运行,而不考虑类、套件或组?,automated-tests,testng,Automated Tests,Testng,我对TestNG文档的阅读表明,如果我有一个这样标记的测试方法: @BeforeSuite(alwaysRun = true) @Test public void MyTestMethod { ... } 然后,MyTestMethod将在任何地方定义的任何其他测试之前运行,而不考虑类、套件或组。但事实似乎并非如此 有没有一种方法可以使测试方法无条件地运行在所有其他方法之前?(如果失败,将不会运行其他测试。) 编辑: 测试类: class Suite_Setup extends B

我对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…
@Before…
注释)都可以与
@Test
混合使用,而不是抑制带注释方法的执行,它们会导致该方法多次运行


此外,我没有指出我正在使用哪个版本的TestNG,这是我的疏忽。它是6.2。

删除
@Test
,方法不能既是配置又是测试方法。

我认为答案是

  • 将配置方法与测试方法分开
  • 将@BeforeSuite用于在套件中的所有测试之前执行的方法(例如获取EntityManager)
  • 使用dependson方法确定测试的运行顺序
  • 在下面的示例中,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()`
    {..}
    

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

    在我的例子中,我有一组冒烟测试,需要在一切发生之前运行,如果其中任何一个失败,就不应该运行其他测试

    @Test(groups="smoke")
    public class SmokeTests {
        public void test1 {
            //
        }
        ...
    }
    
    所有其他有测试的课程包括:

    @Test(dependsOnGroups = "smoke")
    public class OtherTests {
        public void test1 {
            //
        }
        ...
    }
    
    @测试(始终运行=真)

    使测试始终运行,而不考虑它所依赖的方法或组,甚至测试失败

    有没有一种方法可以标记一个测试方法,这样它就可以无条件地运行在所有其他测试方法之前

    只需尝试将最低优先级值分配给目标测试

    @Test(priority = -2147483648)
    public void myTest() {
        ...
    }
    
    您可以阅读更多关于TestNG测试优先级的信息

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

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

    • 将一些组分配给第一个方法,并通过标记其他测试
    • 通过标记其他测试

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

    这似乎无法解决问题。我也尝试了@BeforeTest,但没有成功。好吧。。。这说明了什么?这不起作用。我有一个配置套件文件,其中包含多个测试节点,TestNG在另一个测试组中看不到从属组。您能否澄清一下,您是如何在TestNG.xml中包含BeforeSuite注释方法的?我需要并行运行多个类,并且需要使用BeforeSteuie注释运行setup方法