我们希望针对一组数据运行我们的一些测试,验证每个测试的条件是否相同.数据当前存储在平面文件或简单的Excel电子表格中.
我的第一个想法是创建一个TestNG DataProvider,它将从文件加载数据,并用于为每个数据值调用一次测试方法.我的问题是不同的测试需要从不同的文件加载数据,似乎没有任何方法可以将参数发送到DataProvider. 有谁知道这是否可能?
理想情况下,我希望我的代码看起来像以下(简化示例):
public class OddTest { @DataProvider(name = "excelLoader") public Iterator
desolat.. 17
您可以使用TestNG的依赖注入功能访问DataProvider中的所有已定义参数.这是一些需要"test_param"参数的DataProvider示例:
@DataProvider(name = "usesParameter") public Object[][] provideTestParam(ITestContext context) { String testParam = context.getCurrentXmlTest().getParameter("test_param"); return new Object[][] {{ testParam }}; }
这需要在您中定义"test_param" suite.xml
:
...
有关ITestContext类的详细信息,请参阅TestNG JavaDoc.
您可以使用TestNG的依赖注入功能访问DataProvider中的所有已定义参数.这是一些需要"test_param"参数的DataProvider示例:
@DataProvider(name = "usesParameter") public Object[][] provideTestParam(ITestContext context) { String testParam = context.getCurrentXmlTest().getParameter("test_param"); return new Object[][] {{ testParam }}; }
这需要在您中定义"test_param" suite.xml
:
...
有关ITestContext类的详细信息,请参阅TestNG JavaDoc.
取自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) { // ... }