我如何使用 testng IAnnotationTransformer?

How can i use testng IAnnotationTransformer?

我正在尝试在开始测试时设置组名,我想如果 testNg 组注释仅 BS 运行 firefox 测试。

我使用了这个 IAnnotationTransformer,但它不起作用。也许我有一个错误,但我不明白。你能帮助我吗?顺便说一句,我正在使用 BDD,当我 运行 我的测试时,它没有进入 MyTransformer class。这些是我的代码;

Testng.xml

<suite name="Suite" data-provider-thread-count="8"
       thread-count="1" parallel="tests">
    <listeners>
        <listener
                class-name="com.demo.listeners.TestNGListener"/>
        <listener
                class-name="com.demo.listeners.MyTransformer"/>
    </listeners>
    <test name="Firefox">
        <parameter name="browser" value="firefox"></parameter>
        <groups>
            <run>
                <include name="bs"/>
            </run>
        </groups>

        <classes>
            <class
                    name="com.demo.runner"/>
        </classes>
    </test>
    <test name="Chrome">
        <parameter name="browser" value="chrome"/>
        <groups>
            <run>
                <include name="zalenium"/>
            </run>
        </groups>

        <classes>-->
            <class-->
            name="com.demo.runner"/>
        </classes>
    </test>
</suite>

还有我的变压器class

package com.demo.listeners;

import org.testng.annotations.ITestAnnotation;
import org.testng.internal.annotations.IAnnotationTransformer;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class MyTransformer implements IAnnotationTransformer {


    @Override
    public void transform(ITestAnnotation iTestAnnotation, Class aClass, Constructor constructor, Method method) {
        System.out.println("demo");
        String[] a = new String[]{"bs"};
        String[] b = new String[]{"zalenium"};
        if (iTestAnnotation.getTestName().equals("firefox"))
            iTestAnnotation.setGroups(b);
        else
            iTestAnnotation.setGroups(a);
    }
}

下面的代码是在获取之前在方法 FirstTestNGFileTest 上设置的打印组

  package YourPackage;
   import java.lang.reflect.Constructor;
   import java.lang.reflect.Method;
     import org.testng.annotations.CustomAttribute;
    import org.testng.IAnnotationTransformer;
    import org.testng.annotations.ITestAnnotation;
    
    public class YourClass implements IAnnotationTransformer {
    
        @Override
            public void transform(ITestAnnotation annotation, Class testClass,
                    Constructor testConstructor, Method testMethod) {  
                     
                if (testMethod.getName()=="FirstTestNGFileTest") {
                      String grps[]= new String[] { "regression" };     
                      annotation.setGroups(grps);
                    System.out.println("groups..."+ Arrays.toString(annotation.getGroups()));
               
                 //prints groups...[regression]
         
                } 
    }

在 testng.xml 文件中,提到这个

<listeners>

      <listener class-name = "YourgPackage.YourClass" />
   </listeners>

还要确保该方法在 运行 通常

时产生结果