QTRunner

来源:互联网 发布:知乎slu圣路易斯大学 编辑:程序博客网 时间:2024/05/22 08:44

自动化测试框架中必不可少的一部分是测试脚本的调度执行,一般采用AOM方式调用QTP,需要包括设置测试参数、指定测试结果文件存储的目录、记录执行过程日志、发送邮件等功能,应该可以与持续集成框架结合。

 

写了个Demo,我把它叫做QTRunnerVBS脚本如下:

 

LogFile = "Logs/QTRunnerLog"           '设置Log文件路径及文件名,可从命令行传入,需改为:Set logFileObj=GetLogObj(argObj(0))

Set logFileObj=GetLogObj(LogFile)

Response "--- Start a new batch task at " & Date & " " & Time

Response "Console logs are saved in " & LogFile & ".log"

 

' 从配置文件读入各种参数

Set ConfigParameters = CreateObject("Scripting.Dictionary")

ConfigFile = "config.ini"

ReadTestsFromConfigFile ConfigFile , ConfigParameters

Response "Reading Test Configurations From " & ConfigFile

 

' 运行测试

RunTest

CloseLogObj logFileObj

 

' 发送Email

SendMail LogFile & ".log"

 

 

 

'----------------------------------------------------------------------------------

' 读取配置文件

Function ReadTestsFromConfigFile( ByVal ConfigFile , ByRef ConfigParameters )

       Set GetParameters = ConfigParameters

       Dim fso, f, lineStr, isValid

       Set fso = CreateObject("Scripting.FileSystemObject")

       If Not fso.FileExists(ConfigFile) Then

              Response ConfigFile & " not found"

              Exit Function

       End If

       Dim TestCount

       TestCount=0

       Set f=fso.OpenTextFile(ConfigFile,1,False)         'Open file for read, if not existed, don't created it.

       Do While f.AtEndOfStream <> True

              lineStr = f.ReadLine()     

         lineStr=Trim(lineStr)

         If lineStr<>"" Then           'not empty line

                     If InStr(1,lineStr,"#") = 1 Then    'begin with "#"             

                            TestCount = TestCount + 1  

                            TestPathStr=Trim(Right(lineStr,Len(lineStr)-1))

                            GetParameters.Add TestCount, TestPathStr

                     ElseIf InStr(1,lineStr,"ResultPath=") = 1 Then

                            ResultPathStr = Trim(Right(lineStr,Len(lineStr)-11))

                            GetParameters.Add "ResultPath", ResultPathStr

                     ElseIf InStr(1,lineStr,"smtpserver=") = 1 Then

                            smtpserver = Trim(Right(lineStr,Len(lineStr)-11))

                            GetParameters.Add "smtpserver", smtpserver

                     ElseIf InStr(1,lineStr,"sendusername=") = 1 Then

                            sendusername = Trim(Right(lineStr,Len(lineStr)-13))

                            GetParameters.Add "sendusername", sendusername

                     ElseIf InStr(1,lineStr,"sendpassword=") = 1 Then

                            sendpassword = Trim(Right(lineStr,Len(lineStr)-13))

                            GetParameters.Add "sendpassword", sendpassword

                     ElseIf InStr(1,lineStr,"Email_Address=") = 1 Then

                            Email_Address = Trim(Right(lineStr,Len(lineStr)-14))

                            GetParameters.Add "Email_Address", Email_Address

                     End If

         End If

       Loop      

       f.Close

       GetParameters.Add "TestCount", TestCount

       Set ReadTestsFromConfigFile = GetParameters  

End Function

 

' 通过AOM调用QTP执行测试

Function RunTest

       Dim qtApp

       Dim qtTest

       Dim qtResultsOpt

       stime = Now

       sdate = Year(stime) & "." & Month(stime) & "." & Day(stime) & "_" & Hour(stime) & "." & Minute(stime) & "." & Second(stime)

 

       Set qtApp = CreateObject("QuickTest.Application")

       qtApp.Launch

       qtApp.Visible = True

       Response "Launching QTP..."

      

       TestCount = ConfigParameters.Item("TestCount")

       For I=1 To TestCount   

              TestPath = ConfigParameters.Item(I)

              arr = Split(TestPath,";")

              testfile = arr(0)

              qtApp.Open testfile, True

              Set qtTest = qtApp.Test

              Response "-------------------------"

              Response "Opening Test " & arr(0)

             

              Set oParams = qtApp.Test.ParameterDefinitions.GetParameters()

              If UBound(arr) = 1 Then

                            ParamArr = Split(arr(1),",")

                            paramCount = UBound(ParamArr)

                            For K=0 to paramCount

                                   oParam = Split(ParamArr(K),"=")

                                   ParamName = oParam(0)

                                   ParamValue = oParam(1)

                                   oParams.Item(ParamName).Value = ParamValue

                            Next

              End If

             

              ResultPath = ConfigParameters.Item("ResultPath") & "/" & sdate & "/" & qtTest.Name

              Set qtResultsOpt = CreateObject("QuickTest.RunResultsOptions")

              qtResultsOpt.ResultsLocation = ResultPath

              Response "The Result of Test " & testfile & " will be save in " & ResultPath

 

              qtTest.Run  qtResultsOpt, True, oParams  ' Run the test

              Response "Runing Test " & testfile

 

              Response testfile & "End Running With " & qtTest.LastRunResults.Status & "Status"

              Response "Parameter List:"

              For P = 1 to oParams.Count

                     Response oParams.Item(P).Name & "=" & oParams.Item(P).Value

              Next      

 

              qtTest.Close

              Response "Closing Test " & testfile

              Response "-------------------------"

              Next

       qtApp.Quit

       Set oParams = Nothing

       Set qtResultsOpt = Nothing

       Set qtTest = Nothing

       Set qtApp = Nothing

End Function

 

' 写日志

Function Response(ByVal msg)    

       logFileObj.WriteLine Date & " " & Time & ": " & msg

       If isRunInCmd Then            

              WScript.Echo Date & " " & Time & ": " & msg

       End If

End Function

 

' 创建日志文件

Function GetLogObj(ByVal cfilePath)

       Dim fso, runtimeLog

       Set fso = CreateObject("Scripting.FileSystemObject")

      

       If Not fso.FileExists(cfilePath) Then

              fso.CreateTextFile(cfilePath)

       End If

      

       runtimeLog=cfilepath & ".log"            

       Set GetLogObj = fso.OpenTextFile(runtimeLog, 8, True)   'open file for appending.     

End Function

 

' 关闭日志文件

Function CloseLogObj(ByVal cfile)

       cfile.Close

End Function

 

' 发送邮件

Function SendMail(LogFile)

       Set oMessage=WScript.CreateObject("CDO.Message")

       Set oConf=WScript.CreateObject("CDO.Configuration")

       Set fso = CreateObject("Scripting.FileSystemObject")

      

       '创建CDO.Configuration对象后,需要设置邮件服务器的端口、用户帐号等相关信息

       oConf.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing")=2

       oConf.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver")=ConfigParameters.Item("smtpserver")

       oConf.Fields("http://schemas.microsoft.com/cdo/configuration/serverport")=25

       oConf.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")=1

       oConf.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername")=ConfigParameters.Item("sendusername")

       oConf.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword")=ConfigParameters.Item("sendpassword")

       oConf.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl")=0

       oConf.Fields.Update()

        

       '通过CDO Message对象设置邮件主题、附件、发送人等信息

       oMessage.Configuration = oConf

       oMessage.To = ConfigParameters.Item("Email_Address")

       oMessage.From = ConfigParameters.Item("sendusername")

       oMessage.Subject = "QTRunner Notification"

       file = fso.GetAbsolutePathName(LogFile)

       Set fso = Nothing

       oMessage.AddAttachment( file )

 

       TextBody = "QTRunner Finish! See attachment for logs."    

       oMessage.TextBody = TextBody

       oMessage.Send()

End Function

 

 

配置文件格式如下:

#D:/Automation Framworks/RunTest/QTRunner_VBS/Tests/Test1;DBType=SQLServer2000,DBName=Pubs,UserID=sasa,Password=123456

#D:/Automation Framworks/RunTest/QTRunner_VBS/Tests/Test2

 

ResultPath=D:/Automation Framworks/RunTest/QTRunner_VBS/TestResults

 

smtpserver=smtp.126.com

sendusername=allencnj@126.com

sendpassword=XXXXXX

Email_Address=allencnj@126.com,testing_is_believing@126.com

 

 

生成的日志文件如下:

2009-12-19 12:29:55: --- Start a new batch task at 2009-12-19 12:29:55

2009-12-19 12:29:55: Console logs are saved in Logs/QTRunnerLog.log

2009-12-19 12:29:55: Reading Test Configurations From config.ini

2009-12-19 12:30:07: Launching QTP...

2009-12-19 12:30:10: -------------------------

2009-12-19 12:30:10: Opening Test D:/Automation Framworks/RunTest/QTRunner_VBS/Tests/Test1

2009-12-19 12:30:10: The Result of Test D:/Automation Framworks/RunTest/QTRunner_VBS/Tests/Test1 will be save in D:/Automation Framworks/RunTest/QTRunner_VBS/TestResults/2009.12.19_12.29.55/Test1

2009-12-19 12:30:13: Runing Test D:/Automation Framworks/RunTest/QTRunner_VBS/Tests/Test1

2009-12-19 12:30:13: D:/Automation Framworks/RunTest/QTRunner_VBS/Tests/Test1End Running With PassedStatus

2009-12-19 12:30:13: Parameter List:

2009-12-19 12:30:13: DBName=Pubs

2009-12-19 12:30:13: DBType=SQLServer2000

2009-12-19 12:30:13: Password=123456

2009-12-19 12:30:13: Result=True

2009-12-19 12:30:13: UserID=sasa

2009-12-19 12:30:15: Closing Test D:/Automation Framworks/RunTest/QTRunner_VBS/Tests/Test1

2009-12-19 12:30:15: -------------------------

2009-12-19 12:30:17: -------------------------

2009-12-19 12:30:17: Opening Test D:/Automation Framworks/RunTest/QTRunner_VBS/Tests/Test2

2009-12-19 12:30:17: The Result of Test D:/Automation Framworks/RunTest/QTRunner_VBS/Tests/Test2 will be save in D:/Automation Framworks/RunTest/QTRunner_VBS/TestResults/2009.12.19_12.29.55/Test2

2009-12-19 12:30:20: Runing Test D:/Automation Framworks/RunTest/QTRunner_VBS/Tests/Test2

2009-12-19 12:30:20: D:/Automation Framworks/RunTest/QTRunner_VBS/Tests/Test2End Running With PassedStatus

2009-12-19 12:30:20: Parameter List:

2009-12-19 12:30:22: Closing Test D:/Automation Framworks/RunTest/QTRunner_VBS/Tests/Test2

2009-12-19 12:30:22: -------------------------

 

 

 

原创粉丝点击