2016-11-12 2 views
1

これは私の改札を取ったインタビューの質問です。我々は5,6セレン試験でセレンテストクラスを持っています。テスト3が実行中で、ネットワーク障害が発生しました。今度は、ネットワークが再開したら、3回目のテストのように、失敗した場所から開始するようにフレームワークを設定する方法を教えてください。すでに実行されているテストを実行する必要があります。1 & 2.フレームワークがjunitであると仮定します。ネットワーク障害後のテスト実行を続行

答えて

2

私は彼の答えにjavaguyと同意できません。私はその質問が完全に有効だと思う。コンセプトとしての単体テストとツールとしてのJUnitには大きな違いがあります。

javaguyの答えに記載されているのは単体テストです。これらは実際には何も使用できませんが、クラスをメモリにロードして書き込みます。しかし、確かにセレンのWebドライバを使用しているテストは単体テストではありません。そして、これらのテストを実装するためのフレームワークとしてJUnitを選択することは有効です。もちろん、JUnitがそのための最良のツールであるかどうかは論じることができますが、JUnitがこれらのテストの実装ツールとして選択された場合の最終的な話です。これは有効な選択です。

あなたの質問にお答えします。あなたが望むものを達成するには、さまざまな方法があります。

  1. テストを再実行できるようにするJUnitルールを作成します。一般的にAOPの用語に精通しているなら、ルールはインターセプタやアスペクトに似ています。彼らはテストを傍受し、失敗するとテストを再開することができます。 Hereあなたはルールを説明し、いくつかのリンクを提供する質問を見つけることができます。

  2. カスタムランナーを実装します。この方法は、JUnitがランナー用スロットを1つだけ提供するため、他のランナーを使用していない場合にのみ機能します。 このカスタムランナーは、テストコールを再び傍受し、ネットワーク障害/ネットワークへのpingを実行した後に再実行し、待機し、「復帰」すると再実行されます。次に、@RunWith注釈を使用して実際のランナーをテストすることができます。

  3. 適用溶液。あなたのテストでセレンのwebドライバが実際にネットワークに依存する唯一のものだと仮定すると、あなたの呼び出しにセレンドライバの呼び出しをラップします。セレンのすべてのコールにtry/catchを指定し、例外をキャッチした場合は再試行してください。このためにアスペクトを使用することも、ラッパーを手動で実装することもできます。

  4. あり

ホープこれは

に役立ちます...ジェンキンス/ビルド・ツールのレベルでも、いくつかの解決策がありますが、私は、これらが実際にスコープ外にいると思います
関連する問題