4

Windows Server 2003 の CC.Net で xUnit を使用して Watin テストを実行しています。

TestDriven.Net を使用した開発ボックスと xUnit GUI アプリを使用したサーバーですべて正常に動作する多くのテストがあります。ただし、CC.Net が (MSBuild タスクの一部として) テストを実行すると、関数

ie.ContainsText("some text to find");

期待値を返すことはありません。Button(...).Click()、TextBox(...).Value など、IE オブジェクトの他の関数とプロパティは正常に動作するようです。

サービス アカウントには「デスクトップとの対話をサービスに許可する」が必要であることを認識しています。

ローカル システムおよびローカル管理者の下で、この実行中の CC サービスを試しました。管理者アカウントがハングするだけで、テストの実行が終了したようには見えません (ただし、ieexplorer.exe プロセスのインスタンスは作成されます)。

これはサーバーでのアクセス許可の問題ですか、それとも構成から何かを除外しましたか?

4

6 に答える 6

10

この問題を回避する方法を理解し終えたところです。現在、CruiseControl.netを介してサービスとして実行されているwatinテストがあります。

セキュリティの設定方法により、テストしているWebサイトにアクセスするには、cc.netサービスを特定のユーザーとして実行する必要があります。サービスはドメインユーザーとして実行されているため、[サービスのセキュリティ]タブで[ユーザーにデスクトップとの対話を許可する]チェックボックスが無効になっています。再起動時にプロセスを自動的に開始するため、常にログインしているユーザーからコマンドプロセスを実行するだけでは不十分です。今、私たちは理解しました

これを回避する方法は、最初にnunit-console.exeを呼び出すバッチファイルを作成することでした。nunit-console.exeへのパラメータは、パラメータとしてバッチファイルに渡され、バッチファイルはパラメータを渡します。バッチファイルの2行目で最後の行は、nunit-console.exeから返されたリターンコードを返します。バッチファイルは基本的に次のようになります。

 nunit-console.exe %1 %2
 exit /b %ERRORLEVEL%

nunit-consoleに渡すパラメータの数は、ニーズに応じて異なる場合があります。

ビルドにnantを使用しているため、nunit-consoleを呼び出す既存のnantタスクを、次のようなcmd.exeを呼び出すexecタスクに置き換えました。

   <exec program="cmd.exe" failonerror="true">
      <arg value="/interactive" />
      <arg value="/c" />
      <arg value="[batch file name]" />
      <arg value="[parameter one value]" />
      <arg value="[parameter two value" />
   </exec>

同じタスクがmsbuildでどのように表示されるかはわかりませんが、検索できると確信しています。最終的な結果は、基本的に次のようなコマンドです。

   cmd.exe /interactive /c [batch file name] [parameter one value] [parameter two value]

または、nantを使用して、msbuldnantタスクを作成して既存のビルドを呼び出すこともできます。

cmd.exeの「/interactive」パラメーターがキーであり、デスクトップと対話する権限を持つプロセスでバッチファイルを実行します。'/ c'パラメーターが必要な場合、実際にはポジティブではありませんが、そのまま機能しています。まだnunitに結果を同じxmlファイルに記録するように指示しているので、マージタスクを変更する必要はなく、クルーズコントロールへのテスト結果のレポートはうまく機能しています。

于 2009-08-06T20:43:14.910 に答える
1

Watin はブラウザの自動化に依存して仕事をしているため、「デスクトップとの対話をサービスに許可する」設定になっています。

Watin が実行しようとすると、現在ログインしているデスクトップではなくサービス アカウントで実行されます。また、IE をスピンアップするため、Watin を実行しているアカウントが実際には以前に IE 自体を起動していない可能性があります。 IE の最初の起動シーケンスに座っている可能性があり、設定を求めるプロンプトが表示されます。

また、私の記憶が正しければ、デスクトップ設定と対話するには、対話するためにアクティブなログインが必要です。その時点で誰もログインしていない場合、サービスが通信するものは何もなく、新しいデスクトップは作成されません。

于 2009-08-06T06:06:22.653 に答える
0

私はこの例に従いましたが、残念ながら役に立ちませんでした。この質問は nant に関するもので、私は msbuild を使用しているため、こちら別の質問を開きました。

于 2013-10-29T08:21:17.307 に答える
0

その答えが無効な実行例で正しいとマークされた理由がわからない..

私はそれを次のように書き直しました:

<exec> <baseDirectory>WatinTestDir</baseDirectory> <executable>cmd.exe</executable> <buildArgs>/interactive /C nunit-launcher.bat Test.dll /xml:../Test-results.xml</buildArgs> <buildTimeoutSeconds>2400</buildTimeoutSeconds> </exec>

どちらが実行されますか..しかし、すべて同じように失敗します..

于 2011-01-07T12:10:14.770 に答える
0

オフラインでいくつかの提案を受け取りました。

  1. サーバーで msbuild を使用してテストを実行してみます。
  2. サービスとしてではなく、コンソールから CC.Net を開始してみてください。

結果で編集します。

編集:

結果:

  1. サーバー上で msbuild を使用してテストを完全に実行できます。
  2. コマンド ラインから ccnet.exe を実行すると、テストは正常に実行されます。ただし、起動時にコマンド ラインから ccnet.exe を起動するタスクをセットアップすると、テストがハングし、終了しません (最終的にはタイムアウトになります)。

部分的な回避策は、終了しないセッションでコマンド ライン実行可能ファイルを実行することです。ただし、このソリューションは本当に好きではないので、さらに情報を提供していただければ幸いです。

于 2009-03-13T20:08:16.453 に答える