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

Ответ

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

Базовые сценарии проверки:

  1. Валидные данные

    • Ввод корректных данных, соответствующих спецификации (например, name@example.com для email).
  2. Граничные значения и пределы

    • Минимальная длина: Пустая строка (если поле необязательное), один символ.
    • Максимальная длина: Ввод строки максимально допустимой длины, попытка ввода на 1 символ больше.
    • Граничные значения для чисел: Минимум, максимум, значения чуть ниже/выше границ.
  3. Некорректные (невалидные) данные

    • Запрещенные символы (эмодзи, скрипты, спецсимволы для текстового поля).
    • Неверный формат (дата, email, номер телефона).
    • SQL-инъекции (' OR '1'='1), XSS-пейлоады (<script>alert(1)</script>).
  4. Поведение и интерактивность

    • Копирование (Ctrl+C), вставка (Ctrl+V), вырезание (Ctrl+X).
    • Отмена действий (Ctrl+Z) и повтор (Ctrl+Y).
    • Автозаполнение браузера.
    • Очистка поля (крестик или кнопка "Clear").
  5. Визуальная обратная связь и доступность

    • Отображение плейсхолдера и его исчезновение при фокусе.
    • Подсветка ошибок (цвет рамки, текст сообщения).
    • Навигация с клавиатуры (Tab, Shift+Tab, Enter).
    • Работа со скринридерами (aria-атрибуты).

Пример набора тестов для поля "Email" (Python, pytest):

import pytest

# Валидные данные (Positive tests)
VALID_EMAILS = ["test@example.com", "user.name+tag@domain.co.uk"]
# Невалидные данные (Negative tests)
INVALID_EMAILS = ["", "invalid", "@domain.com", "test@.com", "a" * 256 + "@test.com"]

@pytest.mark.parametrize("email", VALID_EMAILS)
def test_valid_email_accepted(email_input_field, email):
    email_input_field.set_value(email)
    email_input_field.blur()  # Имитация потери фокуса
    assert email_input_field.is_valid() == True
    assert email_input_field.get_error_message() == ""

@pytest.mark.parametrize("email", INVALID_EMAILS)
def test_invalid_email_rejected(email_input_field, email):
    email_input_field.set_value(email)
    email_input_field.blur()
    assert email_input_field.is_valid() == False
    # Проверяем, что сообщение об ошибке отображается и не пустое
    assert len(email_input_field.get_error_message()) > 0

Ответ 18+ 🔞

А, тестирование полей ввода! Ну это ж святое, блядь. Сидишь, как дурак, и вбиваешь туда всякую хуйню, чтобы понять, не развалится ли всё к ебеням.

Слушай, а ты знаешь, что большинство багов — это просто потому, что программисты нихуя не проверяют, что им в поля пихают? Один раз забыл про SQL-инъекцию — и всё, твоя база данных теперь в публичном доступе, как последняя шлюха. В рот меня чих-пых!

Вот смотри, как я это обычно делаю, чтобы покрыть всё, от функционала до безопасности. Это не просто «ввёл цифры — ок». Это целая наука, ёпта!

С чего начинаю, как конченый зануда:

  1. Нормальные данные. Ну тут всё просто. Пишем vasya@mail.ru в email — и радуемся, что прошло. Скука смертная, но надо.

  2. А вот тут начинается веселье — границы и пределы.

    • Пустота. Отправляю пустое поле. Если оно обязательно — должен быть пиздёц (ошибка). Если нет — тишина и спокойствие.
    • Один символ. Буква «ё». Цифра «1». Смотрим, не сломается ли логика валидации.
    • Максимальная длина. Вот это прикол! Беру и вставляю текст, который длиннее, чем твоё терпение. На 1 символ больше лимита — и наблюдаю, как поле должно вежливо сказать: «Ну ты чё, мудила, переборщил».
    • Числа. Минимум, максимум, и значения чуть-чуть за бортом. Часто баги сидят именно на этих «чуть-чуть».
  3. Королевство невалидного говна. Тут я отрываюсь по полной.

    • Запрещённые символы. Пихаю эмодзи 😂 в поле «Имя». Или скрипты. Смотрю, не проёбывается ли санитайзация.
    • Кривой формат. Дата 99.99.9999, телефон +7-ххх-бля-чёрт. Email я@сам.дурак.
    • Атаки, блядь! Мои любимые. Каждый раз ржу, как конь.
      • SQL-инъекция: ' OR '1'='1. Если после этого меня пускает без логина — всё, пидарас шерстяной, проект накрылся медным тазом.
      • XSS: <script>alert('Ты лох')</script>. Если алерт вылез — фронтендеру можно ебать в сраку, он нихуя не экранировал.
  4. Поведение и интерактив — проверяю, не тупой ли интерфейс.

    • Копипаста (Ctrl+C/V). Вдруг нельзя вставить? Или, наоборот, вставляется лишняя хуйня?
    • Отмена (Ctrl+Z). Ввёл херню — отменил. Вернул. Работает?
    • Автозаполнение от браузера. Выбираешь из списка — не подставляет ли ерунду?
    • Крестик очистки. Нажал — всё стёрлось? А если текст длинный? А если курсор не в конце?
  5. Визуал и доступность — для тех, кто не только мышкой тыкает.

    • Плейсхолдер. Есть? Исчезает при фокусе? Не съебывает ли куда раньше времени?
    • Ошибки. Подсвечивается ли поле красным? Появляется ли внятное сообщение, а не «Error 1488»?
    • Клавиатура. Можно ли Tab'ом перейти? Enter'ом отправить?
    • Скринридеры. Aria-атрибуты на месте? Или для них наш интерфейс — тёмный лес?

Ну и, собственно, как это выглядит в коде. Блок не трогаю, он святой.

import pytest

# Нормальная почта
VALID_EMAILS = ["test@example.com", "user.name+tag@domain.co.uk"]
# Говно разной степени вонючести
INVALID_EMAILS = ["", "invalid", "@domain.com", "test@.com", "a" * 256 + "@test.com"]

@pytest.mark.parametrize("email", VALID_EMAILS)
def test_valid_email_accepted(email_input_field, email):
    email_input_field.set_value(email)
    email_input_field.blur()  # Симулирую, что убрал курсор
    assert email_input_field.is_valid() == True
    assert email_input_field.get_error_message() == ""  # Никаких ошибок!

@pytest.mark.parametrize("email", INVALID_EMAILS)
def test_invalid_email_rejected(email_input_field, email):
    email_input_field.set_value(email)
    email_input_field.blur()
    assert email_input_field.is_valid() == False  # Должно быть невалидно!
    # И сообщение об ошибке должно быть, а не пустота
    assert len(email_input_field.get_error_message()) > 0

Вот так вот, друг. Кажется, что хуйня, но без этого — терпения ноль ебать. Потом пользователь введёт что-то не то, и весь этот карточный домик, который вы называете «фичей», накроется одним ёбаным алертом из консоли.