要点:
- 测试数据和业务脚本分离的好处和优势
- 利用 DataTable 将测试数据和业务分离
- DataTable 中 Global Sheet 和 Local Sheet 的区别
- Test DataTable 与 Run-time DataTable
- DataTable 常用方法
DataTable 和 Excel 非常相似。
DataTable是自动化测试的主力和核心组件。
DataTable是将测试数据剥离出脚本的方法之一。
--------------------------------------------------------------------------------
Global 与 Local Sheet 的区别
- Global Sheet 是一个全局变量,有几行数据,程序就执行几次
- Global Sheet 这个全局变量受 Data Table iterations控制
- Local Sheet 是一个局部变量,不受 Data Table iterations控制(无论有多少行数据,它只运行一次)
- Local Sheet 这个局部变量受 Action 的 Action Call Properties 设置控制
- Global 和 Local 之间的逻辑规则
- Global(设置为Run on all rows),Action(设置为Run one iteration only)
- 双方都具有相同行的测试数据,此时Global和Action的每行都要运行且同步运行
- Global的行数大于Local的行数,当Action执行到最后一行后,Global以后所执行的行数,Action都用最后一行数据去补
- Global的行数小于Local的行数,Action执行不到大于Global行数的数据
- Global(设置为Run on all rows),Action(设置为Run on all rows)
- Global执行一行,Action执行所有行
Test DataTable 与 Run-time DataTable
- Test DataTable------在DataTable里事先准备好的、固定的测试数据,为一组静态数据,是由自动化测试工程师人为事先填写进去的
- Run-time DataTable------在QTP执行过程中,将测试数据填写到DataTable里,QTP运行结束,测试数据就消失(不会保存在DataTable中),但是可以在测试报告中看到它
- Run-time DataTable常用于不同脚本或不同Action之间传值
Run-time DataTable脚本之间传值经典例子
Action1:
- 进入百度首页
- 在搜索框中输入“12306”
- 点击“百度一下”按钮
Action2:
- 校验在搜索结果页面中的搜索框中是否保留了刚才输入的字样
-------------------------------------------------------
Action1:
Set bjBrowser=Description.Create()
ObjBrowser("micClass").Value="Browser"
Set bjPage=Description.Create()
ObjPage("micClass").Value="Page"
Set bjWebEdit=Description.Create()
ObjWebEdit("micClass").Value="WebEdit"
ObjWebEdit("name").Value="wd"
Set bjWebButton=Description.Create()
ObjWebButton("micClass").Value="WebButton"
ObjWebButton("name").Value="百度一下"
Browser(ObjBrowser).Page(ObjPage).WebEdit(ObjWebEdit).set "12306"
DataTable("A",dtLocalSheet)=Browser(ObjBrowser).Page(ObjPage).WebEdit(ObjWebEdit).GetROProperty("value")
Browser(ObjBrowser).Page(ObjPage).WebButton(ObjWebButton).Click
Set bjWebButton=Nothing
Set bjWebEdit=Nothing
Set bjPage=Nothing
Set bjBrowser=Nothing
Action2:
Set bjBrowser=Description.Create()
ObjBrowser("micClass").Value="Browser"
Set bjPage=Description.Create()
ObjPage("micClass").Value="Page"
Set bjWebEdit=Description.Create()
ObjWebEdit("micClass").Value="WebEdit"
ObjWebEdit("name").Value="wd"
Set all_oWebEdits=Browser(ObjBrowser).Page(ObjPage).ChildObjects(ObjWebEdit)
For i=0 to all_oWebEdits.count-1
Set WebEdit=all_oWebEdits.item(i)
checkValue=oWebEdit.GetROProperty("value")
If checkValue=DataTable("A","Action1") Then
msgbox "pass"
else
msgbox "fail"
End If
Next
Set bjWebEdit=Nothing
Set bjPage=Nothing
Set bjBrowser=Nothing
DataTable 常用方法
DataTable是QTP的一个保留对象,具有很多实用的方法:
DataTable.GlobalSheet.AddParameter "Column1","Value1"
DataTable.GlobalSheet.AddParameter "Column2","Value2"
DataTable.LocalSheet.AddParameter "Column3","Value3"
- 动态对DataTable中的指定的某一个行列中的值进行修改
DataTable.GetSheet("Action1").SetCurrentRow(2)'设置数据插入的行数
DataTable.Value("Column3","Action1")="Row2"
上一行代码也可写为:DataTable.Value(1,2)="Row2"
GetValue1=DataTable("Column1","Global")
msgbox GetValue1
GetValue2=DataTable("Column3","Action1")
msgbox GetValue2
GetValue3=DataTable(1,"Action")
msgbox GetValue3
'循环获取Action1的N列
For i=1 to N
msgbox DataTable(i,"Action1")
Next
'如有有两个Action,分别为Action1和Action2,要想使它们在获取的时候保持读取的行数一致
CurrentRow=DataTable.GetSheet("Action1").GetCurrentRow
DataTable.GetSheet("Action2").SetCurrentRow(CurrentRow)
getValueByRow=DataTable.GetSheet("Action1").GetParameter("Cloumn3").ValueByRow(2)
msgbox getValueByRow
或
DataTable.GetSheet("Action1").SetCurrentRow(2)
getValueByRow=DataTable.Value("Column3","Action1")
msgbox getValueByRow
‘1.获取当前行
msgbox DataTable.GetSheet("Action1").GetCurrentRow
'2.设置当前行
DataTable.GetSheet("Action1").SetCurrentRow(2)
AllRowCount=DataTable.GetSheet("Action1").GetRowCount
msgbox AllRowCount