Как протестировать текстовое поле для ввода имени (name)?

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

Ответ

Тестирование текстового поля name требует проверки функциональности, валидации, безопасности и удобства использования.

Основные категории проверок:

Категория Что проверять Примеры тестовых данных / Действий
Валидные данные Приём корректных значений согласно требованиям. "John", "Анна", "O'Connor", "Van Damme", строка максимально допустимой длины.
Невалидные данные Обработка ошибок и понятные сообщения пользователю. Пустая строка, только пробелы, строка длиннее лимита, запрещённые символы (эмодзи, <>), SQL-инъекция (' OR '1'='1).
Граничные значения Поведение на границах допустимых значений. Минимальная длина (например, 2 символа), максимальная длина (например, 100 символов). Проверить ввод ровно 2, 100, 1 и 101 символ.
Безопасность Защита от инъекций и некорректной обработки. XSS (<script>alert(1)</script>), HTML-теги (<b>name</b>), специальные символы для формата данных (кавычки, запятые).
Функциональность UI Поведение интерфейса. Тримминг пробелов в начале/конце, реакция на Paste/Cut/Copy, ограничение длины в реальном времени, подсказки (placeholder), сообщения об ошибках.
Интеграция Корректное сохранение и отображение данных. Введённое имя корректно сохраняется в БД, отображается в профиле, в списках, используется в письмах.

Пример комплексного теста (Python + pytest):

import html

def sanitize_and_validate_name(input_name: str, max_len: int = 100) -> tuple[bool, str]:
    """Функция очистки и валидации имени."""
    # 1. Тримминг
    trimmed_name = input_name.strip()
    # 2. Проверка на пустоту после тримминга
    if not trimmed_name:
        return False, "Name cannot be empty"
    # 3. Проверка длины
    if len(trimmed_name) > max_len:
        return False, f"Name exceeds maximum length of {max_len}"
    # 4. Базовая санитизация (экранирование HTML)
    safe_name = html.escape(trimmed_name)
    # В реальности здесь могут быть дополнительные правила (допустимые символы и т.д.)
    return True, safe_name

# Тесты
def test_name_field_validation():
    # Валидные случаи
    is_valid, result = sanitize_and_validate_name("  John Doe  ")
    assert is_valid == True
    assert result == "John Doe"  # Проверяем тримминг

    # Невалидные случаи
    assert sanitize_and_validate_name("   ")[0] == False  # Только пробелы
    assert sanitize_and_validate_name("A" * 101)[0] == False  # Превышение длины

    # Безопасность
    is_valid, result = sanitize_and_validate_name("<script>alert('xss')</script>")
    # Функция должна вернуть экранированную строку
    assert result == "&lt;script&gt;alert(&#x27;xss&#x27;)&lt;/script&gt;"