我有一个包含多个@Test方法的类,每个方法都有不同的功能。
class myTests
{
@Test
test1()
{
...............
}
@Test
test2()
{
...............
}
}
遵循数据驱动方法,我在Excel中拥有数据。 excel表中的每一行对应一个不同的测试用例,该测试用例应执行上述类中的测试方法。
以下是excel表中的示例数据,其中包含方法名称作为参数之一(例如:test1,test2),还有一个标志,用于确定是否应在运行时拾取案例以供执行(例如: Y,N)
case1 data1 data2 data3........test1 y
case2 data4 data5 data6........test1 y
case3 data7 data8 data9........test2 y
case4 data10 data11 data12........test1 n
以下是我的问题:
我的理解是使用DataProvider注释,测试方法可以使用不同的输入数据运行。但是如果单个类中有多个测试方法,我不确定如何将测试方法与相应的测试数据进行映射。
此外,我尝试寻找可用于改变测试方法的运行时行为的IAnnotationTransformer,但无法找到将标记数据从excel发送到变换器类的方法。
提前致谢..
答案 0 :(得分:0)
如何做到这一点,你可以做些什么,但它需要你身边的很多自定义。 TestNG中没有任何东西可以为您提供开箱即用的这种功能。
IAnnotationTransformer
对你没用,因为这个监听器只考虑方法而不知道实例。它也可以在任何运行之前运行,并且没有办法让你可以进行这种迭代。所以这可以排除。
您最好的选择是使用@Factory
和@DataProvider
,其中@Factory
将生成 ONLY 您的测试类的一个实例和所有测试方法必须强制性地成为同一测试类的一部分。
以下是这个想法:
IHookable
接口,以便您可以决定运行哪种测试方法以及可以跳过哪种测试方法。以下是一个展示其中一些内容的示例。
import org.testng.IHookCallBack;
import org.testng.IHookable;
import org.testng.ITestResult;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;
import org.testng.annotations.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TestclassSample implements IHookable {
private List<String> methodsToRun = new ArrayList<>();
@Factory(dataProvider = "dp")
public TestclassSample(List<String> methodsToRun) {
this.methodsToRun = methodsToRun;
}
@Override
public void run(IHookCallBack callBack, ITestResult testResult) {
String testMethodName = testResult.getMethod().getMethodName();
if (methodsToRun.contains(testMethodName)) {
System.err.println("About to run " + testResult.getMethod().getMethodName());
callBack.runTestMethod(testResult);
} else {
testResult.setStatus(ITestResult.SKIP);
}
}
@Test
public void testMethod() {
System.err.println("testMethod()");
}
@Test
public void anotherTestMethod() {
System.err.println("anotherTestMethod()");
}
@Test
public void thirdTestMethod() {
System.err.println("thirdTestMethod()");
}
@DataProvider(name = "dp")
public static Object[][] getData() {
return new Object[][]{
{Arrays.asList("testMethod", "thirdTestMethod")}
};
}
}
这是输出:
About to run testMethod
testMethod()
About to run thirdTestMethod
thirdTestMethod()
Test ignored.
===============================================
Default Suite
Total tests run: 3, Failures: 0, Skips: 1
===============================================