Ответ
Тестирование полей ввода — это комбинация проверки функциональности, удобства использования и безопасности.
Ключевые техники:
-
Проверка валидации (позитивные/негативные тесты):
- Граничные значения: Минимальная/максимальная длина, допустимые диапазоны чисел.
- Корректные/некорректные типы данных: Ввод чисел в текстовое поле, дат в неверном формате.
- Обязательность поля: Поведение при отправке пустого значения.
-
Проверка безопасности:
- SQL-инъекция: Попытка ввода
' OR '1'='1или'; DROP TABLE users;--. - XSS (Межсайтовый скриптинг): Ввод тегов
<script>alert('XSS')</script>илиjavascript:в атрибутах. - Инъекция команд:
&& dirили| cat /etc/passwd(для систем, взаимодействующих с ОС).
- SQL-инъекция: Попытка ввода
-
Проверка логики обработки:
- Тримминг пробелов: Удаляются ли пробелы в начале/конце строки?
- Обработка регистра: Чувствительно ли поле к регистру (логин/пароль)?
- Маски ввода: Корректно ли применяются маски для телефонов, кредитных карт?
-
Проверка интеграции и зависимостей:
- Условная обязательность: Поле становится обязательным только при определенных значениях другого поля.
- Валидация связей: Согласованность дат ("дата окончания" не раньше "даты начала").
Пример автоматизированной проверки на 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 до 100, а ты вводишь 101 или 0. Жди пизды.
- Типы данных, ёб твою мать: Поле для email, а ты туда цифры пишешь. Поле для даты, а ты «позавчера» вбиваешь. Система должна это отлавливать, а не тупо сваливаться в ошибку 500, как говно в прорубь.
- Обязательность: Оставил поле пустым, а там звёздочка красная стоит. Отправляешь — должен получить по шапке, а не чтобы форма молча проглотила этот пиздец и отправила в базу
NULL.
-
Проверка безопасности (здесь мы ищем пидорасов):
- SQL-инъекция: Классика жанра! Вводишь
' OR '1'='1и ждёшь, не пропустит ли тебя система, как своего, на халяву. Или'; DROP TABLE users;--— это уже высший пилотаж, чтобы проверить, не доверия ли ебать ноль у разработчиков к пользовательскому вводу. - XSS (Межсайтовый скриптинг): Пытаешься впихнуть
<script>alert('Лох!')</script>. Если алерт вылез — всё, пизда backend-разработчику, можно идти пить чай с печеньками и грустить о его карьере. - Инъекция команд: Это если форма с системой как-то общается. Вбиваешь
&& dirили| cat /etc/passwd. Если в ответ получишь список файлов или пароли — ну, ядрёна вошь, это овердохуища плохо.
- SQL-инъекция: Классика жанра! Вводишь
-
Проверка логики обработки (мелкие, но важные пиздюли):
- Тримминг пробелов: Ввёл
" вася ". Сохранилось как есть, с пробелами? Теперь ищи этого « васю » в базе. Удобно, бля? Нет, неудобно. - Регистр: Логин
Vasyaиvasya— это один пользователь или два разных? Пароль чувствителен к регистру? Надо проверить, а то получится, что заходишь сQwErTy123, а он говорит «неверный пароль», а ты уже волнение ебать чувствуешь. - Маски: Поле для телефона. Начинаешь вводить — автоматически ставится
+7 (? Красиво. А если стереть и ввести свой формат, оно не сломается?
- Тримминг пробелов: Ввёл
-
Проверка интеграции (когда одно поле на другое влияет):
- Условная обязательность: Выбрал в селекте «Доставка» — появилось обязательное поле «Адрес». Не выбрал — поле скрылось. Работает? Или адрес остался висеть, как манда с ушами, требуя заполнения, хотя ты «Самовывоз» выбрал?
- Валидация связей: «Дата начала» — 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» обязательно для заполнения, мудак». Ну, в вежливой форме, конечно. Чтобы не раскрывать внутреннюю кухню, а то ещё какой хитрожопый что-нибудь подберет.