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

Ответ

Тестирование полей ввода — это комбинация проверки функциональности, удобства использования и безопасности.

Ключевые техники:

  1. Проверка валидации (позитивные/негативные тесты):

    • Граничные значения: Минимальная/максимальная длина, допустимые диапазоны чисел.
    • Корректные/некорректные типы данных: Ввод чисел в текстовое поле, дат в неверном формате.
    • Обязательность поля: Поведение при отправке пустого значения.
  2. Проверка безопасности:

    • SQL-инъекция: Попытка ввода ' OR '1'='1 или '; DROP TABLE users;--.
    • XSS (Межсайтовый скриптинг): Ввод тегов <script>alert('XSS')</script> или javascript: в атрибутах.
    • Инъекция команд: && dir или | cat /etc/passwd (для систем, взаимодействующих с ОС).
  3. Проверка логики обработки:

    • Тримминг пробелов: Удаляются ли пробелы в начале/конце строки?
    • Обработка регистра: Чувствительно ли поле к регистру (логин/пароль)?
    • Маски ввода: Корректно ли применяются маски для телефонов, кредитных карт?
  4. Проверка интеграции и зависимостей:

    • Условная обязательность: Поле становится обязательным только при определенных значениях другого поля.
    • Валидация связей: Согласованность дат ("дата окончания" не раньше "даты начала").

Пример автоматизированной проверки на Python:

def test_email_field_validation():
    # Негативные тесты
    assert not is_valid_email("")           # Пустое
    assert not is_valid_email("user")       # Нет @ и домена
    assert not is_valid_email("user@")      # Нет домена
    # Позитивный тест
    assert is_valid_email("user@example.com") # Валидный email

Важно: Сообщения об ошибках должны быть понятными пользователю и не раскрывать внутреннюю информацию системы.

Ответ 18+ 🔞

А, ну вот, тестирование полей ввода, блядь! Это ж не просто ткнуть пальцем в экран, это целая наука, ёпта! Как будто ты не тестировщик, а какой-нибудь психолог-сапёр, который пытается понять, где у этой формы спрятана бомба замедленного действия, на которую пользователь обязательно наступит.

Слушай, сюда, это же надо проверить всё: и работает ли оно, и не сломает ли его какой-нибудь умник, и не обосрётся ли бабка, которая два пальца ставит. Короче, комбинация из трёх вещей: чтобы работало, чтобы удобно было, и чтобы какой-нибудь пидарас шерстяной не взломал всё к хуям собачьим.

Основные приёмы, так сказать, нашего ремесла:

  1. Проверка валидации (когда всё ок и когда всё пиздец):

    • Граничные значения: Вот это любимое. Минимальная длина, максимальная длина. Вписал на один символ больше — и всё, форма должна тебе вежливо, но настойчиво сказать «иди нахуй, перепиши». Диапазоны чисел — от 1 до 100, а ты вводишь 101 или 0. Жди пизды.
    • Типы данных, ёб твою мать: Поле для email, а ты туда цифры пишешь. Поле для даты, а ты «позавчера» вбиваешь. Система должна это отлавливать, а не тупо сваливаться в ошибку 500, как говно в прорубь.
    • Обязательность: Оставил поле пустым, а там звёздочка красная стоит. Отправляешь — должен получить по шапке, а не чтобы форма молча проглотила этот пиздец и отправила в базу NULL.
  2. Проверка безопасности (здесь мы ищем пидорасов):

    • SQL-инъекция: Классика жанра! Вводишь ' OR '1'='1 и ждёшь, не пропустит ли тебя система, как своего, на халяву. Или '; DROP TABLE users;-- — это уже высший пилотаж, чтобы проверить, не доверия ли ебать ноль у разработчиков к пользовательскому вводу.
    • XSS (Межсайтовый скриптинг): Пытаешься впихнуть <script>alert('Лох!')</script>. Если алерт вылез — всё, пизда backend-разработчику, можно идти пить чай с печеньками и грустить о его карьере.
    • Инъекция команд: Это если форма с системой как-то общается. Вбиваешь && dir или | cat /etc/passwd. Если в ответ получишь список файлов или пароли — ну, ядрёна вошь, это овердохуища плохо.
  3. Проверка логики обработки (мелкие, но важные пиздюли):

    • Тримминг пробелов: Ввёл " вася ". Сохранилось как есть, с пробелами? Теперь ищи этого « васю » в базе. Удобно, бля? Нет, неудобно.
    • Регистр: Логин Vasya и vasya — это один пользователь или два разных? Пароль чувствителен к регистру? Надо проверить, а то получится, что заходишь с QwErTy123, а он говорит «неверный пароль», а ты уже волнение ебать чувствуешь.
    • Маски: Поле для телефона. Начинаешь вводить — автоматически ставится +7 (? Красиво. А если стереть и ввести свой формат, оно не сломается?
  4. Проверка интеграции (когда одно поле на другое влияет):

    • Условная обязательность: Выбрал в селекте «Доставка» — появилось обязательное поле «Адрес». Не выбрал — поле скрылось. Работает? Или адрес остался висеть, как манда с ушами, требуя заполнения, хотя ты «Самовывоз» выбрал?
    • Валидация связей: «Дата начала» — 1 января. «Дата окончания» — 31 декабря прошлого года. Система должна сказать: «Чувак, бля, ты в своём уме? Конец раньше начала?».

Вот, смотри, как это примерно в коде выглядит, на Python:

def test_email_field_validation():
    # Негативные тесты (когда всё должно быть плохо)
    assert not is_valid_email("")           # Пустое — не проканало?
    assert not is_valid_email("user")       # Нет @ и домена — отказ?
    assert not is_valid_email("user@")      # Нет домена — тоже мимо?
    # Позитивный тест (когда должно быть хорошо)
    assert is_valid_email("user@example.com") # Нормальный email — прошёл?

И главное, блядь, запомни: сообщения об ошибках! Они должны быть для пользователя, а не для тебя, сидящего с логами. Не «SQLException: constraint violation», а «Поле «Email» обязательно для заполнения, мудак». Ну, в вежливой форме, конечно. Чтобы не раскрывать внутреннюю кухню, а то ещё какой хитрожопый что-нибудь подберет.