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

问题描述 投票:0回答:1

我最近将我的项目从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个回答
1
投票

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

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

您是否尝试过使用@AfterTest注释?不确定,但onFinish(ITestContext context)可能会在@AfterMethodAfterTestca之间徘徊,使用你的电子邮件稍早离开;完全附上之前!不确定,为什么你在每次测试后发送电子邮件而不是在整个套件完成后发送[所以使用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附带的内置报告更好!

© www.soinside.com 2019 - 2024. All rights reserved.