【问题标题】:merge multiple data providers in single in TestNG在TestNG中合并多个数据提供者
【发布时间】:2015-06-04 18:19:18
【问题描述】:

我正在使用 TestNG 框架开发 Selenium。我有多个数据提供者,我想合并它们并发送测试。这些是我创建的数据提供者

@DataProvider(name = "Sample1")     
public Object[][] createData1() {           
Object[][] retObjArr= ExcelUtils.getTableArray  ("Test\\resources\\data\\Testdata.xls","test1", "selector1");      
 return(retObjArr);     }           

@DataProvider(name = "Sample2")     
public Object[][] createData2() {           
Object[][] retObjArr= ExcelUtils.getTableArray ("Test\\resources\\data\\Testdata.xls","test2", "selector2");            return(retObjArr);  
}

【问题讨论】:

    标签: selenium selenium-webdriver testng


    【解决方案1】:

    您可以有一个名为 createData 的方法,您可以将 Method 作为参数传递给它,这应该告诉您哪个测试方法从哪个文件中获取哪些数据。在某处维护测试方法到测试数据文件的映射。让我知道这是否有帮助。 示例代码:

    import java.lang.reflect.Method;
    
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    
    public class TestClass {
    
        @DataProvider(name="dp")
        public Object[][] dp(Method method)
        {
            if(method.getName().equalsIgnoreCase("test1"))
                return new Object[][]{{"dp1"}};
            else if(method.getName().equalsIgnoreCase("test2"))
                return new Object[][]{{"dp2"}};
            else
                return new Object[][]{{"default"}};
        }
    
        @Test(dataProvider="dp")
        public void test1(String str)
        {
            System.out.println(str);
        }
    
        @Test(dataProvider="dp")
        public void test2(String str)
        {
            System.out.println(str);
        }
    
    
    }
    

    输出:

    dp1
    dp2
    PASSED: test1("dp1")
    PASSED: test2("dp2")
    
    ===============================================
        Default test
        Tests run: 2, Failures: 0, Skips: 0
    ===============================================
    
    
    ===============================================
    Default suite
    Total tests run: 2, Failures: 0, Skips: 0
    ===============================================
    

    编辑:添加示例代码。

    【讨论】:

    • Hi Mrunal.. 感谢您的回复.. 能否请您举例说明一下。
    • @ShwetaKhandewalePathak 我添加了一个示例工作代码。请仔细检查一下,如果这有帮助,请告诉我。
    • @halfer 我可以知道这个 cmets 需要修复什么吗?
    • 对不起..我会从下次开始记下它..编辑后的帖子有适当的修复。
    【解决方案2】:

    Mrunal 正在谈论这样的事情,

     @DataProvider(name="getDataFromFile")
    public static Iterator<Object[]> getDataFromFile(Method testMethod) throws Exception
    {   
        String expected=null;
        String webServicename=testMethod.getDeclaringClass().getSimpleName();
        Reporter.log("Providing data for web service " + webServicename,true);
        // Read from a map what all data you should send from what what xls files
    // create the dataset here
    
    //send the test data to the test method
    }
    

    你的测试方法应该是这样的

    @Test(dataProvider="getDataFromFile",dataProviderClass=utility.TestDataController.class)
        public void runTest(<whateverdataprovider returns in a row> data) throws Exception {
    // use data
    }
    

    所以本质上,您从两个文件发送数据,但从一个数据提供者发送。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      相关资源
      最近更新 更多