51Testing软件测试论坛

标题: 尝试封装一些经常要用到的制程序和函数,抛砖引玉: [打印本页]

作者: rivermen    时间: 2007-5-24 16:52
标题: 尝试封装一些经常要用到的制程序和函数,抛砖引玉:
尝试封装一些经常要用到的制程序和函数:
1. 创建一个vbs文件:TestVbs.vbs
内容如下:
'##################################################################################
'##################################################################################
Sub CloseWeb()

'         此处可以用到描述性编程,把先期打开的IE窗口全关闭
Dim WinIe,Ie,i,m
Set WinIe=description.Create()
WinIe("regexpwndtitle").value=" Microsoft Internet Explorer"  '所有页面的regexpwndtitle属性值都是" Microsoft Internet Explorer",也可以用其他属性
Set Ie=desktop.ChildObjects(WinIe)
m=Ie.count
For i=1 to m
        Ie(i-1).close                 ' 0为最后打开的一个,可关闭打开的几个,,循环改成for i=1 to m
Next
End Sub
'##################################################################################



function TestVbs(format)
        msgbox "参数是" & format
end function


'#################################################################
'#################################################################
'往文件里面写内容
'第一个参数 文件的路径
'第二个参数:写入的内容
'第三个参数:写入的格式("Appending/Writing")
' See also "FileSystemObject"
Sub Write2File(FilePath,content,style)
   Dim fso,f
   Dim stl
        If Ucase(style)="APPENDING" Then
                stl=8
        else
                if Ucase(style)="WRITING" then
                                stl=2
                else
                                        reporter.ReportEvent 1,"参数错误","Writing <" & FilePath &">:<"& content &">With<" & style & ">"
                                Exit Sub
                end if
        End If  
   Set fso=CreateObject("Scripting.FileSystemObject")
   Set f=fso.OpenTextFile(FilePath,stl,true)
   'content="写入的第一行内容"
   f.WriteLine(content)
   f.Close
   Set f=nothing
   Set fso=nothing

End Sub
'#################################################################




'#################################################################
'#################################################################
' 连接数据库子程序
' 第一个参数:根据数据库的类型,设计连接字符串(参见udl文件)
' 第二个参数:连接数据库之后,进行查询的相应语句
' 第三个参数:查询记录返回到res
Sub OpenDB(conn,sql,res)
   Set cnn=CreateObject("adodb.connection")
   cnn.open conn
   Set res=CreateObject("adodb.recordset")
   res.open sql,cnn,1,1
   
End Sub
'#################################################################




'#################################################################
'#################################################################
' 关闭数据库的连接
sub CloseDB
   Set res=nothing
        Set cnn=nothing
end sub
'#################################################################

2. QTP导入这个TestVbs.vbs 文件:
菜单:Test-->Setting-->Resource
在“Associated Library Files” 添加入该文件
这里建议可以使用 相对路径,如..\TestVbs.vbs

3. 测试封装的子程序:
用“Run from steps”运行模式(专家视图 右键,第四个菜单项,脚本从光标处运行)
在QTP 中添加测试代码:

CloseWeb()    '实现关闭当前所有的IE窗口
stop


' 调用外部函数 Write2File
Write2File "c:\File.txt","Writhing a Line","Writing"
Write2File "c:\File.txt","Appending a Line","Appending"
Write2File "c:\File.txt","Appending a Line","Appending!"   ' 参数不正确
Write2File ".\vbs\File.txt","Appending a Line","Appending"
stop


'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' 设置连接数据库所需要的初始值,包括:
' conn :数据库连接字符串
' sql:查询的SQL语句
' res:查询的返回记录

Dim conn,sql,res
conn="Provider=MSDASQL.1;Persist Security Info=False;Data Source=QT_Flight32"
sql="select * from Orders"
Set res=nothing

' 调用外部子程序 OpenDB 进行连接数据库
        OpenDB conn,sql,res
                'msgbox res.RecordCount&"行," & res.fields.count & "列"
                res.MoveFirst
           ' res.MoveNext    没有它的话,记录就成了死循环
          
                'reporter.ReportEvent 2,"测试连接数据库","数据库获取数据:" & res.fields(0)

        RowCount=res.RecordCount
        ColumnCount=res.fields.count
        While not res.eof
                Record=""
                For i=0 to ColumnCount-1
                        Record=Record & ":" &res.fields(i)
                Next
                        Record=mid(Record,2)
                        reporter.ReportEvent 2,"数据库记录:",Record
                res.MoveNext
        Wend
  
' 调用外部子程序 CloseDB关闭数据库
        CloseDB
作者: yuandjing    时间: 2007-5-24 17:08
嗯,平时用的到的
作者: rivermen    时间: 2007-5-25 10:55
自己顶
作者: walker1020    时间: 2007-6-11 09:08
不错,值得学习,偶就把它放在 [QTP精华区] 了。
作者: kursk    时间: 2007-6-11 09:44
太好了,十分感谢
作者: rivermen    时间: 2007-6-11 10:27
发这一帖的初衷还是希望大家能够根据现实中使用QTP的经验,把经常能够用的到的功能,封装成sub/function 有一个大家互相交流和互相学习的平台。
希望捧场!!!
作者: wuzhuayu    时间: 2007-6-11 10:34
写得不错。感谢lz
作者: E22E    时间: 2007-6-13 13:38
第一个例子怎么用?
作者: rivermen    时间: 2007-6-13 14:04
标题: 回复 #8 E22E 的帖子
CloseWeb()    '实现关闭当前所有的IE窗口
一般放在所有的代码之前。

回放的时候,预先关闭所有打开的IE窗口,然后才开始

[ 本帖最后由 rivermen 于 2007-6-13 14:20 编辑 ]
作者: wilson    时间: 2007-6-13 17:48
very good
作者: nan3937    时间: 2007-6-14 02:44
标题: 来捧场了
进步很大嘛~是你工作中用到,还是你自己不断摸索?
很希望和你成为同事额闹,不过我现在刚刚加班到家^_^不知道你还愿意否?
作者: jacky9947    时间: 2007-7-5 16:47
哎呀,谢谢楼主了
作者: yqx    时间: 2008-4-11 11:42
感谢,要好好学习下
作者: yqx    时间: 2008-4-14 09:56
good.受用了
作者: achang21    时间: 2009-4-12 10:46
还不错!支持一个! 希望有更多的共享 呵呵^_^
作者: joe_8086    时间: 2009-6-3 10:47
很不错嘛. 学习了之后,就是找不到很好的练兵场哦. hehe




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