2

私のプロジェクトには、maven と TestNG ツールがあります。そして、Allure レポートにスクリーンショットを追加しようとしています。テストから直接「@Attachment」アノテーションを付けてメソッドを呼び出すと、すべて問題ありません。

しかし、「@AfterMethod」の部分で呼び出すと、スクリーンショットが間違ったレポートに追加され、混乱します。

どちらの場合も、スクリーンショットが生成され、ディスクに正しく保存されます。

私はすでにここで質問を見てきました:アリュールフレームワーク: TestNG アダプターが間違って @AfterMethod をレポートに配置します

そして、私の困難は、TestNG アダプターが原因である可能性があります。

「@Attachment」メソッドを呼び出す正しい方法は何ですか? この問題を回避するには、どのアダプターを使用する必要がありますか? テストが失敗した場合にのみ ITestListener を使用してスクリーンショットを作成する例を誰かが提供してくれるでしょうか?

4

2 に答える 2

5

私は Allure+TestNG で同様の問題を抱えており、BaseTest クラスでIHookableインターフェイスを実装することで解決しました。その run() メソッドを実装すると、通常どおりテストを実行するように TestNG に指示するだけで済みますが、例外が発生した場合にスクリーンショットを撮るために例外をキャッチする必要があります。

Javadoc は次のように述べています。

run() メソッドは、見つかった各 @Test メソッドの代わりに呼び出されます。テスト メソッドの呼び出しは、IHookCallBack パラメーターの callBack() メソッドの呼び出し時に実行されます。

コード スニペットは次のようになります。

public class BaseTest implements IHookable {

    @Override
    public void run(IHookCallBack callBack, ITestResult testResult) {

        callBack.runTestMethod(testResult);
        if (testResult.getThrowable() != null) {
            try {
                takeScreenShot(testResult.getMethod().getMethodName());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Attachment(value = "Failure in method {0}", type = "image/png")
    private byte[] takeScreenShot(String methodName) throws IOException {
        return getWebDriver().getScreenshotAs(OutputType.BYTES);
    }
}

テストメソッドの結果の実行はまだ不明であり、その時点で「RUNNING」ステータスになっているため、まだ testResult.isSuccess() を使用できないことに注意してください。

これにより、例外がキャッチされた直後にスクリーンショットが取得され、魅力レポートの適切なテストケースに配置されます

于 2015-05-29T12:44:57.850 に答える