テストが失敗した場合にスクリーンショットを撮りたい。すべてのテスト メソッドを try/catch ブロックでラップするのではなく、このロジックを で注釈が付けられたメソッドに追加したいと考えてい@AfterMethod
ます。
@AfterMethod
現在のテストが失敗した場合、アノテーションが付けられたメソッドでどのように検出できますか?
で注釈が付けられたメソッドにパラメーター@AfterMethod
がある場合、 ITestResult
TestNG は自動的にテストの結果を挿入します。(ソース: TestNG ドキュメント、セクション 5.18.1 )
これは仕事をするはずです:
@AfterMethod
public void tearDown(ITestResult result) {
if (result.getStatus() == ITestResult.FAILURE) {
//your screenshooting code goes here
}
}
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 インスタンスなどのデータを取得できます。
エラーログのクリーンアップや保存、スクリーンショットの撮影、他のレポート機能のトリガー、電子メールの送信など、さまざまなことを行うために、必要な数の異なるリスナーを持つことができます。
リスナーIInvokedMethodListenerを実装してメソッドを実装できると良いですafterInvocation()
。これにより、メソッドの結果オブジェクトにアクセスできます。スクリーンショットを撮るためのコードをここに配置できます。