当前位置: 首页 > 知识库问答 >
问题:

TestNg电子邮件报告不是最新的

楚岳
2023-03-14

我最近将我的项目从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中打开报告,它是正确的!

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

当我将对sendEmail的调用移到监听器的GenerateReport方法的末尾时,它终于起作用了。这样可以消除所有混淆,并确保输出文件在试图发送出去之前是完整的。

共有1个答案

羊城
2023-03-14

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

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

您是否尝试过使用@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());
    }   
}

不过,我强烈建议您看一下ExtentReports。绝对比TestNG附带的内置报告更好!

 类似资料: