Jay-Yang84 发表于 2009-4-2 20:36:05

轻量级qtp自动化测试框架

转贴: http://bbs.51testing.com/viewthread.php?tid=142508

下载了mklodoss改良的轻量级qtp自动化测试框架, 无法在公司看, 所以贴出来方便公司不允许下载的朋友阅读, 原文地址:http://bbs.51testing.com/viewthread.php?tid=142508

Driver.vbs:

Call driver()

Function driver()
        '初始化环境,包括获得project所在的本地目录。
        projectPath = getProjectPath()
        sourceDataFile = projectPath&"\testCases.xls"
        sourceDataSheet = "TestCases"
       
        Dim qtApp 'As QuickTest.Application ' Declare the Application object variable
        Dim qtTest 'As QuickTest.Test ' Declare a Test object variable
        Dim qtResultsOpt 'As QuickTest.RunResultsOptions ' Declare a Run Results Options object variable
       
        Set qtApp = CreateObject("QuickTest.Application") ' Create the Application object
        qtApp.Launch ' Start QuickTest
        qtApp.Visible = True ' Make the QuickTest application visible
        ' Set QuickTest run options
        qtApp.Options.Run.CaptureForTestResults = "OnError"
        qtApp.Options.Run.RunMode = "Fast"
        qtApp.Options.Run.ViewResults = False
       
        ' 打开入口的测试脚本,并且加载testCase的脚本
        qtApp.Open projectPath&"\Driver", False, False' 打开入口的测试脚本,可写,不保存
        Set qtTest = qtApp.Test
       
                ' set run settings for the test
                Set qtResultsOpt = CreateObject("QuickTest.RunResultsOptions")
                qtResultsOpt.ResultsLocation = projectPath&"\result" '运行结果保存到临时文件夹中
                qtTest.Run qtResultsOpt, True   

       
        qtTest.Close
        Set qtResultsOpt = Nothing ' Release the Run Results Options object
        Set qtTest = Nothing ' Release the Test object
        qtApp.quit
        Set qtApp = Nothing ' Release the Application object
End Function


Function getProjectPath()
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objFile = objFSO.GetFile(wscript.scriptfullname)
        getProjectPath = objFSO.GetParentFolderName(objFile)
        Set objFSO = Nothing
        Set objFile = Nothing
End Function

Jay-Yang84 发表于 2009-4-2 20:37:29

回复 1# 的帖子

Driver Action:

Set fso = CreateObject("Scripting.FileSystemObject")
ProjectDir = fso.getparentfoldername(Environment.Value("TestDir"))
ProjectDir = ProjectDir+"\"
Set fso = nothing
'项目所在的根目录,如"D:\project\",这个路径的末位是有一个反斜线的
TestSetExcelFile = ProjectDir&"testSets.xls"   '管理所有测试用例的Excel文件的路径
testScriptFolderName =ProjectDir&"testScript" 'task脚本文件所在的根目录
testDataFolderName = ProjectDir&"testData"'测试数据文件所在的根目录
FrameUtilFolder = ProjectDir&"FrameUtil"
Environment("ProjectDir")= ProjectDir
Environment("TestSetExcelFile")= TestSetExcelFile
Environment("testScriptFolderName")= testScriptFolderName
Environment("testDataFolderName")= testDataFolderName
Environment("Log_Dir")= ProjectDir&"\logs"
Environment("numSuccess")= 0
Environment("numErrors")= 0
Msgbox "请关闭相关的Excel表!"
Dim   TestScriptObject
Set TestScriptObject = CreateObject("Scripting.Dictionary")

Call ImportUtilFun(FrameUtilFolder)
Function ImportUtilFun(ImportFolder)
      Set fso = CreateObject("Scripting.FileSystemObject")                                                      '加载FrameUtil目录下的所有共享库函数的VBS文件
      Set UtilFolder=fso.GetFolder(ImportFolder)
          Set UtilFileCollection=UtilFolder.files
          For each UtilFile in UtilFileCollection
            Executefile UtilFile.path
          Next
          Set fso = nothing
End Function

Dim fso, ofile
Set fso = CreateObject("Scripting.FileSystemObject")
Iffso.fileexists(Environment("Log_Dir")&"\runtime.xml")Then
        fso.deletefile Environment("Log_Dir")&"\runtime.xml"
End If

Jay-Yang84 发表于 2009-4-2 20:38:14

xmlLogPrint "<?xml version=""1.0"" encoding=""GB2312""?>"
'******************************************TestProject类,这个类中很多个测试 用例集(TestSets)******************************************************
'******************************************这里用 一个变量testSets表示,testSets是一个结构 ,请看下面注释******************************************
Class TestProject   

Public Function StartTestProject (ExcelName)   '这里传入一个excel表格的路径。
          xmlLogPrint "<Project>"
          InitTestProjectExcelName                                  '用传入参数作一些初始化操作
                  'msgbox testSets.Count
          For i =0To testSets.Count -1                              '循环执行每个TestSet
         Set objTestSet = new TestSet                        '构造一个TestSet对象
             TestSetArrays = testSets.Items
             TestSetArray = TestSetArrays(i)
                       xmlLogPrint "<"&TestSetArray(0)&">"
             objTestSet.StartTestSet(TestSetArray)       '传入一个test结构,执行TestSet
                       xmlLogPrint "<"&"/"&TestSetArray(0)&">"
                  Set objTestSet = nothing
          Next
                   xmlLogPrint "<测试结果统计>"&"Successed"& Environment("numSuccess")&"例,"&"Failed"&Environment("numErrors")&"例!"
                   xmlLogPrint "</测试结果统计>"
                   xmlLogPrint "</Project>"
                  DataTable.DeleteSheet"TestSets"
End Function

Private Function InitTestProject(ExcelName)

         Set testSets = CreateObject("Scripting.Dictionary")
         TestSetExcelFile = ProjectDir&ExcelName
         MyTestSets = "TestSets"
         DataTable.AddSheet(MyTestSets)
               Err.Clear
               On Error Resume Next
         DataTable.ImportSheet TestSetExcelFile,1, MyTestSets
             Iferr.number = 0Then
         row_count = DataTable.GetSheet(MyTestSets).GetRowCount
               Dim setArray(3)
         For i = 1 To row_count
            DataTable.GetSheet(MyTestSets).SetCurrentRow(i)
            isRun = DataTable.Value("IDX", MyTestSets)
            If isRun = "√"Then
               testsetName = DataTable.Value("name", MyTestSets)
               setArray(0)= testsetName                                                          'testSets结构中包含用例集的name列
               setArray(1)= DataTable.Value("table", MyTestSets)      'testSets结构中包含用例集的table列
               setArray(2)= DataTable.Value("sheet", MyTestSets)      'testSets结构中包含用例集的table列
                           Iferr.number = 0 Then
                                   testSets.Add testsetName, setArray
                           else
                                Msgbox"检查TestSets.xls表中的字段IDX, name, table, sheet 字段是否有错."
                           End If                                 
            End If
                        err.clear       
      Next
                else
                     Msgbox"检查TestSets.xls表是否有打开"
                End If
                On Error Goto 0
End Function

Jay-Yang84 发表于 2009-4-2 20:39:16

Private   testSets                  

End Class
'******************************************TestProject类,这个类中很多个测试 用例集(TestSets)******************************************************


'******************************************TestSet类,这个类中很多个业务流程(TestCases)******************************************************
Class TestSet

Public Function StartTestSet(testsetArray)
                  InitTestSet testsetArray
                  For i = 0 To testCases.Count -1         
                        TestCaseArrays = testCases.Items
                        TestCaseArray = TestCaseArrays(i)               
                                                If   TestCaseArray(3) = "√" Then
                                                        xmlLogPrint "<"&TestCaseArray(0)&">"
                                                        Set objTestCase = new TestCase
                                                        objTestCase.StartTestCase(TestCaseArray)
                                                  xmlLogPrint"<"&"/"&TestCaseArray(0)&">"
                                                  Set objTestCase = nothing
                                                End If      
                  Next
                                       DataTable.DeleteSheet "TestCases"
End Function

PrivateFunction InitTestSet(testsetArray)

                  testsetName = testsetArray(0)
                  testsetTable = testsetArray(1)
                  testsetSheet = testsetArray(2)
                                  Environment("TestSetsTable") = testsetTable
                  Set testCases = CreateObject("Scripting.Dictionary")
                  testDataFolderName =ProjectDir&"testData"'测试数据文件所在的根目录
                  testsetTable = pathFind(testDataFolderName,testsetTable, "xls")'测试数据文件的绝对路径
                  MyTestCases = "TestCases"
                  DataTable.AddSheet(MyTestCases)
                                  On error Resume Next
                  DataTable.ImportSheet testsetTable,1, MyTestCases'导入TestCases表
                   If   not Err.Number = 0Then
                                      msgbox "请检查"&testsetTable&"是否存在或已经被打开,检查testsets.xls,中与之对应的table, sheet栏的名字"
                  else
                  row_count = DataTable.GetSheet(MyTestCases).GetRowCount
                  tempcaseName = ""
                                  Dim caseArray(4)
                  For i = 1 To row_count-1
                      DataTable.GetSheet(MyTestCases).SetCurrentRow(i)
                      isRun = DataTable.Value("IDX", MyTestCases)
                      If isRun = "业务流程"Then
                                                  If Not tempcaseName = "" Then
                                                      caseArray(2) = i-1   '该case结束时的行数
                                                                 testCases.Add testcaseName, caseArray
                         End If
                        
                         testcaseName = DataTable.Value("bizName", MyTestCases)
                         caseArray(0) = testcaseName
                         caseArray(1) = i+1'该case开始时的行数
                                               tempcaseName = testcaseName
                                               caseArray(3)= DataTable.Value("description", MyTestCases)
                                               If    not err.number = 0 Then
                                                       msgbox "检查"&testsetTable&"中IDX, bizName, description 中各字段是否有错!"
                                                          Err.Clear
                                               End If
                      End If           
               Next
                                  caseArray(2) = row_count
                                                testCases.Add tempcaseName, caseArray   '*****************************增加是否有重复的判断.
                          End IF
                               On error Goto 0
          End Function
         
      PrivatetestsetName
      PrivatetestsetTable
      PrivatetestsetSheet
      PrivatetestCases
End Class

'******************************************TestSet类,这个类中很多个业务流程(TestCases)******************************************************


'******************************************TestCase类,这个类中很多个Tasks******************************************************
Class TestCase

Jay-Yang84 发表于 2009-4-2 20:39:36

PublicFunction StartTestCase(TestCaseArray)
   
            InitTestCase TestCaseArray
            For i = 0 To testTasks.Count-1
                  Set objTestTask = new TestTask
                  TestTaskArrays = testTasks.Items
                  TestTaskArray = TestTaskArrays(i)
               objTestTask.StartTestTask(TestTaskArray)
                               taskLogPrint TestTaskArray(1)
                               Set objTestTask = nothing
            Next
            
   End Function
   
PrivateFunction InitTestCase(TestCaseArray)
             testcaseName = TestCaseArray(0)
             casestartRow = TestCaseArray(1)
             caseendRow   = TestCaseArray(2)
             Set testTasks = CreateObject("Scripting.Dictionary")
             'task所在的数据表已经导入,TestCases表
             MyTestTasks = "TestCases"
             Dim j
             j = 0
                       Dim taskArray(4)
                          On Error Resume Next
             For i = casestartRow To caseendRow
                DataTable.GetSheet(MyTestTasks).SetCurrentRow(i)
                isRun = DataTable.Value("IDX", MyTestTasks)
                   If isRun = "√" Then
                  classoftesttask = DataTable.Value("bizName", MyTestTasks)
                  testtaskName = DataTable.Value("taskName", MyTestTasks)
                  tableOfTask = DataTable.Value("bizDataTable", MyTestTasks)
                  taskFilter = DataTable.Value("filter", MyTestTasks)
                  taskArray(0) = classoftesttask
                  taskArray(1) = testtaskName
                  taskArray(2) = tableOfTask
                  taskArray(3) = taskFilter
                                        If   Err.Number = 0 Then
                  testTasks.Add j, taskArray
                  j = j+1
                                        else
                                             msgbox   "请检查"&MyTestCases&"表中IDX, bizName, description, filter,taskName各字段有没有错!"
                   End If
                             Err.Clear
                                End If             
             Next
                          On Error Goto 0

End Function


Private   testcaseName
Private   casestartRow
Private   caseendRow
Private   testTasks

End Class

'******************************************TestCase类,这个类中很多个Tasks******************************************************

'******************************************TestTask类******************************************************
Class TestTask
Private Function InitTestTask(TestTaskArray)
            classoftesttask = TestTaskArray(0)
            testtaskName = TestTaskArray(1)
                       ' msgbox testtaskName
            tableOfTask= TestTaskArray(2)
                          'msgbox tableOfTask
               taskFilter= TestTaskArray(3)
                           ' msgbox taskFilter
End Function

Jay-Yang84 发表于 2009-4-2 20:39:55

Private Function ExecuteTask(taskDataSheetName, TaskDataFilePath)
                  DataTable.AddSheet(taskDataSheetName)
                                       On Error Resume Next
                                     DataTable.ImportSheet TaskDataFilePath,taskDataSheetName,taskDataSheetName
                                       IfErr.number = 0 Then
                                          test_data_row_count = DataTable.GetSheet(taskDataSheetName).GetRowCount
                                        '   msgboxtest_data_row_count
                                          For j=1 To test_data_row_count
                                                DataTable.GetSheet(taskDataSheetName).SetCurrentRow( j )
                                                        'msgbox taskDataSheetName
                                                  'msgbox taskFilter
                                                    If Eval(generateFilterExp(taskDataSheetName,taskFilter)) Then
                                                              'Eval(generateFilterExp(Sheet_Name,filterExp)) ,解析测试数据的条件语句,符合此条件的,则执行该行测试数据,否则不执行
                                    str = "obj"&classoftesttask&"."&testtaskName&" "&chr(34)&taskDataSheetName&chr(34)
                                    Execute str
                                                                        ErrorXmlPrint   '如果有错误则输出。
                                                                        Ifnot err.number = 0 Then
                                       Environment("bResult") = "失败"
                                                                        End If
                                                                   Err.Clear
                              End If
                        Next
                                                sheetName =taskDataSheetName
                                    DataTable.DeleteSheetsheetName
                                        else
                                             Msgbox "检查"&TaskDataFilePath&"中是否有表"&taskDataSheetName
                                       End if
                          On Error Goto 0
End Function
      
Public Function StartTestTask(TestTaskArray)
            InitTestTask TestTaskArray
                          Environment("bResult") = "成功"'默认开始执行每一个的步骤为成功
            If Not TestScriptObject.Exists (classoftesttask)then
                                     taskFilePath = pathFind(Environment("testScriptFolderName"),classoftesttask,"vbs")
                                          On Error Resume Next
                                    ExecuteFile taskFilePath   'executefileqtp独有的加载外部的vbs 文件.
                                                If Err.Number = 0Then
                                                        TestScriptObject.add classoftesttask,taskFilePath
                           Execute "Set obj"&classoftesttask&" = new "&classoftesttask
                                                       Ifnot Err.Number = 0 Then
                                 msgbox "查看"&taskFilePath&"中是否有"& classoftesttask&"类"
                                                                   Err.Clear
                                                       End If
                            Else
                                                  msgbox "请查看"&taskFilePath&"是否存在或者taskFilePath中有错误!"
                     End If   
                                       On Error Goto 0
               End If
                 
                      '开始执行task
                   If Not tableOfTask="" Then
                   tempArray = split(tableOfTask,".")
               If UBound(tempArray)=0 Then
                                   TaskDataFilePath = pathFind(Environment("testDataFolderName"), Environment("TestSetsTable"),"xls")
                                               ExecuteTask tempArray(0), TaskDataFilePath
                                  else
                                  '如果是引用的外部Excel的sheet,那么。。。
                                  TaskDataFilePath = pathFind(Environment("testDataFolderName"),tempArray(0),"xls")
                                  
                  ExecuteTask tempArray(1), TaskDataFilePath

                              End If
                             
                  Else
                                  '如果Sheet名称为空则不加载
                             str = "Call obj"&classoftesttask&"."&testtaskName&"()"
                                On error resume Next
                               Execute str
                               ErrorXmlPrint
                               Ifnot err.number = 0 Then
                  Environment("bResult") = "失败"
                               End If
                                On error Goto 0
                  End If
                        '计算成功和失败的用例数
                        If   Environment("bResult") = "成功" Then
                   Environment("numSuccess") =Environment("numSuccess") +1
                     else
                            Environment("numErrors") =Environment("numErrors")+1
                        End If
                       
End Function
                     

Private classoftesttask
PrivatetesttaskName
Private tableOfTask
Private taskFilter

End Class

'******************************************TestTask类******************************************************

'*******************************************以上类的声明和全局变量 的定义************************************************************************

Set objtestProject = New TestProject                                             '构造一个自动化测试项目
objtestProject.StartTestProject"testSets.xls"
Set objtestProject = nothing
Set TestScriptObject = nothing

Jay-Yang84 发表于 2009-4-2 20:40:51

DiverUtil.vbs

'################################'
'---------------通用方法--------------------------'
'################################'
Function pathFind( searchingFolder,searchingFileName,fileType)
'根据传入的根目录,查找该目录下的指定名称,以及指定文件类型的文件,并返回其绝对路径。
        tempArray = Split(searchingFileName,".")
        fileName = tempArray(0)&"."&fileType
        Set fso=CreateObject( "Scripting.FileSystemObject" )
        Set objFolder = fso.GetFolder( searchingFolder )
        Set objFileCollection = objFolder.Files
        for each objFile in objFileCollection
                If objFile.Name = fileName Then
                        i=i+1
                        searchedFilePath = objFile.Path
                        Exit for
                End If
        Next
       
        If i=0 then
                '遍历子文件夹
                Set objSubFoldersCollection = objFolder.SubFolders
                For each objInputSubFolder in objSubFoldersCollection
                        searchedFilePath= pathFind(objInputSubFolder,searchingFileName,fileType)
                        If searchedFilePath<>"" Then
                                Exit For
                        End if
                Next
        End If
        pathFind = searchedFilePath
End Function

Function getParentFolderPath(curPath)
   '输入一个路径的字符串,获得其上级目录的字符串,主要目的是根据QTP脚本所在文件夹,找到工程所在的文件夹
   tempArray = split(curPath,"\")
   tempStr =""
   For i=LBound(tempArray) to UBound(tempArray)-1
                tempStr = tempStr&tempArray(i)&"\"
   Next
   getParentFolderPath = tempStr
End Function


Function generateFilterExp(Sheet_Name,filterExp)
   ''解析条件语句,只支持 >= ,<= , <>, >, <, = 这6种表达式
   '对表达式作了处理,支持中文的分号,不区分英文的大小写。
        If filterExp<>"" Then
                                If InStr(filterExp,";")>0 Then
                                        filterExp = Replace(filterExp,";",";")
                                End If
                                expressArray = Split(LCase(filterExp),";")
                                For i=LBound(expressArray) To UBound(expressArray)
                                        If InStr(expressArray(i),">=") Then
                                                tempArray = Split(expressArray(i),">=")
                                                If i=LBound(expressArray) Then
                                                        expressStr = "DataTable("&Chr(34)&tempArray(0)&Chr(34)&","&Chr(34)&Sheet_Name&Chr(34)&")"&">="&chr(34)&tempArray(1)&chr(34)
                                                else
                                                        expressStr = expressStr&" and "&"DataTable("&Chr(34)&tempArray(0)&Chr(34)&","&Chr(34)&Sheet_Name&Chr(34)&")"&">="&chr(34)&tempArray(1)&chr(34)
                                                End If
                                        ElseIf InStr(expressArray(i),"<=") Then
                                                tempArray = Split(expressArray(i),"<=")
                                                If i=LBound(expressArray) Then
                                                        expressStr ="DataTable("&Chr(34)&tempArray(0)&Chr(34)&","&Chr(34)&Sheet_Name&Chr(34)&")"&"<="&chr(34)&tempArray(1)&chr(34)
                                                else
                                                        expressStr = expressStr&" and "&"DataTable("&Chr(34)&tempArray(0)&Chr(34)&","&Chr(34)&Sheet_Name&Chr(34)&")"&"<="&chr(34)&tempArray(1)&chr(34)
                                                End If
                                        ElseIf InStr(expressArray(i),"<>") Then
                                                tempArray = Split(expressArray(i),"<>")
                                                If i=LBound(expressArray) Then
                                                        expressStr ="DataTable("&Chr(34)&tempArray(0)&Chr(34)&","&Chr(34)&Sheet_Name&Chr(34)&")"&"<>"&chr(34)&tempArray(1)&chr(34)
                                                else
                                                        expressStr = expressStr&" and "&"DataTable("&Chr(34)&tempArray(0)&Chr(34)&","&Chr(34)&Sheet_Name&Chr(34)&")"&"<>"&chr(34)&tempArray(1)&chr(34)
                                                End If
                                        ElseIf InStr(expressArray(i),"<") Then
                                                tempArray = Split(expressArray(i),"<")
                                                If i=LBound(expressArray) Then
                                                        expressStr ="DataTable("&Chr(34)&tempArray(0)&Chr(34)&","&Chr(34)&Sheet_Name&Chr(34)&")"&"<"&chr(34)&tempArray(1)&chr(34)
                                                else
                                                        expressStr = expressStr&" and "&"DataTable("&Chr(34)&tempArray(0)&Chr(34)&","&Chr(34)&Sheet_Name&Chr(34)&")"&"<"&chr(34)&tempArray(1)&chr(34)
                                                End If
                                        ElseIf InStr(expressArray(i),">") Then
                                                tempArray = Split(expressArray(i),">")
                                                If i=LBound(expressArray) Then
                                                        expressStr ="DataTable("&Chr(34)&tempArray(0)&Chr(34)&","&Chr(34)&Sheet_Name&Chr(34)&")"&">"&chr(34)&tempArray(1)&chr(34)
                                                else
                                                        expressStr = expressStr&" and "&"DataTable("&Chr(34)&tempArray(0)&Chr(34)&","&Chr(34)&Sheet_Name&Chr(34)&")"&">"&chr(34)&tempArray(1)&chr(34)
                                                End If
                                        ElseIf InStr(expressArray(i),"=") Then
                                                tempArray = Split(expressArray(i),"=")
                                                If i=LBound(expressArray) Then
                                                        expressStr ="DataTable("&Chr(34)&tempArray(0)&Chr(34)&","&Chr(34)&Sheet_Name&Chr(34)&")"&"="&chr(34)&tempArray(1)&chr(34)
                                                else
                                                        expressStr = expressStr&" and "&"DataTable("&Chr(34)&tempArray(0)&Chr(34)&","&Chr(34)&Sheet_Name&Chr(34)&")"&"="&chr(34)&tempArray(1)&chr(34)
                                                End If
                                        Else
                                                MsgBox("不支持此表达式")
                                        End If
                                Next
                        Else
                                expressStr = "DataTable( 1 "&","&Chr(34)&Sheet_Name&Chr(34)&")"&"<>"&chr(34)&chr(34)
                        End If
                        'logPrint("在generateFilterExp方法中,条件语句解析结果:"&expressStr)
                        generateFilterExp = expressStr
End Function

Jay-Yang84 发表于 2009-4-2 20:41:12

Function.vbs

Function PressEnter
wait(2)
Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "~"
Set WshShell = nothing
End Function

Jay-Yang84 发表于 2009-4-2 20:41:45

Log.vbs

Public Function logPrint(ByVal logMessage)
      
      Dim fso, logFile
      Set fso = CreateObject("Scripting.FileSystemObject")
      Set logFile = fso.OpenTextFile(Environment("Log_Dir")&"\runtime.log", 8, True) 'Open a file and write to the end of the file and open as Unicode
      
      logFile.WriteLine(date() & " " & hour(now) & ":" & minute(now) & ":" & second(now) & ": " & logMessage)
   
      logFile.Close
End Function

Public Function ErrorHandle()
      If Err.Number <> 0 Then
                logPrint "Error Num: " & Err.Number & "; Error Src: " & Err.Source & "; Error Desc: " & Err.Description
                Err.Clear
      End If
End Function


Public Function xmlLogPrint(ByVal logMessage)
Dim fso, xmlfile
Set fso = CreateObject("Scripting.FileSystemObject")
Set xmlfile = fso.OpenTextFile(Environment("Log_Dir")&"\runtime.xml", 8, True)
xmlfile.WriteLine logMessage
xmlfile.Close
Set xmlfile = nothing
Set fso = nothing
End Function

PublicFunction taskLogPrints (taskname)
Dim fso, xmlfile, str1, str2, str3
str1 = "<task>"
str2 = "<"&"/"&"task>"

Set fso = CreateObject("Scripting.FileSystemObject")
Set xmlfile = fso.OpenTextFile(Environment("Log_Dir")&"\runtime.xml", 8, True)
xmlfile.WriteLine str1&"执行步骤 "&taskname&"成功"&str2
xmlfile.Close
Set xmlfile = nothing
Set fso = Nothing
End Function


PublicFunction taskLogPrint (taskname)
Dim fso, xmlfile, str1, str2, str3
str1 = "<"
str2 = ">"
str3 = "/"
Set fso = CreateObject("Scripting.FileSystemObject")
Set xmlfile = fso.OpenTextFile(Environment("Log_Dir")&"\runtime.xml", 8, True)
xmlfile.WriteLine str1&taskname&str2&"执行步骤 "&taskname& Environment("bResult")&str1&str3&taskname&str2
xmlfile.Close
Set xmlfile = nothing
Set fso = Nothing
End Function

PublicFunction ErrorXmlPrint()
Dim fso, xmlfile, str1, str2, str3
strTemp = " 错误描述: " & Err.Description
Set fso = CreateObject("Scripting.FileSystemObject")
Set xmlfile = fso.OpenTextFile(Environment("Log_Dir")&"\runtime.xml", 8, True)
If Err.Number <> 0 then
xmlfile.WriteLine "<Error>"&strTemp&"</Error>"
End IF
xmlfile.Close
Set xmlfile = nothing
Set fso = Nothing
End Function

Jay-Yang84 发表于 2009-4-2 20:42:29

TestScript:
Dome.vbs

Class Demo

Function login(Sheet_Name)
   address = DataTable("address", Sheet_Name)
   Systemutil.run "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
   wait(3)
   Browser("micclass:=browser").close
   msgbox address
End Function

Function logout()
   msgbox "logout"
End Function

End Class

Jay-Yang84 发表于 2009-4-2 20:45:47

TestSet.xls:

TestCases sheet:
1. IDX;
2. name: 测试用例的中文名称,暂时没有做中英文对照。可以不填。
3. table: 测试用例所在的Excel文件名,可以带后缀xls,也可以不带。这个Excel文件只需要放到project\testData文件夹下即可。子文件夹无所谓。
4. sheet:测试用例所在的Sheet名称。如果不填,就默认为第一个Sheet。如果填了,就使用该值。
5. prority: 测试用例的执行优先级别,暂未实现。
6. description: 对该测试用例的一些描述。

option sheet:
执行        执行中        成功
不执行        已完成        失败
未知        出现异常        未知

Jay-Yang84 发表于 2009-4-2 20:47:51

Demo.xls

Dome.sheet:
1. IDX
2. bizName: 业务名称,对应task的脚本文件名称。并且脚本文件中有一个同名的class。脚本务必保证名称完全相同。暂时没有实现中英文名称的对照。业务流程的名字不能重复。
3. taskName: 具体task的名称。这个操作是需要写脚本来实现的。对应于各个function的名称,不过暂时没有实现中英文的对照。
4. bizDataTable: 数据所在Sheet的名称。如果引用的是其它Excel文件,需要在Sheet名称前面加上excel文件名。
5. filter: 数据执行条件。仅执行复核此条件的数据。如果有多个条件,用分号";"隔开,也可以是中文的分号。身份=制单,其中“身份”是字段名称,“制单”是字段的值。此处不区分大小写。支持 >=, <= , <> ,> ,< ,= 这6种比较运算符。
6. description: 描述该行步骤的一些备注信息。

hello97 发表于 2010-4-2 09:50:47

大侠:handshake
正在研究中。。。。。。

shotstar 发表于 2010-4-2 12:08:17

LZ辛苦

hadywei 发表于 2010-4-16 16:14:13

还是不太理解~

旺仔 发表于 2010-12-20 18:54:17

能多来点注释就好多了

andrewlee 发表于 2010-12-22 16:47:56

看不懂,学习中

iceriver999 发表于 2011-4-26 15:08:27

回复 9# Jay-Yang84

能留个联系方式吗?方便进一步探讨

fengxinzi0151 发表于 2011-8-10 14:46:12

想知道tempArray = split(curPath,"\")这句是什么意思

deadhunter 发表于 2011-10-28 14:17:54

这个框架有个问题:当有2个TASK以上时,如果都有参数,就会执行不下去的
页: [1] 2
查看完整版本: 轻量级qtp自动化测试框架