Вы должны быть в состоянии сделать это с TestNG с сегодняшнего дня.Вам просто нужно извлечь объект Throwable
из ITestResult
определенного метода тестирования, проверить, является ли это исключение тайм-аута, и, если да, зарегистрировать его отдельно.
На сегодняшний день нет прямой очередиспособ сделать это с помощью слушателя TestNG.Я зарегистрировал новую проблему для отслеживания этой проблемы (https://github.com/cbeust/testng/issues/1952). Я постараюсь исправить это как можно скорее, и она будет доступна в следующей следующей основной версии TestNG. Пожалуйста, не стесняйтесь следить за этой проблемой для получения обновлений.
Вот пример, который показывает, как это сделать.
import com.rationaleemotions.stackoverflow.qn53280681.TimeoutListener;
import java.util.concurrent.TimeUnit;
import org.testng.ITestListener;
import org.testng.ITestResult;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import org.testng.internal.thread.ThreadTimeoutException;
@Listeners(TimeoutListener.class)
public class qn53280681 {
@Test(timeOut = 500)
public void timedMethod() throws InterruptedException {
TimeUnit.SECONDS.sleep(1);
}
public static class TimeoutListener implements ITestListener {
@Override
public void onTestFailure(ITestResult result) {
Throwable t = result.getThrowable();
if (t instanceof ThreadTimeoutException) {
System.err.println("The test timedout and caused a failure");
}
}
}
}
Вот вывод
The test timedout and caused a failure
org.testng.internal.thread.ThreadTimeoutException: Method com.rationaleemotions.stackoverflow.qn53280681.timedMethod() didn't finish within the time-out 500
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1150)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
===============================================
Default Suite
Total tests run: 1, Passes: 0, Failures: 1, Skips: 0
===============================================