QTP
数据驱动在QTP的运用
所谓数据驱动就是用一个数据文件把 测试 脚本驱动起来,来达到更接近用户化更智能的测试.其目的是把测试人员从维护复杂的脚本程序中解放出来,只需维护好数据文件即可,减少了很多修改脚本的麻烦.下面讲一下通过四种途径来达到数据驱动.
1. datatable
QTP本身程序就给我们提供了这么一个数据表,我们可以把测试数据或 测试用例 填入这个数据表中.
如:设计用例
username passwd
case1 mercury mercury
case2 xxxxxxx xxxxxx
录制脚本
For i="1" to Datatable.GetRowCount
Dialog("Login").WinEdit("Agent Name:").Set DataTable("username", dtGlobalSheet)
Dialog("Login").WinEdit("password:").Set DataTable("passwd", dtGlobalSheet)
Dialog("Login").WinButton("OK").Click
datatable.GlobalSheet.SetNextRow
Next
本例是验证一个登录系统,通过DataTable不同的用例设计,驱动起这段脚本,达到测试的效果.当然上面的例子中还少一个很重要的步骤,那就是结果比较.如果不能进行结果比较的 自动化测试 不能够称为自动化测试.
当然我们这里主要讲的是数据驱动,所以不在对上面的例子进行补充.
2. 文本文件
我们可以把文本文件当成数据文件,通过对文本文件的读写操作,来实现数据驱动.
例:文本文件内的内容
mercury,mercuy
读文件的代码
Function writeorderno(orderno)
Dim fso, myfile,username,passwd
Set fso="CreateObject(""scrīpting.FileSystemObject")
Set myfile="fso.openTextFile(""C:\testing.txt",1,false)
tmp=split(myfile.readline,",")
username=tmp(0)
passwd=tmp(1)
myfile.close
End Function
写文本文件的代码
Function writeorderno(orderno)
Dim fso, myfile
Set fso="CreateObject(""scrīpting.FileSystemObject")
Set myfile="fso.openTextFile(""C:\result1.txt",8,false)
myfile.writeline orderno
myfile.close
End Function
3 . EXCEL文件
我们可以把EXCEL文件当成数据文件,通过对EXCEL文件的读写操作,来实现数据驱动.
可以把EXCEL文件当作对象的方式来完成写的操作
Dim Excel,ExcelSheet
Set Excel="CreateObject(""Excel.Application")
Set ExcelSheet="CreateObject(""Excel.Sheet")
ExcelSheet.Application.visible=true
ExcelSheet.ActiveSheet.Cells(1,1).value=1
ExcelSheet.ActiveSheet.Cells(1,2).value=2
ExcelSheet.ActiveSheet.Cells(1,3).value=3
Excel.Save "C:\test.xls"
Set ExcelSheet="Nothing
用ADO的方式连接EXCEL文件来做读的操作
Dim conn,input,filename
filename="D:\公基本情况(tb_gsgk)-标准格式.xls" '
Set conn= createobject("ADODB.Connection")
conn.Open "provider="Microsoft.Jet.OLEDB.4.0;persist" Security Info="False;Data" Source="&filename&";Extended Properties="'Excel" 8.0;hdr="yes'""
Set input= createobject("ADODB.Recordset")
input.Open "select * from [公基本情况-标准格式$] " ,conn,2,2
input.close
Set input="nothing
4.数据库
可以利用设计数据表,把测试数据和测试用例放在数据表里,用ADO或者 其他 任何可以访问连接数据库的方式连接数据库,来实现数据驱动
Dim res,cmd,sql
Set Res="createobject(""adodb.recordset")
Set Cmd="createobject(""adodb.command")
Cmd.activeconnection="Provider=SQLOLEDB.1;Password=111111;Persist Security Info="True;User" ID="sa;Initial" Catalog="xhq;Data" Source="192.168.191.142"" '这句话是连接数据库的数据源,要做修改
Cmd.CommandType = 1
sql ="selec t * from 表 where name="username""
Cmd.CommandText = sql
Set res = Cmd.Execute()
Set res = nothing
Set cmd.ActiveConnection = nothing
Set Cmd= nothing
以上四种方法都可以帮助我们实现数据驱动,应该说数据驱动在自动化测试中运用的比较的广泛,才有必要拿出来探讨一下.
QTP的一些小知识
2007-11-09 16:55:57
QTP的一些小知识
1.GetCellData函数作用:获取单元格的值
例: rowCount = Browser("xxx ").Page("xxx ").Frame("xxx").WebTable("xxx").RowCount
For counter = 1 To rowCount
text = Browser("xxx").Page("xxx").Frame("xxx").WebTable("xxx").GetCellData(counter,1)
If (text = "xxx") Then
counter = counter - 1
selectNO = "#" & counter
Browser("xxx").Page("xxx").Frame("xxx").WebRadioGroup("xxx").Select selectNO
Exit For
End If
Next
2.把值插入datatable里
例: datatable.setcurrentrow(i)
datatable.value("name","Global")="name"
datatable.value("passwd","Global")="passwd"
3.用代码来启动浏览器
Browser1 = "IE"
StartURL = "www.51testing.com"
IF Browser1 = "IE" THEN
set IE = CreateObject("InternetExplorer.Application")
IE.Visible = true
IE.Navigate StartURL
END IF
4.ExecuteFile函数
作用:ExecuteFile 可以直接执行vbs文件,而不需要将其导入resource中
ExecuteFile FileName
说明:where FileName is the absolute or relative path of your VBscrīpt file.
例:ExecuteFile("F:\test.vbs")
5.Strcomp函数
作用:比较文本
例:dim strtext1,strtext2,str ,str1,comp1
strtext1 = "xxx"
strtext2 = "xxx"
str = VbWindow("xxx").VbWindow("xxx").VbLabe1("xxx").GetTOProperty("text")
str1= VbWindow("xxx").VbWindow("xxx").VbLabel("xxx").GetTOProperty("text")
comp1=strcomp(strtext1,str,0)
If comp=0 Then
msgbox “这两个串相等”
else
msgbox str
End If
6.CaptureBitmap
作用:捕获屏幕
7. GetROProperty
作用:取对象属性值
例:VbWindow("xxx").VbWindow("xxx").VbWindow("xxx").ActiveX("xxx").GetROProperty("TextMatrix(1,0)")
8.ExitAction - 退出当前操作,无论其循环属性如何。
ExitActionIteration - 退出操作的当前循环。
ExitRun - 退出测试,无论其循环属性如何。
ExitGlobalIteration - 退出当前全局循环。
9.如何使用Excel对象处理数据?
Dim xl
打开excel文件
Function OpenExcelFile(strFilePath)
Set xl = CreateObject("Excel.Application")
xl.Workbooks.Open strFilePath
End Function
获得指定单元格数据
Function GetCellData(strSheet,rwIndex,colIndex)
GetCellData = xl.WorkSheets(strSheet).Cells(rwIndex,colIndex)
End Function
填充单元格数据
Function PutCellData(strSheet,rwIndex,colIndex,varData)
xl.WorkSheets(strSheet).Cells(rwIndex,colIndex) = varData
End Function
保存并推出
Function SaveAndQuit()
xl.Activeworkbook.save
xl.Quit
Set xl = nothing
End Function
10.连接sql数据库
例:Dim res,cmd,sql
Set Res=createobject("adodb.recordset")
Set Cmd=createobject("adodb.command")
Cmd.activeconnection="Provider=SQLOLEDB.1;Password=111111;Persist Security Info=True;User ID=sa;Initial Catalog=xhq;Data Source=192.168.191.142" '这句话是连接数据库的数据源,要做修改
Cmd.CommandType = 1
sql="selec t * from 表 where name=username"
Cmd.CommandText = sql
Set res = Cmd.Execute()
Set res = nothing
Set cmd.ActiveConnection = nothing
Set Cmd= nothing
在QTP中建立一个数据库检查点
2007-11-02 17:12:06
QTP中调用共享文件
2007-11-02 17:11:19
在我们开发脚本的时候,发现有些脚本总是重复的出现在各个脚本中。那么我们是不是可以把这些脚本写成一个共享的function,放到一个共享的文件中?然后再给各个脚本调用呢?答案当然是肯定中。其实我在《QTP的一些小知识》中也提到了一个方法,就是利用ExecuteFile函数来调用. vbs文件。如:一个名为test.vbs的文件,我们只要在脚本中写上这么一句代码ExecuteFile("F:\test.vbs") ,就可以来直接执行这个.vbs文件了。
现在我再来介绍另一种方法,这种方法也是QTP本身所提供的。就是设置菜单选项“setting”中的"resource"选项来做到调用共享文件的效果。在"resource"选项中,有三种文件格式是可以被调用的,分别是*.sql;*.vbs;*.txt三种后缀文件。这里我用一个*.txt文件为例。 新建一个名为test.txt的文本文件,其保存内容如下:(注:保存的内容也必须合法)
确定关闭窗口。我们就来试验一下,是不是这个共享文件里的Function能够被调用了。在QTP专家视图里写上这么几句代码:
Dim order
order=1
writeorderno order
接下去就按run执行试验,结果测试通过。虽然在脚本中根本没对writeorderno函数做说明,但是当QTP运行到这句代码的时候,在本脚本里没说明的情况下,自己会到"resource"选项里去找。结果QTP能正确识别这个writeorderno 函数。打开c盘里的 result1.txt的结果文件,发现传进函数的值1,被正确的写了进去。预示着整个调用共享文件的成功。QTP的登陆脚本设计
2007-11-02 17:10:37
由于一直以来事情都比较多,最近上课还有其它的事情,所以本来答应一个朋友把脚本帮他写一些,但是耽误了3-4天了,实在不好意思。这里把脚本简单说一下,我们分析一下。
用QTP做自动化测试过程剖析
2007-11-02 17:02:43
在我看来,实现自动化测试有两种方式:一、对于特定的系统录制或者编写脚本,实现特定系统的自动化测试。二、自己编写测试工具,对于同一类的软件进行测试。这种软件的基本功能是,抓取被测对象,根据抓取的对象生成测试脚本。这个适合于需要测试的多个项目具有大致相同的特征,比如说,要测试的项目都是管理信息系统,项目中大部分功能都类似。都是新增、修改、删除。功能相似的情况下,要进行测试的范围也大致相同。比如对于新增,都要测试超长啊,无效的数据。这种情况下,编写一个通用的工具,制定公共的测试点,然后根据被测对象生成测试脚本是比较可取的方法。
下面我以 通过QTP工具实现对www.xxx.com中交易管理的自动化测试的过程为例子,说明一下我是如何做的及碰到的哪些问题。
首先说下被测系统的背景知识。www.xxx.com是个支付平台,买家和卖家在这里完成完整的交易支付过程。
下面我从几个方面来说一下实施自动化测试的一个大体的过程,当然这只是最基础的一部分,后面要做的工作还很多。
首先,对所测的业务系统进行分析,抽取公共操作,定义接口参数。目前我简单分析了几个部分:
创建交易;买家付款;卖家发货;买家确认收货;买家发起退款_未收货;卖家同意退款;买家发起退款_已收货;卖家拒绝退款_买家已收货;买家修改退款协议_已收货;卖家同意退款_买家已收货;买家发货;卖家确认收货退款;
其次,确定实现方式,也就是技术框架和细节。包括:
所有这些接口的调用方式;变量及函数的存放位置[位置有外部的vbx文件和QTP自己的文件]。
在QTP中,不支持调用脚本,只能调用脚本中的某个Action。所以最好把这些基础性的动作放在一个脚本文件中。
在QTP中,调用Action传参数可以通过两种方法实现:1、利用Action本身的参数。在Acition的属性中,可以定义输入输出参数。2、参数化输入数据。这两种方法都很容易的。
在别的脚本中调用其他脚本的Action时,还需要两个脚本共享对象库,被调用的Action还需要设置为Reusable。
最后,所有的技术细节都准备好后,就可以开始录制脚本了。
录制过程中,千万要记得把一些组件或者页面重命名为有意义的,这样在以后维护的时候可以更清楚一些。否则以后你回对着N个相同的页面名称加上“_n"这样的后缀的对象不知所措。
由于第一次接触QTP,工作过程中碰到了一些问题,把重要的列举如下:
1、如何在一个脚本中调用另外的脚本?解决办法:在QTP中脚本无法重复调用,只能调用脚本中的Action。如果一个脚本中的某个Action需要被外部调用,需要设置:a、脚本的属性为Reusable。b、设置脚本的object repository type 为 shared,这样,此脚本的对象可以被别的脚本使用。
2、登陆时用户名和密码的参数化问题:由于系统有两种用户,经常需要用不同的用户登陆,如果是把用户名和密码做成参数化,需要手工频繁修改参数。最后考虑把登陆部分放到外部文件中,以函数的形式调用。
3、如何只运行指定的Action?我把所有的交易动作都放在了一个脚本里,每个动作是一个Action。这样需要组合不同的Action完成不同的业务,需要运行指定的Action。现在还没有找到方法。暂时采用新建一个运行脚本,调用基础脚本里的各种操作完成业务。
4、一个Action的输入参数依赖于另一个Action的输出。这个在参数的传递上用什么来实现呢?用脚本里的全局参数来传递。
QTP中测试环境的初始化
2007-11-02 17:01:53
首先我们用QTP中的object spy来看一下这个窗口的属性,找到我们可以利用的属性
这边我想利用的就是这个窗口的名称属性及值,利用这个名称属性来告诉QTP该关闭哪个窗口属性.
代码如下:
Dim loginwin
需要更改的地方,我用蓝色表示了,大家也可以自己试试.不过有一点要注意就是,要执行关闭窗口的关系,这个也完全依照windows的特性来做.最上面的处在激活状态的先关,然后依次关闭其他的窗口.否则脚本会无法执行.可以把这段脚本放在脚本的最前面,实现测试环境的初始化
TD与QTP连接
2007-11-02 16:59:09
用QTP调用外部vbs读写XML的例子
2007-11-02 16:58:14
目前,企业中对XML的应用越来越广泛,作为自动化测试的测试工程师,也应该掌握XML的读写操作。 以下我使用XML DOM技术演示一个例子,用以读取XML指定节点的节点内容值。
CODE:
'==================================================================
CODE:
<?xml version="1.0" encoding="GB2312"?>
欢迎光临!4mC3atestingsfwtruE9
欢迎光临!4mC3atestingsfwtruE9<ROOT>
欢迎光临!4mC3atestingsfwtruE9<TestCase>
欢迎光临!4mC3atestingsfwtruE9<TestNumberOne>1</TestNumberOne>
欢迎光临!4mC3atestingsfwtruE9<TestNumberTwo>2</TestNumberTwo>
欢迎光临!4mC3atestingsfwtruE9<TestNumberThree>+</TestNumberThree>
欢迎光临!4mC3atestingsfwtruE9<TestResult>3</TestResult>
欢迎光临!4mC3atestingsfwtruE9</TestCase>
欢迎光临!4mC3atestingsfwtruE9<TestCase>
欢迎光临!4mC3atestingsfwtruE9<TestNumberOne>3</TestNumberOne>
欢迎光临!4mC3atestingsfwtruE9<TestNumberTwo>2</TestNumberTwo>
欢迎光临!4mC3atestingsfwtruE9<TestNumberThree>-</TestNumberThree>
欢迎光临!4mC3atestingsfwtruE9<TestResult>1</TestResult>
欢迎光临!4mC3atestingsfwtruE9</TestCase>
欢迎光临!4mC3atestingsfwtruE9<TestCase>
欢迎光临!4mC3atestingsfwtruE9<TestNumberOne>3</TestNumberOne>
欢迎光临!4mC3atestingsfwtruE9<TestNumberTwo>7</TestNumberTwo>
欢迎光临!4mC3atestingsfwtruE9<TestNumberThree>*</TestNumberThree>
欢迎光临!4mC3atestingsfwtruE9<TestResult>21</TestResult>
欢迎光临!4mC3atestingsfwtruE9</TestCase> <TestCase>
欢迎光临!4mC3atestingsfwtruE9<TestNumberOne>2</TestNumberOne>
欢迎光临!4mC3atestingsfwtruE9<TestNumberTwo>5</TestNumberTwo>
欢迎光临!4mC3atestingsfwtruE9<TestNumberThree>/</TestNumberThree>
欢迎光临!4mC3atestingsfwtruE9<TestResult>0.4</TestResult> </TestCase>
欢迎光临!4mC3atestingsfwtruE9</ROOT>
然后,在QTP的expert view中调用刚才写的vbs文件:
点“Run”,就能看到这个效果了。
QTP导入EXCEL文件
2007-11-02 16:56:45
找了很久,结合资料和VB。终于可以从EXCEL中读入数据
Dim conn,rst,filename
QTP中虚拟对象设置
2007-11-02 16:55:15
相关阅读:
- QTP 学习中。。。 (lovewedy, 2009-8-18)
- GetTextLocation —— 依据文本值动态获取坐标进行点击、拖拽操作 (hsjzfling, 2009-8-20)
- 当WatiN爱上QTP (fishy, 2009-8-27)
- 对QTP自动化测试框架的一点认识 (丛林猎手, 2009-9-03)
- QTP应用模式设计 (丛林猎手, 2009-9-03)
- QTP验证达到预期结果而等待的处理方法 (丛林猎手, 2009-9-03)
- 自动化测试获取和删除cookies的方法 (丛林猎手, 2009-9-03)
- 右击鼠标事件的实现(QTP及Ruby) (丛林猎手, 2009-9-03)
- 不可编辑控件的变相解决方式 (丛林猎手, 2009-9-03)
- 揭秘QTP的DeviceReplay对象 (丛林猎手, 2009-9-03)
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | 5 | 6 | ||||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 |
我的存档
数据统计
- 访问量: 30849
- 日志数: 71
- 建立时间: 2009-09-03
- 更新时间: 2012-02-11