我最近将我的项目从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方法的末尾时,它终于奏效了。这样可以消除所有混淆并确保输出文件在尝试发送之前完成。
除非,你以某种方式附加旧版本;从你的描述中,我会说很可能是在发送电子邮件之后创建文件(因此每次都是以前的版本)。但是,如果这个理论是正确的,它必须第一次通过电子邮件发送一个空文件:)是吗?
想法:在发送电子邮件的代码中插入几分钟的延迟。一旦电子邮件离开,请立即检查文件,我认为它将是旧版本(因为它还没有创建!)
您是否尝试过使用@AfterTest
注释?不确定,但onFinish(ITestContext context)
可能会在@AfterMethod
和AfterTest
ca之间徘徊,使用你的电子邮件稍早离开;完全附上之前!不确定,为什么你在每次测试后发送电子邮件而不是在整个套件完成后发送[所以使用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附带的内置报告更好!