Какие основные проверки вы выполняете при тестировании поля ввода?

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

Ответ

Тестирование поля ввода — это проверка его корректной обработки данных, валидации и поведения. Вот структурированный подход:

1. Валидация данных (Positive & Negative Testing):

  • Валидные данные: Ввод данных, которые должны быть приняты (корректный email, телефон, число в диапазоне).
  • Невалидные данные: Проверка реакции на некорректный ввод:
    • Неправильный формат (email без @).
    • Запрещенные символы (скрипты, SQL-инъекции типа ' OR '1'='1).
    • Пустое поле (если оно обязательное).
    • Пробелы в начале/конце (должны обрезаться?).

2. Проверка граничных значений и ограничений:

  • Минимальная/максимальная длина: Ввод строки на 1 символ меньше, ровно на границе и на 1 символ больше лимита.
  • Диапазон чисел: Проверка значений на нижней и верхней границе, а также за их пределами.
  • Ограничение по типу: Только числа, только буквы и т.д.

3. Проверка поведения и UX:

  • Копирование/вставка (Ctrl+C/Ctrl+V).
  • Перетаскивание текста (drag & drop).
  • Автозаполнение (браузерное или внутри приложения).
  • Маска ввода (для телефонов, дат) — корректность подстановки символов.
  • Сообщения об ошибках: Они должны быть понятными и появляться вовремя.

4. Тестирование безопасности (санитайзинг):

  • Проверка, что потенциально опасные символы (<, >, &, ', ") экранируются или удаляются, чтобы предотвратить XSS-атаки.

Пример набора тест-кейсов для поля "Имя пользователя" (макс. 20 символов, только латиница/цифры):

import re

def validate_username(username):
    pattern = r'^[a-zA-Z0-9]{1,20}$'
    return bool(re.match(pattern, username))

# Тестовые данные
test_cases = [
    ("ValidUser123", True),      # Валидный
    ("", False),                 # Пустое
    ("A", True),                # Минимальная длина (1)
    ("A" * 20, True),           # Максимальная длина (20)
    ("A" * 21, False),          # Превышение длины (21)
    ("User_Name", False),       # Недопустимый символ '_'
    ("User<script>", False),    # Опасные символы
    (" User ", False),          # Пробелы
]

for input_data, expected in test_cases:
    result = validate_username(input_data)
    assert result == expected, f"Failed for: '{input_data}'. Expected: {expected}, Got: {result}"

Инструменты: Для UI-тестов — Selenium, Cypress. Для API/бэкенд-валидации — юнит-тесты на языке разработки.