我想运行代码以使用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文件的默认监听器的(已完成)输出?
答案 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);
}
}