Перезапустить неудачный тестовый случай автоматически в TestNG / Selenium
Я использую Selenium webdriver, в Java с TestNG для запуска X количество тестовых случаев.
Я хотел бы, чтобы любой тестовый случай автоматически перезапускался (либо от начала, либо от точки отказа), как только он терпит неудачу.
Я знаю, что TestNG framework имеет следующий метод
@Override
public void onTestFailure(ITestResult tr) {
log("F");
}
но я не знаю, как узнать, какой testcase это был, а затем, как я перезапущу его.
2 ответов
Я хотел увидеть пример с фактическим кодом в нем и нашел его здесь: перезапуск теста немедленно с помощью TestNg
наблюдайте, как приведенные ниже тесты будут повторно запускаться один раз, как только произойдет сбой.
import org.testng.Assert;
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
import org.testng.annotations.Test;
public class Retry implements IRetryAnalyzer {
private int retryCount = 0;
private int maxRetryCount = 1;
public boolean retry(ITestResult result) {
if (retryCount < maxRetryCount) {
retryCount++;
return true;
}
return false;
}
@Test(retryAnalyzer = Retry.class)
public void testGenX() {
Assert.assertEquals("james", "JamesFail"); // ListenerTest fails
}
@Test(retryAnalyzer = Retry.class)
public void testGenY() {
Assert.assertEquals("hello", "World"); // ListenerTest fails
}
}
от testng.org
каждый раз, когда тесты терпят неудачу в наборе, TestNG создает файл с именем testng-failed.xml в выходном каталоге. Этот XML-файл содержит необходимую информацию для повторного запуска только этих методов, которые не удалось, что позволяет быстро воспроизводить сбои без необходимости запускать все тесты.
Если вы хотите перезапустить тест точно после сбоя, вам нужно вызвать метод, который не удался. Вы можете получить это имя метода из объекта ITestResult.
Если вы хотите перезапустить все неудачные тестовые случаи вместе, то вы можете дать TestNG-failed.xml в качестве входного xml после первого выполнения.