如果它是两个组的成员,是否可以为TestNG运行测试?

我知道你可以在你的xml中定义你想要运行的组,但我想知道如果它们都是组A和B的成员,是否可以说运行这些方法。

假设我有以下测试用例;

@Test(groups={"A","B"}) public testA() {} @Test(groups={"B","C"}) public testB(){} 

以及配置;

           

这将同时运行testA和testB,因为它们都是B组的成员。我想只在它是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 intercept(List methods, ITestContext context) { int methCount = methods.size(); List result = new ArrayList(); for (int i = 0; i < methCount; i++) { IMethodInstance instns = methods.get(i); List 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; } } 

您可以使用TestNG beanshell支持执行此操作: http ://testng.org/doc/documentation-main.html#beanshell(您可以访问method,testngMethod和groups)

在您的特定情况下,它将是这样的:

      

如果你想调试东西,你也可以做一个System.out.println()。

这里的问题是您需要在“测试”块中定义“方法选择器”。 出于某种原因,如果在“套件”中定义“方法选择器”(在语法上是正确的),则不应用filter。

使用System.out.println()进行调试将帮助您了解这些内容是否运行,或者它过滤的方法,例如:

      

你试过这个吗?

            

如果这不起作用,你可以通过在你的类中使用3个测试方法(打开保留顺序)来“破解”它并且让前2个测试在条件上设置标志,然后第3个测试仅在两个条件都已设定。