Приведите примеры тестовых сценариев (кейсов) для проверки восстановления соединения (реконнекта).

«Приведите примеры тестовых сценариев (кейсов) для проверки восстановления соединения (реконнекта).» — вопрос из категории Техники тест-дизайна, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестирование реконнекта проверяет, как клиентское приложение или устройство восстанавливает связь с сервером после разрыва.

Позитивные сценарии:

  1. Автоматический реконнект при временной потере сети.
    • Шаги: Запустить передачу данных > отключить сеть (Wi-Fi/мобильные данные) на 10 секунд > включить сеть.
    • ОР: После восстановления сети приложение автоматически переподключается и возобновляет операцию.
  2. Ручной реконнект через UI.
    • Шаги: Принудительно разорвать соединение > нажать кнопку "Переподключиться" в интерфейсе.
    • ОР: Соединение успешно устанавливается, статус меняется на "Подключено".
  3. Реконнект после перезагрузки сервера.
    • Шаги: Установить активное соединение > перезапустить серверную часть > подождать.
    • ОР: Клиент обнаруживает разрыв, выполняет повторные попытки и подключается, когда сервер становится доступен.

Негативные сценарии:

  1. Реконнект при отсутствии сети.
    • ОР: Попытки подключения завершаются ошибкой, пользователь видит понятное сообщение (например, "Нет соединения с интернетом").
  2. Превышение лимита попыток.
    • ОР: После N неудачных попыток (например, 5) реконнект прекращается, возможно, с переходом в состояние "Ошибка соединения".
  3. Реконнект с устаревшими или неверными учетными данными.
    • ОР: Получена ошибка аутентификации/авторизации, требуется повторный логин.

Пример проверки на Python с использованием WebSockets:

import asyncio
import websockets

async def test_auto_reconnect():
    uri = "ws://localhost:8765"
    try:
        # Первоначальное подключение
        connection = await websockets.connect(uri)
        print("Connected.")

        # Имитация разрыва (закрытие клиента)
        await connection.close()
        print("Connection closed.")

        # Попытка повторного подключения (имитация логики реконнекта)
        for attempt in range(3):
            await asyncio.sleep(2)  # Задержка между попытками
            try:
                connection = await websockets.connect(uri, ping_timeout=None)
                print(f"Reconnect successful on attempt {attempt+1}.")
                break
            except ConnectionRefusedError:
                print(f"Reconnect attempt {attempt+1} failed.")
    except Exception as e:
        print(f"Test failed: {e}")

# Запуск теста
asyncio.run(test_auto_reconnect())