TestNG, где я могу запустить код после Reporter? Хотите отправить test-output/emailable-report.html

Я хочу запустить код для отправки электронной почты с файлом emailable-report.html. В идеале это должно работать, когда я запускаю набор TestNG либо из IDE, либо из Maven. Я думаю, что здесь задан тот же вопрос: 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("[email protected]", "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, потому что файл, отправленный по электронной почте, пуст. Я получил что-то в этом, если я изменю путь к файлу результатов, я получу исключение FileNotFoundException, но я предполагаю, что файл не сбрасывается и не закрывается в том месте, где я пытаюсь его отправить.

Где я могу поместить свой код, чтобы он мог найти и отправить заполненный файл emailable-report.html для текущего запуска? Должен ли я реализовать свой собственный прослушиватель IReporter или есть какой-то простой способ просто получить (completed) вывод прослушивателя по умолчанию, который создает файл emailable-report.html?


person Aaron Pailthorp    schedule 04.01.2013    source источник
comment
Каким-то образом я хочу переопределить метод уже работающего EmailableReporter, а не полностью заменить его. Может, мне нужно его заменить? Либо так, либо найдите лучшее место для размещения кода отправки почты.   -  person Aaron Pailthorp    schedule 05.01.2013


Ответы (1)


В итоге я отредактировал приведенный выше пример кода, чтобы он был переопределением generateReport, а не endHtml, но идея более или менее та же. Я думаю, что меня смущало то, что путь, который я пытался использовать, был неправильным, как только я переключился на 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);
    }
}
person Aaron Pailthorp    schedule 05.01.2013