有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java TestNG:@BeforeGroups为每个组条目调用,即使我正在运行一组测试

我在testNG测试中发现了一个问题,测试如下

public class testNG {

    @BeforeGroups(groups = {"smoketests", "functionaltests"})
    public void before() {
        System.out.println("Before Groups");
    }

    @Test(groups = {"smoketests", "functionaltests"})
    public void test() {
        System.out.println("Test");
    }

    @AfterGroups(groups = {"smoketests", "functionaltests"})
    public void after() {
        System.out.println("After Groups");
    }

}

当我从testNG命令行运行测试时

java-cp:libs/*org。testng。testNGLib-testngs。jar测试

(假设测试jar位于某个libs文件夹中)

我得到的结果如下

Before Groups
Before Groups
Test
After Groups

我不知道为什么BeforeGroups会被调用两次,尽管我只对运行作为smoketests组一部分的测试感兴趣

如果@Test指令中只有smoketests组,则不会出现问题,但我仍然不理解@BeforeGroups中存在多个组的问题


共 (2) 个答案

  1. # 1 楼答案

    运行测试套件时遇到相同问题

    <suite name="Test Suite">
        <test name="GroupTest">
              <groups>
                  <run>
                    <include name="sanity"/>
                  </run>
              </groups>
              <classes>
                  <class name="SampleTest"/>
              </classes>
        </test>
    </suite>
    

    以下是测试等级:

    public class SampleTest {
    
        @BeforeGroups(groups = {"sanity","regression"})
        void beforeGroup(){
            System.out.println("Before Group");
        }
    
        @AfterGroups(groups = {"sanity","regression"})
        void afterGroups(){
            System.out.println("After Groups");
        }
    
        @Test(groups = {"sanity"})
        void m1(){
            System.out.println("m1");
        }
    
        @Test(groups = {"sanity","regression"})
        void m3(){
            System.out.println("m3");
        }
        @Test(groups = {"sanity"})
        void m4(){
            System.out.println("m4");
        }
        @Test(groups = {"regression"})
        void m5(){
            System.out.println("m5");
        }
        @Test
        void m6(){
            System.out.println(Sample.class.getName());
        }
    }   
    

    所以当我运行testng时。xml,获得以下结果:

    Before Group
    m1
    Before Group
    m3
    After Groups
    m4
    After Groups
    

    以下是将组名更改为“回归”后的结果

    Before Group
    m3
    After Groups
    m5
    After Groups
    

    对这两个组条目执行@BefroreGroups和@Aftergroups。使用TestNG 6.11版本

  2. # 2 楼答案

    试用

    @BeforeSuite(alwaysRun = true)而不是@BeforeGroups(groups = {"smoketests", "functionaltests"})

    @AfterSuite(alwaysRun = true)而不是@AfterGroups(groups = {"smoketests", "functionaltests"})