使用Groovy脚本进行数据驱动测试

时间:2017-07-05 13:50:45

标签: groovy

我使用以下代码将属性值从Excel文件设置为我的属性步骤,然后将其传递给测试用例。

当我运行Groovy代码时,excel的最后一个单元格中的值进入属性步骤。

请帮我正确设置属性。

import jxl.*

Workbook wb = Workbook.getWorkbook(new File("C:\\Users\\naraysa1\\Desktop\\Address_Doctor\\DataSource_Address_Validate\\Data_AddressValidate.xls"))
Sheet sh = wb.getSheet(0)
RowCount = sh.getRows();
ColumnCount = sh.getColumns();
for (i=1;i<RowCount;i++)
{
    for (j=0;j<ColumnCount;j++)
    {
        def c = sh.getCell(j, i).getContents();
        log.info c

        testRunner.testCase.getTestStepByName("Properties_Address").setPropertyValue("ID", c)
        testRunner.testCase.getTestStepByName("Properties_Address").setPropertyValue("AddressLine1", c)
        testRunner.testCase.getTestStepByName("Properties_Address").setPropertyValue("AddressLine2", c)
        testRunner.testCase.getTestStepByName("Properties_Address").setPropertyValue("AddressLine3", c)
        testRunner.testCase.getTestStepByName("Properties_Address").setPropertyValue("City", c)
        testRunner.testCase.getTestStepByName("Properties_Address").setPropertyValue("State ", c)
        testRunner.testCase.getTestStepByName("Properties_Address").setPropertyValue("PostalCode", c)
        testRunner.testCase.getTestStepByName("Properties_Address").setPropertyValue("Country", c)

        def TestStep =  testRunner.runTestStepByName("Search_Address")
    }
}    

1 个答案:

答案 0 :(得分:0)

在脚本中,您将excel的每个单元格中的值分配给所有属性,并为每个单元格执行teststep。

可能您希望将单元格值从一行映射到不同的属性,并为每一行执行测试。

定义以下地图

(您可以从excel表的零行初始化此地图)

def header=[
  0:'ID', //means put cell0 into property `ID`
  1:'AddressLine1',
  2:'AddressLine2',
  3:'AddressLine3',
  4:'City',
  ...
]

现在您的周期将如下:

for (i=1;i<RowCount;i++)
{
    for (j=0;j<ColumnCount;j++)
    {
        def pname = header[j]
        if(pname){
            def c = sh.getCell(j, i).getContents();
            testRunner.testCase.getTestStepByName("Properties_Address").setPropertyValue(pname, c)
        }
    }
    def TestStep =  testRunner.runTestStepByName("Search_Address")
}