51Testing软件测试论坛

标题: 关于从EXCEL中取数据的问题 [打印本页]

作者: goopy    时间: 2010-3-15 13:21
标题: 关于从EXCEL中取数据的问题
我这有段录制的脚本,现在想调用EXCEL中的数据来测试,不知道怎么弄,高手帮忙解决下,谢谢了

Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日.天下通 - 中国最大的电子客票交易平台").WebEdit("Uname").Set "test125"
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日.天下通 - 中国最大的电子客票交易平台").WebEdit("Passwd").SetSecure "4b99d3f3a17c7c9f3feffe617953bde090ba"
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日.天下通 - 中国最大的电子客票交易平台").WebEdit("CheckCode").Set "0000"
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日.天下通 - 中国最大的电子客票交易平台").Image("login").Click 23,7
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Frame("leftFrame").WebElement("在线订单管理").Click
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Frame("leftFrame").Link("所有订单查询").Click
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Frame("mainFrame").WebRadioGroup("SeaWay").Select "OrderNo"
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Frame("mainFrame").WebEdit("SearchKey").Set "10030414144065922517"
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Frame("mainFrame").WebButton("立 即 查 询").Click
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Frame("mainFrame_2").Link("10030414563965922363").Click
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Frame("mainFrame_3").WebList("Cause").Select "按客规自愿退票"
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Frame("mainFrame_3").WebRadioGroup("rblIsCancelSeat").Select "是"
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Frame("mainFrame_3").WebEdit("Remark").Set "测试"
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Frame("mainFrame_3").WebButton("申请退票").Click
Browser("今日.天下通 - 中国最大的电子客票交易平台").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Sync
Browser("今日.天下通 - 中国最大的电子客票交易平台").Close

我想把下面这段脚本中的“10030414144065922517”用本地D盘中的EXCEL中的数据代替,改怎么弄

Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Frame("mainFrame").WebEdit("SearchKey").Set "10030414144065922517"
作者: feiyunkai    时间: 2010-3-15 15:55
假设10030414144065922517放在D:\TestCase.xls的第2行第1列
Set  excelApp =  CreateObject("Excel.Application")
num=excelApp.Workbooks.open("D:\TestCase.xls").WorkSheets("测试用例").Cells(2,1) '将EXCEL的第2行第1列数据赋给num
excelApp.Quit '关闭EXCEL
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Frame("mainFrame").WebEdit("SearchKey").Set num

'最好写成函数,将该函数添加到QTP的function libraries中,或使用ExecuteFile"函数的路径",这样在需要的读取EXCEL数据的地方都可以直接调用了:
Public Function GetData(ExcelPath,Row,Col)
Set  excelApp =  CreateObject("Excel.Application")
GetData=excelApp.Workbooks.open(ExcelPath).WorkSheets("测试用例").Cells(Row,Col)
excelApp.Quit
End Function

Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Frame("mainFrame").WebEdit("SearchKey").Set  GetData("D:\TestCase.xls",2,1)

[ 本帖最后由 feiyunkai 于 2010-3-15 16:03 编辑 ]
作者: feiyunkai    时间: 2010-3-15 16:31
标题: 另外一种方法是先将EXCEL中数据Import到QTP的DATATABLE中,然后再使用,方法如下:
'假设数据存放在D:\TestCase.xls的Sheet1中且的第二行列名为num。注:由于EXCEL中第一行被QTP默认为列名,所以是读不到的
Browser("今日.天下通 - 中国最大的电子客票交易平台").Page("今日·天下通 - www.JinRi.net.cn").Frame("mainFrame").WebEdit("SearchKey").Set GetData("D:\TestCase.xls","Sheet1","num","1")

Public function GetData(ExcelPath,SheetName,ColName,row)      
'ExcelPath:   EXCEL路径
'SheetName:sheet名
'ColName:    列     名         
        DataTable.AddSheet SheetName                                         '在QTP中添加名称为SheetName的数据表
        DataTable.ImportSheet ExcelPath,SheetName,SheetName  '将EXCEL中数据Import到SheetName数据表
        DataTable.SetCurrentRow (row)                                           '设置需要读取的数据所在的行
        GetData=DataTable(ColName,SheetName)                          '取SheetName数据表中指定列的数据
End Function

[ 本帖最后由 feiyunkai 于 2010-3-15 16:39 编辑 ]
作者: skyzhu    时间: 2010-3-15 16:43
肯定要先导入,否则会等死,EXCEL打开很慢
作者: goopy    时间: 2010-3-16 18:00
标题: 回复 2# 的帖子
我用这两种方法都提示下标越界,不知道咋回事
作者: feiyunkai    时间: 2010-3-17 18:14
原帖由 goopy 于 2010-3-16 18:00 发表
我用这两种方法都提示下标越界,不知道咋回事
这2种方法我都试过,是可以用的,报下标越界有2种原因,一是SHEET不存在,二是该SHEET指定的行中没有数据
方法一报错原因是你没修改函数中的Sheet名称导致的
方法二报错原因可能是你GetData("D:\TestCase.xls","Sheet1","num","1")中的1写成了2或"num"没修改为"测试用例"


看你截图中的报错信息,是因为你把列名当成了SHEET名称


[ 本帖最后由 feiyunkai 于 2010-3-17 18:29 编辑 ]
作者: goopy    时间: 2010-3-17 23:15
我现在问题已经解决了,还有点不明白,2#的方法为什么取值是从第二行开始,而3#的方法取值是从第一行开始的,EXCEL中第一行不是被QTP默认为列名么,应该是读不到的啊
作者: hello97    时间: 2010-3-18 10:16
方法1是用户指定去读某行某列的值当作数据用。
方法2是借用QTP使用数据表的习惯。

一个“全控制”,一个“借别人的手”。
当然不一样。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2