【问题标题】:TestNg email reports are not currentTestNg 电子邮件报告不是最新的
【发布时间】:2018-02-01 10:20:33
【问题描述】:

我最近将我的项目从 JUnit5 转换为 TestNG,只是为了获得体面的报告。

我添加了一个监听器,在每次运行结束时生成报告:

@Override
public void onFinish(ITestContext context) {
    System.out.println("FINISH. Sending email report.");
    utils.EmailHandler.sendEmail("Finished test", context.toString());
}

我的问题是,通过电子邮件发送的报告不是来自当前运行(如所愿),而是上一次运行。

但是,如果我使用 Eclipse IDE 打开 /test-output/custom-report.html 中的报告,它就是正确的!

如何确保发出的电子邮件是最新的?

我在这里看过几个类似的问题,但都不适合我:

类似问题:

TestNg emailable-report is not updating?

ReportNG HTML report not updating

当我将对 sendEmail 的调用移至侦听器的 GenerateReport 方法的末尾时,它终于起作用了。这消除了所有混乱,并确保输出文件在尝试发送之前是完整的。

【问题讨论】:

  • 请发布一些代码以显示文件的创建方式/时间!

标签: java selenium testng


【解决方案1】:

除非您以某种方式附加旧版本;根据您的描述,我想说该文件很可能是在发送电子邮件之后创建的(因此每次都是以前的版本)。但是,如果这个理论是正确的,那么它一定是第一次通过电子邮件发送了一个空文件 :) 是吗?

想法:在发送电子邮件的代码中插入几分钟的延迟。邮件一发出就去检查文件,我想这将是旧版本(因为它还没有创建!)

您是否尝试过使用@AfterTest 注释?不确定,但onFinish(ITestContext context) 可能在@AfterMethodAfterTest 之间徘徊,导致您的电子邮件稍早离开;在完全附上之前!不过不知道为什么要在每次测试后发送电子邮件,而不是在整个套件完成后发送电子邮件[所以使用onFinish(ISuite suite)]。

@AfterTest  
public void afterTest(ITestContext context) {

    //improving answer after initial comments
    if(bufferredWriter!=null){
    bufferredWriter.close();
    }       
    else{
    System.out.println("FINISH. Sending email report.");
    utils.EmailHandler.sendEmail("Finished test", context.toString());
    }   
}

祝你好运!

PS。不过,我强烈建议您查看extentReports。绝对比 TestNG 自带的内置报告更好!

【讨论】:

  • 我认为你是对的,@Xwris Stoixeia - 我在其中放入了一些打印语句,事实上,直到 sendEmail 运行后它才会关闭编写器。即使从 @AfterTest 调用 sendEmail!
  • 您是否在不同的线程上并行运行?如果不检查 writer 是否在 utils.EmailHandler.sendEmail stackoverflow.com/questions/36301347/… 之前关闭,也可以尝试 @AfterSuite
  • Steve 也试试@AfterClass,可能是第一个
  • @AfterClass 也不起作用。有没有一种干净的方式来发送由 testng 自动生成的“emailable-report.html”?
  • 试试@AfterSuite
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2013-02-18
  • 2019-11-21
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多