无法从测试组中读取TestNG类组

时间:2018-06-18 14:42:24

标签: testng

我有以下代码来读取用于报告目的的测试用例组:

public void MethodSetup(ITestContext context, Method testMethod) {
        log.info("CLEAR_OUTPUT");
        Test t = testMethod.getAnnotation(Test.class);
        testCaseGroups = t.groups();
        // log.info(t.groups()[0]);//or however you want to use it.
}

当我在

等测试用例上设置组时,这非常有效
@Test(Groups = "G1")
public void testCase1()
{}

但是当我在类级别定义组时它不起作用,并抛出nullpointer。

@Test(Groups="G1")
public class SampleClassTest
{

@Test(Groups = "G3")
public void testCase1()
{
}
}

我试图搜索谷歌但找不到任何解决方法。任何人都可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

您是否在该测试类中没有@Test注释的其他方法?
如果是这样,那么当您使用@Test注释标记类时,只有该类具有注释,不是它的方法
所以,如果你有这样的测试类

@Test(groups="G1")
class TestClass {

     // this test method has no annotation, 
     // but it will run by TestNG because it is public
     // and the class has @Test annotation
     public void testMethod1(){...}

     // this test method would have its own @Test annotation
     @Test(groups="G2")
     public void testMethod2(){...}
}

然后,MethodSetup会在testMethod1通过时抛出异常。

<强>编辑:
在获得没有@Test注释的方法的情况下,您可以检索类级别@Test注释并获取它的组。

答案 1 :(得分:0)

这可以在基类或测试用例类中使用。我将基类扩展到所有测试用例类,并且可以正常工作。我在基类中使用了此方法。

@BeforeClass(alwaysRun=true)
    public void findClassgoup()
    {
        Test classTest = this.getClass().getAnnotation(Test.class);
        if(null != classTest)
        {
        classLevelGroups= classTest.groups();
        log.info("Classlevel group size : " + classLevelGroups.length);
        }
        if(null == classTest)
        {
            log.info("Test annotation on class retunred null");
        }
    }