Как протестировать функционал авторизации на веб-сайте?

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

Ответ

Тестирование авторизации включает проверку функциональности, безопасности и устойчивости к атакам.

Основные сценарии:

  1. Позитивные тесты:
    • Успешный вход с валидными учетными данными.
    • Выход (logout) и завершение сессии.
    • Восстановление пароля через email/телефон.
  2. Негативные тесты:
    • Вход с неверным логином или паролем (должна быть общая ошибка, не уточняющая, что именно неверно).
    • Вход с пустыми полями.
    • Превышение лимита неудачных попыток с последующей блокировкой.
    • Истечение срока действия сессии (timeout).
  3. Тесты на безопасность:
    • SQL-инъекция: Попытка ввода ' OR '1'='1 в поля логина/пароля.
    • XSS: Попытка ввода <script>alert('XSS')</script>.
    • Перебор учетных данных (Brute-force): Проверка наличия задержки или капчи после нескольких неудач.
    • Перехват сессии: Попытка использовать украденный или поддельный токен.

Пример теста для API на Python (с использованием requests):

import requests

def test_successful_login():
    url = "https://api.example.com/login"
    payload = {"username": "valid_user", "password": "valid_pass"}
    response = requests.post(url, json=payload)

    assert response.status_code == 200
    assert "access_token" in response.json()
    assert "refresh_token" in response.json()

def test_sql_injection_prevention():
    url = "https://api.example.com/login"
    payload = {"username": "' OR '1'='1", "password": "any"}
    response = requests.post(url, json=payload)

    # Ожидаем отказ в авторизации, а не успешный вход или 500 ошибку
    assert response.status_code == 401 or response.status_code == 400