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

时间:2016-08-05 18:56:34

标签: java testng

我在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.TestNG -testjar libs / testNGLib.jar -groups smoketests

(假设测试jar在某些libs文件夹中)

我得到的输出如下

Before Groups
Before Groups
Test
After Groups

我不确定为什么BeforeGroups被调用两次,即使我只对运行冒险测试组的测试感兴趣。

如果我在@Test指令中只有smoketests组,那么问题就不会发生,但我仍然不理解@BeforeGroups有多个组的问题。

2 个答案:

答案 0 :(得分:0)

运行测试套件时遇到同样的问题。

<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
m2
Before Group
m3
After Groups
m4
After Groups

以下是我将群组名称更改为回归的结果。

Before Group
m3
After Groups
m5
After Groups

@BefroreGroups和@Aftergroups将同时执行两个组条目。使用TestNG 6.11版本。

答案 1 :(得分:0)

尝试使用

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

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