当前位置 : 主页 > 网络安全 > 测试自动化 >

如果这是两个组的成员,是否可以将条件放入TestNG来运行测试?

来源:互联网 收集:自由互联 发布时间:2021-06-19
我知道你可以在你的xml中定义你想要运行的组,但我想知道是否可以说如果它们都是A组和A组的成员就运行这些方法. B. 假设我有以下测试用例; @Test(groups={"A","B"})public testA() {}@Test(groups=
我知道你可以在你的xml中定义你想要运行的组,但我想知道是否可以说如果它们都是A组和A组的成员就运行这些方法. B.

假设我有以下测试用例;

@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;
    }
}
网友评论