Can I use a language other than VBScript to programmatically execute QTP Tests?

10,663

Solution 1

Apologies, but I don't have time to convert your full sample over to C#. I've thrown together a simple demo that should get you going. This just uses C# to open a QTP instance:

using System;
using QTObjectModelLib;

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

You'll need to compile it linking to C:\Program Files\Mercury Interactive\QuickTest Professional\bin\QTObjectModelLib.dll (which is the .NET interop library for QTObjectModel.dll) and have that and QTObjectModel.dll in your app directory when you run it.

It shouldn't be that hard from here for you to convert any object declarations and function calls from VBScript to C#. Please ask if anything's unclear.

To your other point about samples on the internet - there are plenty of people out there doing more advanced stuff with QTP and QC, but I think any really clever solutions aren't shared. I, for example, would probably be prohibited from sharing such things by my employment contract, but I agree with you - there is a dearth of good QTP API samples out there, at least on Google. Having said that, I heartily recommend the SQA Forums for your QTP and QC needs.

Rich

Solution 2

YES, you can use anything that can "do" COM, and that includes C#. Also VB.NET of course.

and Perl, Python, Javascript, and others.

With no help from google, you will have to follow your nose, on how to deal with the interface, but it's not that difficult when you have the existing example. Also your vendor, ideally, will have documented the COM interface for you.

Share:
10,663
ssakl
Author by

ssakl

Updated on June 05, 2022

Comments

  • ssakl
    ssakl about 2 years

    I have VBScript code which launches QuickTest Professional, executes a series of QTP tests, and emails the results. This works well, but I would prefer to use a language with better tools support (a good IDE for example). I am currently calling .Net libraries from the launch script, so I was wondering if it was possible to use a language like C# to accomplish the same task. If so, are there any good resources which address this? I could find very little on this topic via Google and there do not seem to be any other questions on SO about this topic.

    For clarity, I have included the code for the routine that does the bulk of the work. This does not include the .Net declarations, but failedTestsList and allTestsList are instances of System.ArrayList.

    EDIT: All the QTP documentation examples use VBScript, but as you can see, the code is just creating the QTP objects. I would assume these would be callable from another language which supported creation of these objects. It just seems from my Google failures that no one is doing it.

    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
    
  • ssakl
    ssakl about 15 years
    Thank you. I think this may be the nudge in the right direction I was looking for. I'll give it a go at work on Tuesday.
  • ssakl
    ssakl about 15 years
    This code did work. However, for QTP version 10.0, I had to change using QTObjectModelLib; to using QuickTest;. I also added an app.Quit() at the end. This is a great starting point. Thank you!
  • Admin
    Admin about 12 years
    that is not true. all versions of qtp only allow writing code in VBScript. no support for any other language. if you meant QTP's COM interface can be used, which is external to QTP, then its true.