← Назад ко всем вопросам

Как правильно делать ожидания/ретраи?

1️⃣ Как кратко ответить

Ожидания и ретраи в автоматизированном тестировании используются для повышения стабильности тестов. Ожидания позволяют тесту дождаться выполнения определенных условий перед продолжением, а ретраи — повторить тест в случае временных сбоев. Используйте явные ожидания для точного контроля условий и ретраи с ограничением количества попыток, чтобы избежать бесконечных циклов.

2️⃣ Подробное объяснение темы

В автоматизированном тестировании ожидания и ретраи играют ключевую роль в обеспечении стабильности и надежности тестов. Они помогают справляться с асинхронностью и временными сбоями, которые могут возникать в тестируемых приложениях.

Ожидания

Ожидания используются для того, чтобы тесты не "падали" из-за того, что элемент еще не загрузился или не стал доступным. Существует два основных типа ожиданий:

  1. Явные ожидания (Explicit Waits): Позволяют тесту ждать определенного условия или состояния элемента в течение заданного времени. Это дает возможность точно контролировать, что именно мы ждем.

    Пример на Selenium WebDriver (Java):

    WebDriver driver = new ChromeDriver();
    WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    ​
    // Ожидание, пока элемент не станет видимым
    WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("elementId")));
    
    • WebDriverWait создается с указанием времени ожидания в секундах.
    • until используется для ожидания, пока условие не станет истинным.
    • ExpectedConditions.visibilityOfElementLocated — условие, которое ждет, пока элемент не станет видимым.
  2. Неявные ожидания (Implicit Waits): Устанавливаются один раз и применяются ко всем элементам. Они указывают WebDriver ждать определенное время, прежде чем выбросить исключение, если элемент не найден.

    Пример на Selenium WebDriver (Java):

    WebDriver driver = new ChromeDriver();
    driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    ​
    // Поиск элемента
    WebElement element = driver.findElement(By.id("elementId"));
    
    • implicitlyWait устанавливает время ожидания для поиска элементов.
    • Применяется ко всем последующим вызовам findElement.

Ретраи

Ретраи используются для повторного выполнения теста или его части в случае временных сбоев, таких как сетевые задержки или нестабильность тестируемого приложения. Это помогает избежать ложных срабатываний тестов.

Пример на Java с использованием библиотеки TestNG:

import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
​
public class RetryAnalyzer implements IRetryAnalyzer {
    private int retryCount = 0;
    private static final int maxRetryCount = 3;
​
    @Override
    public boolean retry(ITestResult result) {
        if (retryCount < maxRetryCount) {
            retryCount++;
            return true; // Повторить тест
        }
        return false; // Не повторять тест
    }
}
  • IRetryAnalyzer — интерфейс, который позволяет реализовать логику повторных попыток.
  • retryCount — счетчик попыток.
  • maxRetryCount — максимальное количество попыток.
  • retry — метод, который возвращает true, если тест должен быть повторен, и false, если нет.

Зачем это нужно

Ожидания и ретраи помогают сделать тесты более устойчивыми к временным сбоям и асинхронности, что особенно важно в современных веб-приложениях с динамическим контентом. Это позволяет избежать ложных срабатываний и обеспечивает более надежную проверку функциональности приложения.

Тема: PyTest
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки