この質問は、VBScript以外の言語を使用してプログラムでQTPテストを実行できますか?のフォローアップです。。QuickTest.Applicationのインスタンスを作成し、QuickTest Professional(バージョン10.0)を起動するC#(.Net 2.0)プログラムがあります。私の開発テストはすべてうまくいきました。
今朝、開発環境(SharpDevelop 2.2.1)を使用せずにテストマシンからプログラムを実行しようとしました。Windowsアイコンをダブルクリックすると、プログラムの実行中にエラーが発生しました。コンソールウィンドウの点滅が速すぎて何であるかがわからなかったので、コマンドプロンプトにドロップダウンして、そこからプログラムを実行しました。すべてがうまくいきました。2回目のプログラム起動とそれ以降のすべての起動で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();
行は例外をスローしています。
何が悪いのか、私は完全に途方に暮れています。開発マシンでは正常に動作し、テストマシンでは1回正常に動作しました。試行の合間に再起動しても効果がないようです。私はC#、. NET、およびCOMにかなり慣れていないので、ここでより経験豊富な誰かがこれを以前に見たことがあるかもしれないことを望んでいました。私はおそらく単純なものが欠けています。
更新:今朝、再起動後、デバッグビルドがテストマシン(開発環境なし)で正常に機能することを発見しましたが、リリースビルドは機能しません。再構築と再デプロイを試みます。リリースビルドを調べるためのビルドオプションの提案はありますか?
UPDATE2:新しく再起動した後、両方のリリース(デバッグとリリース)が正しく機能しているようです。どちらかをもう一度起動しようとすると、エラーが発生します。Main()
メソッドの一部とメソッドを以下に追加しましたExitQTP()
。
ref
問題の一部は、どのように使用すべきかについての私の誤解であるのではないかと思います。ただし、コードはIDE(SharpDevelop 2.2.1)で実行すると毎回機能します。
最初の実行後に何かが適切にクリーンアップされていないように見えますが、私には何がわかりません。タスクモニターを見ると、QTP*プロセスは期待どおりに消えてしまいます。問題を引き起こしている3番目のプロセスがあるかもしれないと思いますが、それが何であるかを特定することはできませんでした。
//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;
}