【问题标题】:How to pass the parameter from dataprovider excel sheet to Test method如何将参数从 dataprovider excel 表传递到测试方法
【发布时间】:2016-07-18 18:18:26
【问题描述】:

我正在尝试使用带有哈希映射的数据提供程序从 excel 表中获取值。现在我可以从 excel 表中读取整行。excel 表有 3 列“TestcaseId”、“Testdata”、“scriptname” .这里我需要将脚本名称作为参数传递给数据提供者的测试方法。请帮助我如何实现这一点。下面是使用hashmap的数据提供者代码

@DataProvider(name="cbndataprovider")
    public static Iterator<Object[]> cbntestdata() throws IOException
    {
        List <Object[]> alist = new ArrayList<Object[]>();
        OriginalExcelRW Excel = new OriginalExcelRW("F:\\anand_acer\\selenium\\cbnindia1\\Test_Data_Sheet.xlsx");
        XSSFSheet s = Excel.Setsheet("Test_Data");
        int rowcount = s.getLastRowNum();
        for(int i =1;i<=rowcount;i++)
        {
        Object[] obj = new Object[1];

        Map<String,String>hm=new HashMap<String,String>();

        hm.put(Excel.Readvalue(s, 0, 0), Excel.Readvalue(s, i, 0));
        hm.put(Excel.Readvalue(s, 0, 1), Excel.Readvalue(s, i, 1));
        hm.put(Excel.Readvalue(s, 0, 2), Excel.Readvalue(s, i, 2));
        hm.put(Excel.Readvalue(s, 0, 3), Excel.Readvalue(s, i, 3));

        System.out.println(Excel.Readvalue(s, 0, 0)+"...."+ Excel.Readvalue(s, i, 0));
        System.out.println(Excel.Readvalue(s, 0, 1)+"...."+ Excel.Readvalue(s, i, 1));
        System.out.println(Excel.Readvalue(s, 0, 2)+"...."+ Excel.Readvalue(s, i, 2));
        System.out.println(Excel.Readvalue(s, 0, 3)+"...."+ Excel.Readvalue(s, i, 3));

        obj[0]=hm;
        alist.add(obj);

        }
        return alist.iterator();
        }
    }

【问题讨论】:

  • 你指的是什么脚本名称?您想将 3 列 + 脚本名称传递给您的测试方法吗?
  • 我将从数据提供者传递所有 3 列,但行选择将基于我从数据提供者传递给测试方法的脚本名完成,并且脚本名列包含在 3列。测试方法应该只接受 scriptname 参数。
  • 如果以下答案回答了您的问题,请将问题标记为已回答

标签: java selenium-webdriver hashmap testng-dataprovider


【解决方案1】:

您可以将测试上下文传递给您的数据提供者方法。这将由 TestNG 在内部完成。从测试上下文中,您可以查询调用它的测试的名称。

将数据提供者的签名更改为

public static Iterator<Object[]> cbntestdata(ITestNGMethod testContext) throws IOException
{
String testName = testContext.getMethodName();

//your regular logic

}

使用从testContext获取的名称从excel中获取数据。

【讨论】:

  • 我怎样才能通过这个在测试方法中。这就是我的测试方法看起来像@Test(groups={"Regression"},dataProvider="cbndataprovider",dataProviderClass=dataprovider.cbn_DataProvider。 class,priority=1,enabled = true) public void GB01_cbn_SearchNoRecords(Maphm) {/*body*/}
  • 您只能通过在地图中添加测试名称并在测试方法中从地图中检索测试名称来做到这一点
【解决方案2】:

如果我理解正确,您的 Excel 有一个与 Script/ClassName 对应的数据,并且您需要某种机制,您的测试可以通过该机制直接识别正在运行的测试并获取与其对应的数据。 您可以通过一个简单的机制来实现这一点: 假设您的 ClassName 是 ABC.java。 根据您的 excel 表,在名称“脚本名称”列下,您可以添加一行:ABC 现在,在你的类 ABC.java 中,在做任何事情之前调用函数

getClass().getSimpleName()

并将其链接以阅读您的 Excel。 这反过来将读取与匹配类名的“Scriptname”行相对应的“Testdata”。

【讨论】:

    猜你喜欢
    • 2015-07-08
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 2011-03-25
    相关资源
    最近更新 更多