1

这个问题是我可以使用除 VBScript 以外的语言以编程方式执行 QTP 测试的问题的后续问题吗?. 我有一个 C# (.Net 2.0) 程序,它创建一个 QuickTest.Application 实例并启动 QuickTest Professional(10.0 版)。我所有的开发测试都运行良好。

今天早上,我尝试在没有开发环境(SharpDevelop 2.2.1)的测试机器上执行程序。当我双击 Windows 图标时,尝试执行程序时收到错误消息。控制台窗口闪得太快,看不到它是什么,所以我掉到命令提示符下并从那里执行程序。一切正常。在第二次尝试启动程序以及所有后续启动程序时,我收到一个System.Runtime.InteropServices.COMException似乎是由 COM 对象抛出一个RPC_E_SERVERFAULT. 有问题的功能是

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

并且该qtpApp.Launch();行正在引发异常。

我完全不知道可能出了什么问题。它在开发机器上运行良好,并且在测试机器上运行良好。在尝试之间重新启动似乎没有好处。我对 C#、.NET 和 COM 还很陌生,所以希望这里有经验的人可能以前见过这个。我可能错过了一些简单的东西。

更新:我今天早上发现,在重新启动后,Debug 版本在测试机器上运行良好(没有开发环境),但Release 版本却不行。我将尝试重建和重新部署。任何人都对构建选项提出建议以检查发布版本?

UPDATE2:似乎两个版本(调试和发布)在重新启动后都能正常工作。如果我再次尝试启动,我会收到错误消息。我在下面添加了我的Main()方法和方法的一部分ExitQTP()

我想知道问题的一部分是否是我对ref应该如何使用的误解。但是,每次在 IDE (SharpDevelop 2.2.1) 中运行时,代码都可以正常工作。

第一次运行后似乎确实没有正确清理某些东西,但我不知道是什么。查看任务监视器,QTP* 进程按照我的预期消失了。我认为可能有第三个过程导致了问题,但无法隔离是什么,

    //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;
}
4

2 回答 2

1

我怀疑问题是您没有正确关闭(退出)您的 QT 应用程序实例(如果您检查任务管理器,您可能会看到它正在运行),因此后续运行无法正确初始化。

有一篇不错的博客文章,其中 Grant Holliday 自动化 QT 以在 Team Build 下运行。许多相同的原则将适用。

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

如果这不是问题,您将需要提供有关如何使用 QT 应用程序对象的更多详细信息。

于 2009-06-16T15:59:39.797 回答
0

使用以下内容:

Object oQTPapp;

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

Application qtpApp = (Application) oQTPapp;

希望它能解决您的问题。

于 2011-05-27T07:32:53.553 回答