Ответ
Тестирование безопасности становится нефункциональным, когда оценивает не бизнес-логику, а атрибуты качества системы, связанные с защитой. Ключевые аспекты:
- Тестирование на отказоустойчивость (Resilience): Как система ведет себя при целенаправленных атаках (например, DDoS), сохраняя доступность основных функций.
- Тестирование производительности под нагрузкой атаки: Падает ли производительность при сканировании уязвимостей или попытках подбора учетных данных.
- Оценка устойчивости (Penetration Testing): Время и усилия, необходимые для взлома системы (обход аутентификации, инъекции).
Пример: Тест устойчивости к brute-force-атаке
import requests
API_LOGIN_URL = "https://api.example.com/auth/login"
def test_brute_force_protection():
"""Система должна блокировать учетную запись после N неудачных попыток."""
username = "test_user"
max_attempts = 5
for attempt in range(1, max_attempts + 2): # +1 попытка сверх лимита
response = requests.post(API_LOGIN_URL,
json={"login": username, "password": "wrong"})
if attempt > max_attempts:
# После превышения лимита должна быть ошибка блокировки
assert response.status_code == 429 or "locked" in response.text,
f"Система не заблокировала аккаунт после {max_attempts} попыток."
else:
# До лимита — стандартный отказ
assert response.status_code == 401
Такие тесты проверяют не что делает система (функциональность входа), а как она это делает в условиях угроз.