2017-12-06 6 views
0

Selenium Webdriverテストを作成したいと思います。これを機能させるには、OWin SelfHostを使用して既存のOWinアプリケーションを開始します。セレンとOWinセルフホスト - デバッグ方法?

何らかの理由で、OWinサーバーがブレークポイントになっても応答しません...間違っていることを誰かに教えてもらえますか?

は以下だから、私は、応答を受け取ることを期待しますが、ブレークポイントがヒットされると、要求はちょうど保留のまま...

[OneTimeSetUp] 
    public void InitDriverAndBackend() 
    { 
     string baseAddress = "http://127.0.0.1:9001/"; 
     httpServer = WebApp.Start<Startup>(url: baseAddress); 
     Thread.Sleep(30000); 
     //I have a breakpoint on the line below. Before the breakpoint is hit, 
     //I receive a response when going one of my webapi's on port 9001 
     //However, once the breakpoint is hit, the server does not response at all and the request stays pending 
     Driver = new ChromeDriver(); 
    } 

いくつかのより多くの情報を持つコードです。

答えて

0

あなたのテストとあなたのOWINアプリは別物です。それらを混ぜないでください。単体テストのようにUIテストを実行しないでください。疑似インスタンスを作成してテストします。

あなたのOWINアプリケーションをコンパイルします。展開する。それを実行します。次に、配備されたアプリとは別のプロセスからテストを開始します。必要に応じて、テストが終了した後にサーバーを停止します。 これは、いわゆるCI/CDプロセスの一部です。


[OK]を今質問してください:どうすればこのDriver = new ChromeDriver();は非ブロックです。メソッドが終了すると、ガベージコレクタがクリーンアップされ、これは実質的にあなたのOWINアプリケーションの死を意味します。

OK、これは簡略化されたバージョンです。説明したブレークポイントの場合、アプリケーション全体が停止しているため、単に応答を処理できません。

これは間違っている、しかし、あなたが本当に同じアプリケーション内でそれを行う必要がある必要があります。

  1. は[OneTimeSetup](NUnitの)でそのベースにあるいくつかの基本
  2. からすべてのテストクラスを継承しますか、同等の方法で、明示的に指示されるまで停止しない別のスレッド上に別のスレッドを作成します。(while(!ready2Exit){Thread.Sleep(100);})
  3. [OneTimeTearDown]をready2Exitからtrueに設定します。

ただし、これは少し間違っています。

+0

こんにちはマイク、私の継続的な展開のパイプラインで、実際に展開する前にwebdriver/seleniumテストを実行したいと思います。 私のOWinプロセスがガベージコレクションされる '新しいChromeDriver();'の後になぜ私は従いません。私は '[OneTimeTearDown]'メソッドですべてのテストの終わりに処理するIDisposableであるHttpServerへの参照を保持します。 私は別のスレッド(またはTopshelf?)で起動しようと考えています - 私は好奇心が強いです! 助けてくれてありがとう – rdehuyss

+0

OK、サーバーがTearDownにしか置かれていない場合は、ガベージコレクションされません。次に、答えの2番目の斜体部分です:アプリケーションがブレークポイントに達すると、完全にフリーズしているので、Owinアプリケーションは単純に答えません。 –

関連する問題