2009-05-21 27 views
11

Ho codice VBScript che avvia QuickTest Professional, esegue una serie di test QTP e invia i risultati via e-mail. Funziona bene, ma preferirei usare una lingua con un migliore supporto per gli strumenti (un buon IDE per esempio). Attualmente sto chiamando. Librerie net dallo script di avvio, quindi mi chiedevo se fosse possibile usare un linguaggio come C# per realizzare lo stesso compito. Se è così, ci sono buone risorse che affrontano questo? Potrei trovare molto poco su questo argomento tramite Google e non sembrano esserci altre domande su SO di questo argomento.È possibile utilizzare una lingua diversa da VBScript per eseguire a livello di codice test QTP?

Per chiarezza, ho incluso il codice per la routine che fa la maggior parte del lavoro. Questo non include le dichiarazioni .Net, ma failedTestsList e allTestsList sono istanze di System.ArrayList.

EDIT: Tutti gli esempi di documentazione QTP utilizzano VBScript, ma come si può vedere, il codice sta solo creando gli oggetti QTP. Presumo che questi sarebbero richiamabili da un'altra lingua che supportava la creazione di questi oggetti. Sembra solo dai miei fallimenti di Google che nessuno lo stia facendo.

Sub ExecuteQTPTest(name) 
    Dim App, resultsPath 
    Dim testPath, testResults 
    testPath = name 
    allTestsList.Add(name) 
    Set App = CreateObject("QuickTest.Application") 

    App.Launch 
    App.Visible = False 
    App.Open testPath 

    SetQTPTestOptions(App) 
    SetQTPRunOptions(App) 
    SetQTPWebOptions(App) 

    App.Folders.RemoveAll 

    Dim qtpTest, qtpResultsOpt 
    Set qtpTest = App.Test 
    Set qtpResultsOpt = CreateObject("QuickTest.RunResultsOptions") 

    resultsPath = testPath & "\RES1" 

    qtpResultsOpt.ResultsLocation = resultsPath 

    qtpTest.Run qtpResultsOpt ''// Run the test 

    testResults = "Test Status: " & qtpTest.LastRunResults.Status & vbCrLf & _ 
      "Last Error: " & qtpTest.LastRunResults.LastError & vbCrLf & _ 
      "Detailed Results located at " & qtpTest.LastRunResults.Path & _ 
       " can be viewed with the QTP Results Viewer Tool " & vbCrLf 

    If qtpTest.LastRunResults.Status <> "Passed" Then 
     g_testRunPassed = False 
     failureCount = failureCount + 1 
     failedTestsList.Add(name) 
     LogResults testResults, name   
    End If 

    qtpTest.Close 

    Set qtpResultsOpt = Nothing 
    Set qtpTest = Nothing 

    App.Quit 

    Set App = Nothing 
End Sub 

risposta

13

Mi scuso, ma non ho il tempo di convertire il campione completo in C#. Ho messo insieme una semplice demo che dovrebbe farti andare. Questo utilizza solo C# per aprire un'istanza QTP:

using System; 
using QTObjectModelLib; 

namespace QtpDemo 
{ 
    class QtpDriver 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      Application app = new Application(); 
      app.Launch(); 
      app.Visible = true; 
     } 
    } 
} 

Avrete bisogno di compilarlo collegamento a C: \ Program Files \ Mercury Interactive \ QuickTest Professional \ bin \ QTObjectModelLib.dll (che è l'interoperabilità .NET libreria per QTObjectModel.dll) e avere questo e QTObjectModel.dll nella directory dell'app quando viene eseguito.

Non dovrebbe essere così difficile da qui convertire le dichiarazioni di oggetti e le chiamate di funzione da VBScript a C#. Si prega di chiedere se qualcosa non è chiaro.

Al tuo altro punto su campioni su Internet - ci sono un sacco di persone là fuori che fanno cose più avanzate con QTP e QC, ma penso che qualsiasi soluzione davvero intelligente non sia condivisa. Io, ad esempio, probabilmente mi sarebbe vietato condividere queste cose con il mio contratto di lavoro, ma sono d'accordo con te - c'è una carenza di buoni campioni di API QTP là fuori, almeno su Google. Detto questo, raccomando vivamente il SQA Forums per le vostre esigenze QTP e QC.

Rich

+0

Grazie. Penso che questo potrebbe essere il nudge nella giusta direzione che stavo cercando. Lo farò al lavoro martedì. – ssakl

+2

Questo codice ha funzionato. Tuttavia, per QTP versione 10.0, ho dovuto cambiare usando QTObjectModelLib; usare QuickTest ;. Ho anche aggiunto un'app.Quit() alla fine. Questo è un ottimo punto di partenza. Grazie! – ssakl

6

Sì, è possibile utilizzare tutto ciò che può "fare" COM, e che include C#. Anche VB.NET naturalmente.

e Perl, Python, Javascript e altri.

Senza l'aiuto di google, dovrai seguire il tuo naso, su come gestire l'interfaccia, ma non è così difficile quando hai l'esempio esistente. Anche il tuo fornitore, idealmente, avrà documentato l'interfaccia COM per te.

0

se questo è ancora importante per te ... QTP 11 consente allo script in C#

+2

non è vero. tutte le versioni di qtp consentono solo la scrittura del codice in VBScript. nessun supporto per qualsiasi altra lingua. se si intende l'interfaccia COM di QTP può essere utilizzato, che è esterno alla QTP, allora la sua vera. –