我如何使用 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>
还要确保该方法在 运行 通常
时产生结果
我正在尝试在开始测试时设置组名,我想如果 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>
还要确保该方法在 运行 通常
时产生结果