2016-04-20 56 views
2

我有一个包含测试用例数据的Excel工作表,每个测试用例由一个列值分隔,表示脚本ID,我想只加载脚本ID = 1的行。我们如何使用DataTable.ImportSheet方法实现这一点,因为此方法导入所有具有脚本id = 2和3的行如何根据条件将数据从excel导入到UFT

我也尝试使用查询字符串,这工作正常,但我想通过DataTable.ImportSheet方法(项目约束)

由于 阿曼

回答

1

那么,DataTable.ImportSheet方法简单地出口的整个片材(从Excel文件一个接片/片)。据我所知,它不允许你导入它的一些行。

但是...

您可以设置您的代码,只处理您想要的行。您将希望以编程方式而不是自动控制循环,因此首先:设置您的操作(或测试)仅运行OneIteration。如果操作设置为“在所有行上运行”,那么它只是查看表单中最后一行的数据,然后运行那么多次迭代。因此,如果您的前四行有一张数据表,而第100行有一些数据,那么即使数据为空白,QTP也会尝试运行100次迭代。

要设置动作的迭代设置,您可以右键单击流程图中的动作并选择动作呼叫属性。要为整个测试设置迭代,请右键单击开始椭圆,选择属性,选择运行,然后在其中找到设置。

接下来,创建一个类似的循环:

'ImportedSheetTabName = the name of the tab in Excel, you specified it during importsheet 

for Row = 1 to DataTable.GetSheet(ImportedSheetTabName).GetRowCount 

    DataTable.GetSheet(ImportedSheetTabName).SetCurrentRow Row 

    if DataTable("script_ID",ImportedSheetTabName) = "1" 'based on your question 
    'do stuff with the row 
    'this is where you would put ALL of the work to be done... 
    'it can be as long as you need. 
    else 
    'do nothing. this will ignore all rows that are not Script ID = 1 
    end if 

next 

其实我在我所有的表(用QTP使用)做的是包括一个名为“数据”一栏,仅仅有一个X它是否包含数据表数据。我可以直接在行之间放入任何我想要的东西,包括其他公式和计算(数据构建东西),注释,列表等等,并且知道所有这些都会被忽略,因为我手动控制了我的循环。

2

您也可以通过手动创建数据表来完成。

例如,

Set myxl = createobject("excel.application") 
myxl.Application.Visible = true 
myxl.Application.DisplayAlerts = false 
myxl.Workbooks.Open DataSheetFilePath 
set sheet = myxl.ActiveWorkbook.Worksheets("SheetName") 
Row=sheet.UsedRange.Rows.Count 
Col=sheet.UsedRange.Columns.Count 
'Create Data table first 
Datatable.AddSheet ("DataTableName") 
Set ParameterTable = datatable.GetSheet("DataTableName") 
'Add cols from Excel 
For j = 1 To Col 
    ParameterTable.AddParameter sheet.cells(1,j).value,"" 
Next 

'Begin search in Excel 
'Suppose the ID column will be 1 
DataTableRow = 1 
For i = 1 to Row 
    If sheet.cells(i,1).value = 1 Then 
     'Add row record to datatable 
     ParameterTable.SetCurrentRow (DataTableRow) 
     For j = 1 to Col 
     ColName = sheet.cells(1,j).value 
     Val = sheet.cells(i,j).value 
     datatable.Value(ColName,"DataTableName") = Val 
     DataTableRow = DataTableRow+1 
     Next 
    End If 
Next 
+0

所以,基本上,你在使用Excel自动化对象即可打开工作表,并直接写入到DataTable复制-relevant-数据到QTP的DataTable。这真是太棒了,因为如果您在完成后导出数据表,最终会得到您的数据表的定制版本。因此,在开始测试之前,您可以将所有内容封装到函数库中以预加载QTP的数据表。显然是一种先进的技术:) –

相关问题