2011-09-16 66 views
4

我需要從我們的Maven/Jenkins構建中利用Quicktest Pro。我知道,我知道QTP並不是那裏最好的工具(我被「袋熊熊燒狗」reference)逗樂了,但我們的QE團隊正在使用它,我想在Jenkins運行一些測試。從maven/Jenkins運行Quicktest Pro測試?

1A。有沒有人使用這種特定的組合?一個示例/ maven插件會很棒。

因爲我懷疑這很可能,所以讓它分解成碎片。

2A。你如何簡單地從命令行啓動QTP測試?我想我可以使用antrun或類似的東西來確定其他部分的事情。

2B。 QTP的結果格式似乎不是像surefire報告那樣的標準(我也不太清楚,所以我可能是錯的)。你能給我一些關於將報告結果返回給maven/Jenkins的指導嗎?我想這可能涉及解析QTP結果文件。

+2

嚴重的是,你只是downvote我的問題沒有提到爲什麼,有什麼不對的地方,或者一些其他的方式來解決這個問題?我的問題不應該不清楚。我做了一些研究。答案肯定會對我和其他人有用。這些是我看到的用於降低投票的標準,我認爲這不符合任何標準。 – Jared

+0

對於那些仍在尋找一些詳細的答案, http://www.testautomationguru.com/executing-qtpuft-scripts-using-jenkins/ – vins

回答

6

可以編寫一個AOM(自動化對象模型)vbscript來調用QTP並運行特定的測試。 這樣的vbscript可以從Windows的命令行運行。

如果你可以從Maven/Jenkins運行/調用vbscript文件,那肯定可以通過命令行運行QTP腳本。

樣本AOM VBScript函數來觸發QTP運行低於

Public Function RunQTP(byVal strQC_Or_Local, byVal strTestPath, byVal strTestName, byVal strResultsFolder, byVal strTraceFile)', byVal strStore) 


    ' Create the Application object 
    Dim objQTPApp,objQTPLibraries,objTestResults 'QTP 
    Dim strTempResultsRootFolder 
    strTempResultsRootFolder = "C:\TempTest\" 


    On Error Resume Next 
     'Loop for a minute or until qtp is successfully opened 
     StartTime = Now 
     Do 
       'Create QTP object 
       Set objQTPApp = CreateObject("QuickTest.Application") 

       'Clear any existing error numbers 
       Err.Clear 

       'If QTP is already launched, do nothing, else launch it 
       If objQTPApp.Launched = False Then 
        objQTPApp.Launch  
       End If 

       'Set qtp to visible 
       objQTPApp.Visible = True 

       'See if launching QTP has caused an error 
       intErr = Err.Number 

       'If it QTP has opened fine, exit the loop 
       If intErr = 0 Then 
         objQTPTraceFile.Write Now & " QTP open with no errors" & vbCR 
         Exit Do 
         'If there's an error, Close and QTP processes running (if any) and try again 
       Else 
         msgbox "Error in opening QTP" 

       End If 

     Loop Until DateDiff("s", StartTime, Now) > 180 


    On Error GoTo 0 



    objQTPApp.Options.Run.RunMode = "Fast" 


    If strQC_Or_Local = "QC" Then 
     'Connect To QC 
     strQCUsername = "Quality center username" 
     strQCPassword = "Quality center password" 

     If objQTPApp.TDConnection.IsConnected Then 
      'If QTP is already connected, if login details are different, then log out and log in again with given details 
      If objQTPApp.TDConnection.User <> strQCUsername Or objQTPApp.TDConnection.Domain <> strQCDomain Or _ 
       objQTPApp.TDConnection.Project <> strQCProject Or objQTPApp.TDConnection.Server <> strQCPath Then 
       msgbox "connected as someone else - disconnecting, and then will reconnect" 
       objQTPApp.TDConnection.Disconnect 
       On Error Resume Next 
        objQTPApp.TDConnection.Connect strQCPath, strQCDomain, strQCProject, strQCUsername, strQCPassword, False 
       On Error GoTo 0 
      End If 
     Else 
      'If it's not already connected, log in with given details 
      On Error Resume Next 
       objQTPApp.TDConnection.Connect strQCPath, strQCDomain, strQCProject, strQCUsername, strQCPassword, False 
      On Error GoTo 0 
     End If 
     'If connected, tests in QC have [QualityCenter] appended before their name 
     If objQTPApp.TDConnection.IsConnected Then ' If connection is successful 
      strTestPath = "[QualityCenter] " & strTestPath 
     Else 
      MsgBox "Cannot connect to Quality Center" ' If connection is not successful, display an error message. 
      Exit Function 
     End If 
    End If 

    'Open the test 
    On Error Resume Next 
     objQTPApp.Open strTestPath, False 
     intErr = err.number 
     strErrDesc = err.description 
    On Error Goto 0 

    'If no problems 
    If intErr = 0 Then 



     'Configure the QTP settings 

     'Stop the test when an error occours 
     objQTPApp.Test.Settings.Run.OnError = "NextIteration" 

     'Select the Range you wish to run 
     objQTPApp.Test.Settings.Run.IterationMode = "oneIteration" 

     'Set sync timeout to be 20 seconds and disable smart identification 
     'objQTPApp.Test.Settings.Run.ObjectSyncTimeOut = 20000 
     objQTPApp.Test.Settings.Run.DisableSmartIdentification = True 




     'Ensure that the recovery mechanism is set to be activated for every step 
     'qtTestRecovery.SetActivationMode "OnError" 
     Set objTestResults = CreateObject("QuickTest.RunResultsOptions") 

     'If results folder path is empty, just save tests results to usual temp place 
     Dim blnSaveSpecificLocation 
     If strResultsFolder = "" Then 
      blnSaveSpecificLocation = False 
      objTestResults.ResultsLocation = "<TempLocation>" 
     Else 
     'Otherwise, save results to a temporary location, and then move the tests results to desired location before closing the test/stopping QTP etc 
     'Need to save to a temp location and then move, as it looks like that when another test is run, QTP deletes the previous set of results. 
      blnSaveSpecificLocation = True 
      'Create the results object   
      strDate = CStr(Now) 
      strDate = Replace(strDate, "/", "") 
      strDate = Replace(strDate, ":", ".") 
      strTestNameAppendage = strTestName & " " & objQTPApp.Test.Environment.Value("LocalHostName") & " " & strDate 
      strResults = strResultsFolder & "\" '& strTestNameAppendage 

      strTempResultsLocation = strTempResultsRootFolder & strTestNameAppendage 
      objTestResults.ResultsLocation = strTempResultsLocation 

     End If 

     objQTPTraceFile.Write Now & " Start Test" & vbCrLf 
     'If QTP crashes, it will be forced shut by 'KillQTP' after an hour. If this happens, 'objQTPApp.Test.Run objTestResults' will return an error 
     'so need to turn off error reporting and capture the error given if this is the case 

     On Error Resume Next 
      Dim intQTPErr 
      Err.Clear 
      'Run the test *************************** This is the line which triggers the QTP run 
      objQTPApp.Test.Run objTestResults 
      intQTPErr = Err.Number 
     On Error GoTo 0 

     objQTPTraceFile.Write Now & " End Test" & vbCrLf 

    Else  
     objQTPTraceFile.Write Now & " " & strTestPath & " could not be opened. Error message = " & strErrDesc & vbCRLf      
    End if 

    'Close Qtp 
    objQTPTraceFile.Write Now & " Just before checking the error number. Error Number was: " & intQTPErr & vbCRLf 
    On Error Resume Next 

     'If QTP has crashed, the number captured in intQTPErr will be -2147023170 
     If intQTPErr = "-2147023170" Then 'if it's crashed (could put <> 0 instead) 
      objQTPTraceFile.Write Now & " QTP Run Crashed or didn't finish in the time limit. Error Number was: " & intQTPErr & vbCRLf 
     Else 
      objQTPTraceFile.Write Now & " QTP Thinks it finished - stopping test: " & Err.Number & vbCRLf 
      'Close the test   
      objQTPApp.Test.Stop 
      objQTPTraceFile.Write Now & " QTP Thinks it stopped fine - closing test: " & Err.Number & vbCRLf 

      'Move the test from temp location to desired location 
      If blnSaveSpecificLocation = True Then 
       Call MoveFolder(strTempResultsLocation, strResults) 
       'objQTPApp.Test.Close 
       objQTPTraceFile.Write Now & " QTP Thinks it closed fine - error number is: " & Err.Number & vbCRLf 
      End If 

      objQTPTraceFile.Write Now & " QTP Process should have been killed" & vbCRLf 

     End If 

    On Error GoTo 0 



    'Set objects used to nothing  
    Set objQTPTraceFile = Nothing 
    Set fso = Nothing 

    Set qtTestRecovery = Nothing ' Release the Recovery object 
    Set objTestResults = Nothing 
    Set objQTPLibraries = Nothing 
    Set objQTPApp = Nothing 


End Function