Java @如果仅通过测试,则testng中的AfterClass/Suite
我使用testng@AfterClass注释在外部系统中进行一些清理。但当测试失败时,我真的需要这些数据。如果只通过了测试,我可以让testng执行一些操作吗?好的,afterclass/aftersuite级别没有任何内容。您可以做以下几件事:Java @如果仅通过测试,则testng中的AfterClass/Suite,java,testng,Java,Testng,我使用testng@AfterClass注释在外部系统中进行一些清理。但当测试失败时,我真的需要这些数据。如果只通过了测试,我可以让testng执行一些操作吗?好的,afterclass/aftersuite级别没有任何内容。您可以做以下几件事: AfterMethod将ITestResult作为参数,该参数提供当前执行测试的结果。基于此,您可以进行清理 或 ISuiteListener为您提供了一个带有testresult对象的onFinish方法,您可以迭代该方法,然后执行清理 有一个选项可
有一个选项可以获取当前时刻之前所有失败测试的信息。您必须将ITestContext注入到“afterClass”方法中
迭代所有结果并按TestClass进行筛选,例如,如果只有测试通过,则可以仅删除当前测试类的测试数据:
@AfterClass
public void deleteCreatedData(ITestContext context) {
if (hasClassFailedTests(context)) return;
//do your cleanup for current test class
}
protected boolean hasClassFailedTests(ITestContext context) {
Class clazz = this.getClass();
return context.getFailedTests().getAllMethods().stream().anyMatch(it ->
it.getRealClass().equals(clazz));
}
你能告诉我真正的问题是什么吗?奇怪的是,你总是想删除导致测试失败的数据。不,恰恰相反。如果测试数据通过,我想删除它。更好。所以你应该调整标题和描述:他们说的是相反的是,谢谢你指出。根据文件,它可能是一个(未确认)。
@AfterClass
public void deleteCreatedData(ITestContext context) {
if (hasClassFailedTests(context)) return;
//do your cleanup for current test class
}
protected boolean hasClassFailedTests(ITestContext context) {
Class clazz = this.getClass();
return context.getFailedTests().getAllMethods().stream().anyMatch(it ->
it.getRealClass().equals(clazz));
}