Что такое двухуровневая архитектура (клиент-сервер)?

«Что такое двухуровневая архитектура (клиент-сервер)?» — вопрос из категории Архитектура, который задают на 28% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Двухуровневая архитектура (2-tier, клиент-сервер) — это модель, в которой приложение четко разделено на два логических компонента:

  1. Клиент (Frontend / Presentation Tier): Отвечает за пользовательский интерфейс и представление данных. Это может быть десктопное приложение, браузер или мобильное приложение.
  2. Сервер (Backend / Data Tier): Отвечает за бизнес-логику, обработку запросов, работу с базой данных и предоставление данных клиенту.

Подход к тестированию такой архитектуры:

  • Раздельное тестирование компонентов:

    • Клиент: Юзабилити-тестирование, кросс-браузерное/кросс-платформенное тестирование, проверка корректности отображения данных, полученных с сервера.
    • Сервер: Модульное и интеграционное тестирование API, тестирование бизнес-логики, нагрузочное тестирование эндпоинтов.
  • Интеграционное тестирование связи:

    • Проверка корректности обмена данными (форматы JSON/XML, коды ответов HTTP).
    • Тестирование обработки ошибок на стороне сервера и их адекватного отображения на клиенте.
    • Проверка безопасности: аутентификация, авторизация, валидация входящих данных на сервере.

Пример тест-кейса для проверки интеграции:

Сценарий: Пользователь создает заказ через UI.
Шаги:
1. На клиенте заполняем форму заказа и нажимаем "Отправить".
2. Клиент отправляет POST-запрос на серверный эндпоинт `/api/orders`.
Ожидаемый результат:
- Сервер отвечает статусом 201 Created и JSON с ID нового заказа.
- Клиент корректно отображает сообщение об успехе и ID заказа.
- Данные заказа появляются в базе данных.

Варианты негативного тестирования:
- Отправка пустого тела запроса -> сервер возвращает 400 Bad Request -> клиент показывает понятную ошибку.
- Потеря сетевого соединения -> клиент показывает уведомление о попытке повторной отправки.

Преимущества для тестирования: Четкое разделение позволяет эффективно использовать автоматизацию для API-тестирования сервера независимо от клиента.