Ответ
Тестирование реконнекта проверяет, как клиентское приложение или устройство восстанавливает связь с сервером после разрыва.
Позитивные сценарии:
- Автоматический реконнект при временной потере сети.
- Шаги: Запустить передачу данных > отключить сеть (Wi-Fi/мобильные данные) на 10 секунд > включить сеть.
- ОР: После восстановления сети приложение автоматически переподключается и возобновляет операцию.
- Ручной реконнект через UI.
- Шаги: Принудительно разорвать соединение > нажать кнопку "Переподключиться" в интерфейсе.
- ОР: Соединение успешно устанавливается, статус меняется на "Подключено".
- Реконнект после перезагрузки сервера.
- Шаги: Установить активное соединение > перезапустить серверную часть > подождать.
- ОР: Клиент обнаруживает разрыв, выполняет повторные попытки и подключается, когда сервер становится доступен.
Негативные сценарии:
- Реконнект при отсутствии сети.
- ОР: Попытки подключения завершаются ошибкой, пользователь видит понятное сообщение (например, "Нет соединения с интернетом").
- Превышение лимита попыток.
- ОР: После N неудачных попыток (например, 5) реконнект прекращается, возможно, с переходом в состояние "Ошибка соединения".
- Реконнект с устаревшими или неверными учетными данными.
- ОР: Получена ошибка аутентификации/авторизации, требуется повторный логин.
Пример проверки на 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())