我知道你可以在你的xml中定义你想要运行的组,但我想知道是否可以说如果它们都是A组和A组的成员就运行这些方法. B. 假设我有以下测试用例; @Test(groups={"A","B"})public testA() {}@Test(groups=
假设我有以下测试用例;
@Test(groups={"A","B"}) public testA() {} @Test(groups={"B","C"}) public testB(){}
以及配置;
<test name="Test A|B"> <groups> <run> <include name="B" /> </run> </groups> <classes> <class name="com.test.Test" /> </classes> </test>
这将同时运行testA和testB,因为它们都是B组的成员.我想只有当它是A组和A组的成员时才运行测试. B.
是否可以使用TestNG做这样的事情?
提前致谢
您可以创建一个实现IMethodInterceptor接口的侦听器.这将使您能够从@Test访问组列表,并根据需要管理“测试执行列表”.同时,ITestContext参数允许您从testNg xml访问数据.因此,您可以将组设置为以默认的testNg方式运行(套件xml文件);但根据您实施的算法运行它们.就像是:
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.testng.IMethodInstance; import org.testng.IMethodInterceptor; import org.testng.ITestContext; import org.testng.annotations.Test; public class Interceptor implements IMethodInterceptor { @Override public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) { int methCount = methods.size(); List<IMethodInstance> result = new ArrayList<IMethodInstance>(); for (int i = 0; i < methCount; i++) { IMethodInstance instns = methods.get(i); List<String> grps = Arrays.asList(instns.getMethod().getConstructorOrMethod().getMethod().getAnnotation(Test.class).groups()); //get these groups from testng.xml via context method parameter if (grps.contains("A") && grps.contains("B")) { result.add(instns); } } return result; } }