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("MySheet").GetRowCount
Reporter.ReportEvent 2, "数据工作表中有 " &rowcount, "行。"

2.得到datatable运行时的动态列数:GetParameterCount
语法:DTSheet.GetParameterCount

paramcount = DataTable.GetSheet("MySheet").GetParameterCount

3.GetCurrentRow方法
描述:返回运行时数据表的第一个工作表(用于测试的全局表或用于业务组件的业务组件表)中的当前(活动)行。
语法:DataTable.GetSheet(“MySheet”).GetCurrentRow
返回值:数字
示例:以下示例使用 GetCurrentRow 方法检索当前在运行时数据表中使用的行,并将其写入报告。

row = DataTable.GetSheet("MySheet").GetCurrentRow
Reporter.ReportEvent 1, "行号", row

4. 设置当前active的行数(第一行为1):SetCurrentRow
语法:DataTable.GetSheet(“MySheet”).SetCurrentRow(RowNumber)

DataTable.SetCurrentRow(tb_i+1)
DataTable.GetSheet("Action1").SetCurrentRow(tb_i+1)

‘注:你也可以用GetCurrentRow来获取Action1的行,然后再用SetCurrentRow来保持两个Action的当前行一致:

DataTable.SetCurrentRow(tb_i+1)
CurrRow = DataTable.GetSheet("Action1").GetCurrentRow
DataTable.GetSheet("Action2").SetCurrentRow(CurrRow)

5. 指向下一行数据:SetNextRow

Dim i,j
j = DataTable.GetRowCount
For i=1 to j
  Window("Windows Internet Explorer").WinObject("Internet Explorer_Server").Type DataTable("content2", dtGlobalSheet)
  Browser("Browser").Page("写日志 - XXX").WebButton("发 表").Click
  Datatable.GetSheet("Global").SetNextRow
Next

6.查询、设置datatable的数值:

DataTable("Col", "Action2")   '就是读取Action2的Col列。'同样,表也可以用数字代替:DataTable(1, 2)    '这样就是读取第二个Action表的第一列'还有一种写法:DataTable(1, "Action2")  '这样就是读取Action2的第一列,不管第一列叫什么名字,都能读'还有一种赋值方法aParam2=DataTable(“AccountsNumber”,dtGlobalSheet)
 
'还有一种赋值方法,但是有一个前提就是:必须只能是测试只包含一个操作的情况:          
aParam3=DataTable(“AccountsNumber”,dtLocalSheet)
 
datatable.value("num")’只在global形式下的一种省略形式;完×××式是:
datatable.value("num",dtlocalsheet)
 
'向某一列的单元格赋值:datatable.value("column_name",dtlocalsheet)="nanjing"
 
DataTable.Value("Destination", "ActionA")="New York"            
DataTable.Value(2,3)="New York"
DataTable("Destination", dtlocalSheet)="New York"    
 
Call_date= DataTable.Value("Date","add Conference Call")  '为Call_date赋值

7. 取datatable特定行的数据:

DataTable.GetSheet("Action1").GetParameter("test\").ValueByRow(4)

8  AddSheet 方法
描述:向运行时数据表中添加指定工作表并返回该工作表,以便可以直接在同一语句中设置新工作表的属性。
语法:DataTable.AddSheet(SheetName)
示例:以下示例先使用 AddSheet 方法在运行时数据表中新建工作表”MySheet”,然后向新工作表中添加参数。

Dim Variable
Variable=DataTable.AddSheet ("MySheet").AddParameter("Time", "8:00")

9  DeleteSheet方法
描述:从运行时数据表中删除指定工作表。
语法:DataTable.DeleteSheet SheetID
示例:以下示例使用 DeleteSheet 方法从运行时数据表中删除工作表”MySheet”。

DataTable.DeleteSheet "MySheet"

10  Export方法
描述:在指定位置保存运行时数据表的副本。
语法:DataTable.Export(FileName)
示例:以下示例使用 Export 方法将测试的数据表副本保存在 C:\flights.xls 中。

DataTable.Export ("C:\flights.xls")

11 ExportSheet方法
描述:将运行时数据表的指定工作表导出到指定文件中。如果指定文件不存在,则将创建一个新文件并保存指定工作表。如果当前文件存在,但是该文件不包含具有指定工作表名称的工作表,则将插入该工作表作为文件的最后一个工作表。如果当前文件存在且包含指定工作表,则导出的工作表将覆盖现有工作表。

语法:DataTable.ExportSheet(FileName, DTSheet)
DTSheet 变量 要导出的运行时数据表工作表的名称或索引。索引值从 1 开始。

示例:以下示例使用 ExportSheet 方法将运行时数据表的第一个工作表保存到 name.xls 文件中。

DataTable.ExportSheet "C:\name.xls" ,1
DataTable.ExportSheet "C:\name.xls" , " MySheet "

12 GetSheet方法
描述 :返回运行时数据表中的指定工作表。
语法 :DataTable.GetSheet(SheetID)
SheetID 变量 标识要返回的工作表。SheetID 可以是工作表名称或索引。索引值从 1 开始。
返回值:DTSheet 对象
示例:以下示例使用 GetSheet 方法返回运行时数据表的”MySheet”工作表,以便向其中添加参数。

MyParam=DataTable.GetSheet ("MySheet").AddParameter("Time", "8:00")

您还可以使用该方法向”MySheet”本地表中添加参数(注意,不会返回值)。

DataTable.GetSheet ("MySheet").AddParameter "Time", "8:00"

13 GetSheetCount方法
描述:返回运行时数据表中的总工作表数。
语法:DataTable.GetSheetCount
返回值:数字
示例:以下示例使用 GetSheetCount 方法查找运行时数据表中的总工作表数,并将其写入报告。

sheetcount = DataTable.GetSheetCount
Reporter.ReportEvent 0, "工作表编号", "数据表中有" & sheetcount & "个工作表。

14 Import方法
描述:将指定的 Microsoft Excel 文件导入运行时数据表。

注意:导入的表必须与测试或组件匹配。列名必须与测试或组件中的参数匹配,并且工作表名称(用于测试)必须与操作名匹配。如果导入的 Excel 表包含组合框或列表单元格、条件格式或其他特殊单元格格式,则不会导入这些格式,并且单元格在数据表中显示时包含固定值。

语法:DataTable.Import(FileName)
FileName 字符串型 要导入的 Excel 表的完整路径。

示例:导入的表将替换现有运行时数据表(包括所有数据表)中的所有数据。以下示例使用 Import 方法将 flights.xls 表导入运行时数据表。

DataTable.Import ("C:\flights.xls")

15 ImportSheet方法
描述:将指定文件的工作表导入运行时数据表的指定工作表。导入的工作表中的数据将替换目标工作表中的数据(请参阅 SheetDest 参数)。

注意:导入的工作表中的列标题必须与工作表导入操作中的数据表参数名匹配。否则,测试或组件可能会失败。导入的工作表会自动采用它所替换的工作表的名称。如果导入的 Excel 工作表包含组合框或列表单元格、条件格式或其他特殊单元格格式,则不会导入这些格式,并且单元格在数据表中显示时包含固定值。

语法:DataTable.ImportSheet(FileName, SheetSource, SheetDest)

FileName 字符串型 要从中导入工作表的 Excel 表的完整路径。
SheetSource 变量 要从文件导入的工作表的名称或索引。索引值从 1 开始。
SheetDest 变量 数据表中要用 SheetSource 替换的工作表的名称或索引。索引值从 1 开始。

示例:以下示例使用 ImportSheet 方法将 name.xls 表的第一个工作表导入测试的运行时数据表中的Action1工作表。

DataTable.ImportSheet "C:\name.xls" ,1 ," Action1"
DataTable.ImportSheet "C:\name.xls" ,1 ," Global"