Pourquoi une exception InteropServices.COMException apparaît-elle lorsque je tente de lancer QTP à partir de C #?

StackOverflow https://stackoverflow.com/questions/1002396

  •  05-07-2019
  •  | 
  •  

Question

Cette question fait suite à celle de Puis-je utiliser un langage autre que VBScript pour exécuter par programme des tests QTP? . J'ai un programme C # (.Net 2.0) qui crée une instance de QuickTest.Application et lance QuickTest Professional (version 10.0). Tous mes tests de développement ont bien fonctionné.

Ce matin, j'ai tenté d'exécuter le programme à partir d'une machine de test sans environnement de développement (SharpDevelop 2.2.1). J'ai reçu une erreur lors de la tentative d'exécution du programme lorsque j'ai double-cliqué sur l'icône Windows. La fenêtre de la console a clignoté trop rapidement pour voir ce que c'était. J'ai donc basculé vers une invite de commande et exécuté le programme à partir de là. Tout a bien fonctionné. Lors de la deuxième tentative de lancement du programme et de toutes les suivantes, je reçois une System.Runtime.InteropServices.COMException qui semble être causé par l'objet COM qui a lancé un RPC_E_SERVERFAULT . La fonction en question est

virtual public QuickTest.Application LaunchQuickTestPro()
{
    QuickTest.Application qtpApp = new QuickTest.Application();
    qtpApp.Launch();
    qtpApp.Visible = false;
    return qtpApp;
}

et la ligne qtpApp.Launch (); lève l'exception.

Je ne sais plus quoi faire. Cela fonctionne bien sur la machine de développement et a bien fonctionné une fois sur la machine de test. Le redémarrage entre les tentatives ne semble pas être une bonne chose. Je suis assez nouveau en C #, .NET et COM. J'espérais donc que quelqu'un de plus expérimenté ici aurait pu voir cela auparavant. Il me manque probablement quelque chose de simple.

UPDATE : j'ai découvert ce matin, après un redémarrage, que la version Debug fonctionnait correctement sur la machine de test (pas d'environnement de développement), mais la La version finale ne fonctionne pas . Je vais essayer de reconstruire et de redéployer. Quelqu'un a-t-il une suggestion quant aux options de construction à examiner pour la version Release?

UPDATE2 : il semble que les deux versions (Debug et Release) fonctionnent correctement après un nouveau redémarrage. Si j'essaye de lancer une seconde fois, j'obtiens l'erreur. J'ai ajouté une partie de ma méthode Main () et de ma méthode ExitQTP () ci-dessous.

Je me demande si le problème vient en partie de mon incompréhension de l'utilisation de ref . Cependant, le code fonctionne à chaque fois lorsqu'il est exécuté dans l'EDI (SharpDevelop 2.2.1).

Il semble que quelque chose ne soit pas correctement nettoyé après la première utilisation, mais je ne sais pas quoi. En regardant le moniteur de tâches, les processus QTP * se déroulent comme prévu. Je pense qu'un troisième processus peut être à l'origine du problème, mais je n'ai pas réussi à isoler ce que c'est,

    //Program starts here
    [STAThread]
    public static void Main(string[] args)
    {      
        string configFileName = 
            ConfigurationManager.AppSettings.Get("TestPathsConfigFile");

        TextReader configFile = new StreamReader(configFileName);
        QTPLauncher launcher = new QTPLauncher();
        string testName = null; 
        try
        {
            Debug.WriteLine("Creating QuickTest.Application object...");
            QuickTest.Application qtpApp = launcher.LaunchQuickTestPro();
            Debug.WriteLine("Successfully created QuickTest.Application object...");

            while((testName = configFile.ReadLine()) != null)
            {
                if((testName != string.Empty) &&
                   (!(testName.TrimStart()).StartsWith(COMMENT_START)))
                {
                    Debug.WriteLine(testName);

                    launcher.ExecuteQTPTest(testName, ref qtpApp);

                }
            } 

            configFile.Close(); 

           ... //code unrelated to problem removed.

            configFile = null;
            launcher.ExitQTP(ref qtpApp);
        }
        catch(System.Runtime.InteropServices.COMException ce)
        {
            Console.Error.WriteLine(ce.StackTrace);
        }
    }

//Exits QTP
virtual public void ExitQTP(ref QuickTest.Application qtpApp)
{
    qtpApp.Quit();
    qtpApp = null;
}
Était-ce utile?

La solution

Je soupçonne que le problème est que vous ne fermez pas correctement (fermez) votre instance d'application QT (si vous vérifiez votre gestionnaire de tâches que vous pouvez le voir fonctionner), ainsi les exécutions suivantes ne parviennent pas à s'initialiser correctement.

Il y a un article de blog décent dans lequel Grant Holliday automatise QT pour s'exécuter sous Team Build. Nombre des mêmes principes s'appliqueraient.

http: //ozgrant.com/2008/02/28/running-hp-quicktest-professional-ui-tests-with-team-build/

Si ce n'est pas le problème, vous devrez fournir plus de détails sur l'utilisation de l'objet d'application QT.

Autres conseils

Utilisez les éléments suivants:

Object oQTPapp;

oQTPapp = Server.CreateObject("QuickTest.Application");

Application qtpApp = (Application) oQTPapp;

J'espère que cela résoudra votre problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top