ファイル emailable-report.html で電子メールを送信するコードを実行したいと思います。理想的には、これは、IDE または Maven から TestNG スイートを実行するときに機能します。ここでも同じ質問がされていると思います: https://groups.google.com/forum/?fromgroups=#!topic/webdriver/fvJ-edHPJ3g
コメントから、提案どおりに実行するための最小限の方法を理解しようとしています。既存の EmailableReporter のメソッドをコードを追加してオーバーライドし、電子メールを送信します。私は自分の IReporter リスナーを完全に実装することを避けようとしていますが、それは主にそれを行うことに関するメモに従うのに苦労しているためです (私の java-foo を少し超えて、完全な例を歓迎します)。
私のクラスは次のようになります。
public class TestMailSender extends EmailableReporter{
TestMailer testMailer = new TestMailer();
Message resultEmail;
@Override
public void generateReport(List<XmlSuite> arg0, List<ISuite> arg1, String arg2) {
/* Use the parent class to do the work */
super.generateReport(arg0, arg1, arg2);
/* create email from utility class with address, subject line, message content */
resultEmail = testMailer.makeEmail("someone@somewhere.com", "Build: " + "test"
+ "suite results", "results attached");
/* fetch the hopefully completed default report */
/* TODO: get report to common path for both IDE and Maven runs */
File resultsFile = new File("./test-output/emailable-report.html");
/* add file to the email with build referencing name, then send the email */
resultEmail = testMailer.attachFile(resultEmail, resultsFile.getAbsoluteFile(),
"build_" + "test" + "_emailable-report.html");
testMailer.sendEmail(resultEmail);
}
}
上記のクラスをリスナーとして TestNG スイートに追加すると、空の結果が得られます。ここで説明されているように、testNG.xml スイートでそれを実行しようとしています: http://testng.org/doc/documentation-main.html#listeners-testng-xml
コードを@AfterSuiteに配置したときのように、以前の実行結果ファイルを送信しないという点で、空の結果が進行している可能性があると思います。電子メールで送信されたファイルが空であるため、emailable-report.html ファイルの完了後、コードを実行しようとしてはいけません。resultsFileのパスを変更すると、FileNotFoundException が発生しますが、送信しようとしている時点でファイルがフラッシュされておらず、閉じられていないと思います。
現在の実行で完成した emailable-report.html ファイルを見つけて送信できるように、コードをどこに置くことができますか? 独自の IReporter リスナーを実装する必要がありますか、またはemailable-report.html ファイルを生成するデフォルト リスナーの ( completed ) 出力を取得する簡単な方法はありますか?