问题描述
我们希望针对一组数据值分别运行一些测试,验证每个测试的条件是否相同.数据当前存储在平面文件或简单的 Excel 电子表格中.
我的第一个想法是创建一个 TestNG DataProvider,它会从文件中加载数据,并用于为每个数据值调用一次测试方法.我的问题是不同的测试需要从不同的文件加载数据,并且似乎没有任何方法可以将参数发送到 DataProvider.有人知道这是否可行吗?
理想情况下,我希望我的代码如下所示(简化示例):
public class OddTest { @DataProvider(name = "excelLoader") public Iterator<Object[]> loadExcelData(String fileName) { ... } @Test(dataProvider = "excelLoader" dataProviderParameters = { "data.xls" }) public void checkIsOddWorks(int num) assertTrue(isOdd(num)); } }
推荐答案
取自 TestNG 文档:
如果您将@DataProvider 声明为将 java.lang.reflect.Method 作为第一个参数,TestNG 将传递此第一个参数的当前测试方法.当多个测试方法使用相同的 @DataProvider 并且您希望它根据它提供数据的测试方法返回不同的值时,这特别有用.
例如,以下代码在其@DataProvider 中打印测试方法的名称:
@DataProvider(name = "dp") public Object[][] createData(Method m) { System.out.println(m.getName()); // print test method name return new Object[][] { new Object[] { "Cedric" }}; } @Test(dataProvider = "dp") public void test1(String s) { } @Test(dataProvider = "dp") public void test2(String s) { }
因此会显示:
test1 test2
这也可以结合desolat提供的解决方案,根据上下文判断数据,相应的方法:
@DataProvider(name = "dp") public Object[][] foodp(ITestContext ctx, Method method) { // ... }
相关问答
testng:@test的多个@dataprovider
TestNG与DataProvider并行执行
testNg忽略了使用dataProvider的参数化测试 | Maven | IntelliJ
在testng中使用DataProvider从文件中读取数据
使用DataProvider执行并行Testng Selenium测试的司机行为
Jenkins将参数传递给testNG Java
是否可以向CSS类传递参数?
什么';TestNG中DataProvider和Factory的区别是什么?
TFS和TestNG是否可以在TFS2015内执行TestNG测试?
从 DataProvider 输入动态设置 TestNG 测试名称,如 HTML 报告中所示?