> Что такое нефункциональное тестирование и какие виды оно включает? (Python)

Уровень: junior · Роль: backend · Язык: Python · Категория: Технические вопросы

Компании: Luxoft, EVRAZ

Стек: Python

> Пример ответа

Короткий ответ

Нефункциональное тестирование проверяет, как система работает, а не что она делает. Оно оценивает характеристики: производительность, надёжность, безопасность, удобство использования и масштабируемость. Основные виды: нагрузочное, стрессовое, тестирование производительности, безопасности, совместимости, удобства использования и восстановления после сбоев. Для backend-разработчика это критично, потому что API и сервисы должны выдерживать реальные нагрузки и быть отказоустойчивыми.

Подробное объяснение

Нефункциональное тестирование (non-functional testing) - это процесс проверки атрибутов качества системы, которые не связаны с конкретной бизнес-логикой. Если функциональное тестирование отвечает на вопрос "работает ли функция", то нефункциональное - на вопросы "насколько быстро", "насколько стабильно", "насколько безопасно".

Основные виды:

  • Тестирование производительности (performance testing) - проверка скорости отклика, пропускной способности и использования ресурсов под ожидаемой нагрузкой.
  • Нагрузочное тестирование (load testing) - проверка поведения системы при постепенном увеличении нагрузки до ожидаемого пика.
  • Стрессовое тестирование (stress testing) - проверка поведения системы при нагрузке, превышающей нормальные пиковые значения, чтобы найти точку отказа.
  • Тестирование стабильности (soak testing) - проверка работы системы под длительной нагрузкой для выявления утечек памяти и деградации производительности.
  • Тестирование безопасности (security testing) - проверка устойчивости к атакам, корректности аутентификации и авторизации, защиты данных.
  • Тестирование совместимости (compatibility testing) - проверка работы системы в разных окружениях: версии Python, операционные системы, базы данных.
  • Тестирование восстановления (recovery testing) - проверка способности системы восстановиться после сбоев: перезапуск, потеря соединения с БД, отказ внешнего сервиса.
  • Тестирование масштабируемости (scalability testing) - проверка способности системы увеличивать производительность при добавлении ресурсов.

Для backend на Python это особенно важно: асинхронные фреймворки (FastAPI, aiohttp) требуют проверки под нагрузкой, а GIL накладывает ограничения на многопоточность.

На практике

На практике нефункциональное тестирование для backend-разработчика выглядит так:

  • Используются инструменты: locust, k6, JMeter для нагрузочного тестирования; pytest-benchmark для микро-бенчмарков; bandit и safety для базовой проверки безопасности.
  • Проверяются ключевые сценарии: время ответа API, количество запросов в секунду, использование CPU и памяти, время восстановления после рестарта.
  • Результаты фиксируются в отчётах, сравниваются с SLA (service level agreement) - например, "p95 latency < 300ms".
  • Для стресс-тестов важно определить точку отказа и поведение системы после неё: падает ли она с ошибкой 500 или корректно возвращает 503.

Пример кода

Пример простого нагрузочного теста с locust для проверки API:

PYTHON
from locust import HttpUser, task, between
class ApiUser(HttpUser):
wait_time = between(0.5, 2.0)
@task
def get_users(self):
self.client.get("/api/users")
@task(3)
def create_user(self):
self.client.post("/api/users", json={"name": "test"})

Запуск: locust -f load_test.py --host http://localhost:8000

Пример проверки времени отклика с pytest-benchmark:

PYTHON
def test_api_response_time(benchmark):
result = benchmark(api_call)
assert result.status_code == 200

Как отвечать на собеседовании

Начни с определения: нефункциональное тестирование проверяет качественные характеристики системы. Перечисли основные виды и для каждого дай краткую характеристику. Обязательно привяжи к backend: упомяни нагрузочное тестирование API, проверку стабильности под длительной нагрузкой, тестирование восстановления после сбоев БД. Если спросят про инструменты - назови locust, k6, pytest-benchmark. Покажи понимание trade-off: например, между производительностью и безопасностью (шифрование замедляет ответы). Не углубляйся в детали, если не спрашивают - для junior достаточно уверенного перечисления и понимания сути.

Что проверяет интервьюер

Интервьюер оценивает:

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

Для junior достаточно уверенно назвать 5-6 видов и объяснить, зачем каждый нужен. Хороший признак - упоминание SLA и метрик (latency, throughput).

Типичные ошибки

  • Путать нагрузочное и стрессовое тестирование: нагрузочное - до ожидаемого пика, стрессовое - сверх предела.
  • Называть только производительность и забывать про безопасность, совместимость, восстановление.
  • Не упоминать, что нефункциональное тестирование важно на backend, а не только на фронтенде.
  • Говорить, что это "необязательно" или "делается в конце" - на самом деле это часть continuous integration.
  • Не знать ни одного инструмента для нагрузочного тестирования.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью