20

テストが失敗した場合にスクリーンショットを撮りたい。すべてのテスト メソッドを try/catch ブロックでラップするのではなく、このロジックを で注釈が付けられたメソッドに追加したいと考えてい@AfterMethodます。

@AfterMethod現在のテストが失敗した場合、アノテーションが付けられたメソッドでどのように検出できますか?

4

4 に答える 4

34

で注釈が付けられたメソッドにパラメーター@AfterMethodがある場合、 ITestResultTestNG は自動的にテストの結果を挿入します。(ソース: TestNG ドキュメント、セクション 5.18.1 )

これは仕事をするはずです:

@AfterMethod
public void tearDown(ITestResult result) {
   if (result.getStatus() == ITestResult.FAILURE) {
      //your screenshooting code goes here
   }        
}
于 2013-09-03T19:30:15.373 に答える
8

ITestListenerで障害レポートを処理する代わりに、 を使用することをお勧めし@AfterMethodます。テストリスナーのonTestFailed()関数は、テストメソッドが実行された後、メソッドが実行される前に呼び出されます@AfterMethod。(リスナーには関数がないことに注意してくださいonTestFinished()。その役割は によって実行され@AfterMethodます。)

自分で物事を簡単にするために、を使用できます。TestListenerAdapterこれは、特に自分ではない他のすべての機能を実装し@Overrideます。

最終的には次のようになります。

public class MyTestListener extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult result){
    yourTakeScreenShotFunctionHere();
   }
}

次に、リスナーをテスト クラスにアタッチします。

@Listeners({MyTestListener.class})
public class MyTestClass(){etc}

ITestResultテスト クラスのオブジェクトへの参照であるため、リフレクションを使用して Selenium WebDriver インスタンスなどのデータを取得できます。

エラーログのクリーンアップや保存、スクリーンショットの撮影、他のレポート機能のトリガー、電子メールの送信など、さまざまなことを行うために、必要な数の異なるリスナーを持つことができます。

于 2015-03-03T22:08:14.017 に答える
1

リスナーIInvokedMethodListenerを実装してメソッドを実装できると良いですafterInvocation()。これにより、メソッドの結果オブジェクトにアクセスできます。スクリーンショットを撮るためのコードをここに配置できます。

于 2013-09-03T19:00:18.077 に答える