这个问题是Can I use a language other than VBScript to programmatically execute QTP Tests?处的问题的后续问题。我有一个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 :重新启动后,两个版本(Debug和Release)似乎都能正常工作。如果我第二次尝试启动,我会收到错误。我在下面添加了部分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;
}
答案 0 :(得分:1)
我怀疑问题是你没有正确关闭(退出)你的QT应用程序实例(如果检查你的任务管理器,你可能会看到它正在运行),因此后续运行无法正确初始化。
有一篇不错的博客文章,Grant Holliday将自动化QT在Team Build下运行。许多相同的原则都适用。
http://ozgrant.com/2008/02/28/running-hp-quicktest-professional-ui-tests-with-team-build/
如果这不是问题,您需要提供有关如何使用QT应用程序对象的更多详细信息。
答案 1 :(得分:0)
使用以下内容:
Object oQTPapp;
oQTPapp = Server.CreateObject("QuickTest.Application");
Application qtpApp = (Application) oQTPapp;
希望它能解决您的问题。