TestNG我可以在Reporter之后运行代码吗?想发送test-output / emailable-report.html

时间:2013-01-04 17:48:15

标签: java testng

我想运行代码以使用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文件之后,我不能运行我的代码,因为通过电子邮件发送的文件是空的。我 am 得到的东西如果我改变了resultFile的路径我得到了一个FileNotFoundException,但我想这个文件在我试图尝试的时候没有刷新和关闭发送它。

在哪里可以放置我的代码,以便它可以找到并发送当前运行的已完成的emailable-report.html文件?我必须实现自己的IReporter监听器,还是有一些简单的方法可以获取生成emailable-report.html文件的默认监听器的(已完成)输出?

1 个答案:

答案 0 :(得分:0)

我最后编辑上面的代码示例是覆盖generateReport而不是endHtml,但这个想法或多或少是相同的。我觉得让我感到困惑的是我尝试使用的路径不正确,一旦我切换到arg2而不是不正确的硬编码字符串,事情就开始起作用了。下面的代码块加上我的testNG.xml中扩展类的定义作为监听器,Bob是我的叔叔。

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);
    }
}