QTP - DataTable操作汇总

上一篇 / 下一篇  2009-09-30 14:49:24 / 个人分类:QTP

精华贴就是精华贴,导致最近不停想汇总一些东西,以便日后查询吧。

一. 如何在QTP测试中使用Excel对象
http://bbs.51testing.com/thread-50513-1-3.html
解决方案:参阅 Microsoft 的 MSDN 库以了解 Excel Object方法和属性的完整列表

可以参阅“Microsoft Excel 2000 Visual Basic for Applications object model”(Microsoft Excel 2000 Visual Basic for Applications 对象模型)以了解在 QuickTest Professional (QTP) 脚本内可使用的 Excel 方法和属性完整列表。 可在 QTP 脚本内使用这些Excel脚本方法创建工作簿,创建新表单,输入数据等。

有关 Excel 对象方法和属性的完整列表,请参阅MSDN L库 - Microsoft Excel对象模型http://msdn.microsoft.com/en-us/library/aa255654(office.10).aspx
Excel的对象方法不是qtp的一部分,因此,不保证它们能起作用,并且Mercury Technical Support不支持它们。 Microsoft可能对这些方法所做的任何更改与 Mercury 无关。



二.http://bbs.51testing.com/thread-28654-2-4.html

【转】由QTP自动生成的语句是这样的:
DataTable("Col", dtLocalSheet)
DataTable("Col", dtGlobalSheet)
其中,dtLocalSheet就是当前Action的DataTable,dtGlobalSheet就是Global的DataTable,Col是列名

还有很多写法,比如
DataTable("Col", "Action2")
就是读取Action2的Col列。
你完全可以读取另一个Action的DataTable,而不需要跨Action传递变量,使用DataTable比变量更方便,因为结束后能在Result里看到运行时的值
你可以在一个Action里读取另外一个Action的列,但是要注意另外一个Action的当前行
比如你在Action1里读取Action2的某列,如果Action1运行到第二行,你读取的Action2还是第一行的数据,解决办法就是写上这句:
DataTable.GetSheet("Action2").SetCurrentRow(2)
你也可以用GetCurrentRow来获取Action1的行,然后再用SetCurrentRow来保持两个Action的当前行一致:
CurrRow = DataTable.GetSheet("Action1").GetCurrentRow
DataTable.GetSheet("Action2").SetCurrentRow(CurrRow)

还有一种写法:
DataTable(1, "Action2")
这样就是读取Action2的第一列,不管第一列叫什么名字,都能读
这样就很方便,比如:
For i = 1 To 10
    MsgBox DataTable(i, "Action2")
Next
这样就能循环读取Action2的1~10列了

同样,表也可以用数字代替:
DataTable(1, 2)
这样就是读取第二个Action表的第一列

 

还可以这样用! 轻松的遍历每个参数的每行的值,不需要SetCurrentRow!
RowCount = DataTable.GetSheet("SheetName").GetRowCount()
ParamCount = DataTable.GetSheet("SheetName").GetParameterCount()
For ParamIndex = 1 to ParamCount
        ParamName = DataTable.GetSheet("SheetName").GetParameter(ParamIndex).Name       
        For RowIndex = 1 to RowCount
                ParamValue = DataTable.GetSheet("SheetName").GetParameter(ParamName).ValueByRow(RowIndex)
        Next        
Next

http://bbs.51testing.com/thread-110506-1-1.html

Option explicit
Dim rowcount'存储数据总行数
Dim filepath'获取excel表格路径
Dim i'循环变量
filepath=pathfinder.Locate("webmail_option_preference_hintSendSuccess.xls")
datatable.Import(filepath)'excel表中只有一个sheet有数据使用Import,如果excel中多个sheet有数据,这里就要使用ImportSheet来指定具体导入哪一sheet表的数据了
rowcount=datatable.GetRowCount'统计行数
For i=0  to rowcount-1
        datatable.GetCurrentRow '置当前行为活动行
        send=datatable.Value("send")'这里Value("send")中的send为excel中的列名,是在设计测试数据时确定的
        name1=datatable.Value("name1")'同上       
。。。。。。
datatable.SetNextRow'下一行
        If   datatable.GetCurrentRow>rowcount Then '当前行大于总行数,退出循环
                  Exit for
        End If
Next
 
 
 
'***********************************************************************
'函数说明:更改单元格字体的颜色
'参数说明:
'          (1)Set_wkSheet工作表名称
'          (2)row:列的序号;
'          (3)column:行的序号;
'          (4)lx:类型,(zt:字体;dyg:单元格),空或其他为字体。
'          (5)color:将字体改变为什么颜色
'
'常数                        值                描述
'vbBlack                &h00                黑色
'vbRed                        &hFF                红色
'vbGreen                &hFF00                绿色
'vbYellow                &hFFFF                黄色
'vbBlue                        &hFF0000        蓝色
'vbMagenta                &hFF00FF        紫色
'vbCyan                        &hFFFF00        青色
'vbWhite                &hFFFFFF        白色
'
'***********************************************************************
Function AlterColor(Set_wkSheet,row,column,lx,Color)
   Dim wksheet1
   Dim cell
   Set wkSheet1 = wkBook.Worksheets(Set_wkSheet)
   Set cell=wkSheet1.Cells(row, column)
    Select Case lcase(lx)
                   Case "zt" cell.Font.Color=color '改变字体颜色
                   Case "dyg" cell.Interior.Color=color '改变单元格颜色
                   Case Else cell.Font.Color=color
          End Select
   set wkSheet1 = Nothing
End Function
 
 
'***********************************************************************
'函数说明:打开Excel文件。
'参数说明:
'         path:要调用的Excel文件的路径        .如("c:\test.xls")
'         open: 是否打开Excel程序打开文件,Y为使用,空或其他为不使用
'***********************************************************************
Sub OpenExcel(path,open)
        Set ExcelApp = CreateObject("Excel.Application")
        Set wkBook = ExcelApp.workbooks.open(path)
        If pen="y" Then
        ExcelApp.Application.Visible=True
        End If
End Sub
 
 
***********************************************************************
'函数说明:向excelSheet单元格输入值。
'参数说明:
'          (1)Set_wkSheet工作表名称
'          (2)row:列的序号;
'          (3)column:行的序号;
'          (4)value:要输入的值
'***********************************************************************
Function SetCellValue(Set_wkSheet,row,column,value)
   Dim wksheet1
   Set wkSheet1 = wkBook.Worksheets(Set_wkSheet)
   wkSheet1.Cells(row, column) = value
   Set wkSheet1
End Function

 

三. 关于datatable和dtsheet对象
http://bbs.51testing.com/thread-14397-1-3.html

1. QTP在Import的时候,很人性化,它会用name作为testsheet的中第一个字段的字段名
2. datatable.setcurrentrow(i)
   DataTable.GetSheet("51sheet").GetParameter("Name").Value
   DataTable.GetSheet("51sheet").GetParameter(1).Value
   '这里我用GetParameter(1)去得到sheet中第一列Name column的值。

dtGlobalsheet只有一个,它的index值比较特殊,它有两个index值,
一个是我们普遍认为了1还有一个是内置的默认的1000。
你可以用1或者1000去引用它都是正确的。当然了,如果你用dtGlobalsheet来引用它也是正确的。这个sheet的Name叫做"Global"。注意:SheetName是区分大小写的。

dtLocalsheet在我上传的例子中,你可以用index:1001来引用,当然,你也可以用2来引用。

至于51sheet嘛,你就只能用index:3来引用了。
它没有内置的默认的类似前两个那样的index值。

在我们的应用中,可能会有多个action,如:actiion1,actiion2,actiion3
这些action也分别对应有各自默认的LoaclSheet.即:actiion1,actiion2,actiion3。

如果每个action中,我们都只用到一个sheet,那就好办了,在每个action中都可以用localsheet来引用,但是如果我们有两个及两个以上的sheet.那么就比较容易乱套了。



 


TAG:

Hello Kitty 引用 删除 永欢   /   2014-03-25 14:40:19
1
引用 删除 wxy5g   /   2011-04-18 17:46:40
好东西
 

评分:0

我来说两句

我的栏目

日历

« 2024-04-21  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 26924
  • 日志数: 30
  • 建立时间: 2009-09-19
  • 更新时间: 2012-09-02

RSS订阅

Open Toolbar