0

ファイル 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 ) 出力を取得する簡単な方法はありますか?

4

1 に答える 1

0

上記のコード例を endHtml ではなく generateReport のオーバーライドになるように編集することになりましたが、考え方はほぼ同じです。私を混乱させたのは、私が使用しようとしたパスが正しくなかったことだと思います。間違ったハードコードされた文字列ではなく arg2 に切り替えると、物事が機能し始めました。以下のコード ブロックに加えて、私の testNG.xml のリスナーとしての拡張クラスの定義と、ボブの叔父です。

public class TestMailSender extends EmailableReporter{
TestMailer testMailer = new TestMailer();
Message resultEmail;

@Override
public void generateReport(List<XmlSuite> arg0, List<ISuite> arg1, String arg2) {

    super.generateReport(arg0, arg1, arg2);

    String someBuildIdAsParameter = arg1.get(0).getParameter("build");
    String someEmailAsParameter = arg1.get(0).getParameter("notifyEmail");
    /* create email from utility class with address, subject line, message content */
    resultEmail = testMailer.makeEmail(someEmailAsParameter, "Build: " + someBuildIdAsParameter
            + " suite results", "results attached");

    /* fetch the hopefully completed default report */
    File resultsFile = new File(arg2 + "\\emailable-report.html");

    /* add file to the email with build referencing name, then send the email */
    resultEmail = testMailer.attachFile(resultEmail, resultsFile.getAbsoluteFile(),
            "build_" + someBuildIdAsParameter + "_emailable-report.html");
    testMailer.sendEmail(resultEmail);
    }
}
于 2013-01-05T06:33:23.203 に答える