QTP DataTable

Global Sheet和Local Sheet:

1.Global Sheet是一个全局变量。有几行数据,程序就要回放几次(不需要循环语句)
如果当前的Global Sheet中有3行测试数据。第1次执行使用第一行数据test1,第二次执行使用第二行数据test2,第三次执行使用第三行数据test3,依此可以一直类推下去。

现在设置了3行测试数据,这些数据不一定是我们每次都需要的,那该怎么办?删除它们?等需要了再添加?那多麻烦。QTP提供了一个很有用的功能,那就是Data Table iterations设置(QTP上方菜单栏→File→Settings→Run)。

2. Local Sheet是个局部变量,它并不受Data Table iterations控制,无论有多少行数据,它只运行一次(如果Global Sheet没有数据,或只有一行数据,或设置为只运行一次)。

即使Global Sheet没有数据,仍然可以通过别的方式(代码控制的方式排除在外)去执行Local Sheet下的所有行。在Test Flow里反击Action后可以进入Action的一些相关设置。它和Global的Data Table iterations设置界面相似,在这里选中Run on all rows就可以执行Local Sheet下的所有测试数据了。虽然都是执行所有行数据,不过它们的区别还是很大的。Local Sheet执行了3次自身Action的迭代,而Global Sheet就相当于执行了3次脚本。

在最后,还总结了一些Global和Local之间的逻辑规则,大致为以下几点:
  
● Global不止一行数据(设置为Run on all rows,以下都是……),Action也设置为Run on all rows(以下都是……)且假设双方都具有3行测试数据,此时Global和Action的每行都要运行且同步运行(即Global在取第2行数据时,Action也对应地取它的第二行数据)。
  
● 当Global不止一行数据且Global的行数大于Action的行数,那么当Action执行到最后一行后,Global以后所执行的行数,Action都用它的最后一行数据去补,比如Action的最后一行测试数据是test3,那么即使Global执行到了100行,也一直对应的是Action中test3的这一行数据。
  
● 引用上面的条件,如果Global的行数小于Action的行数的话,Action就执行不到最后一行了。

QTP的DataTable操作操作包括:

DataTable.GetSheet(dtSheet)
DataTable.GetSheetCount
DataTable.[GetSheet.]GetRowCount
DataTable.[GetSheet.]GetParameterCount
DataTable.GetSheet(sSheetName).GetParameter(“ColumName”).ValueByName(iRowNumber)
DataTable.[GetSheet].GetCurrentRow
DataTable.[GetSheet].SetCurrentRow(RowNumber)
DataTable.[GetSheet].SetNextRow
DataTable.Value(ParameterID [, SheetID])  or DataTable (ParameterID [, SheetID])
DataTable.AddSheet(SheetName)
DataTable.DeleteSheet(SheetName)
DataTable.Export(filename)
DataTable.ExportSheet(filename,SheetName)
DataTable.Import(FileName)
DataTable.ImportSheet(FileName, SheetSource, SheetDest)

1.得到datatable总行数的命令:GetRowCount
描述:返回运行时数据表的第一个工作表(用于测试的全局表或用于业务组件的业务组件表)中最长的列中的总行数。
语法:DataTable.GetSheet(“MySheet”).GetRowCount

返回值:数字

示例:以下示例使用 GetRowCount 方法查找 MySheet 运行时数据表中最长的列中的总行数,并将其写入报告。

rowcount = DataTable.GetSheet