← Назад к вопросам

Как проверить обязательность заполнения поля

1.3 Junior🔥 182 комментариев
#Другое

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Проверка обязательности заполнения поля: методы и подходы

Обязательность заполнения поля (required field validation) — один из фундаментальных аспектов тестирования пользовательских интерфейсов и бизнес-логики приложений. Проверка выполняется на разных уровнях: от UI до базы данных, и требует комплексного подхода.

1. Уровни проверки обязательности

A. UI-уровень (Фронтенд)

Проверка визуальных подсказок и поведения интерфейса:

  • Визуальные маркеры: Наличие звездочки (*), подписи "Обязательно" или выделения цветом.
  • Валидация в реальном времени: Сообщение об ошибке появляется при попытке уйти с пустого поля (onBlur) или после начала ввода (onChange).
  • Блокировка отправки: Кнопка "Отправить" неактивна, пока обязательные поля не заполнены.

Пример тест-кейса на UI:

Feature: Валидация обязательного поля "Email"
  Scenario: Попытка отправки формы с пустым обязательным полем
    Given Я нахожусь на странице регистрации
    When Я оставляю поле "Email" пустым
    And Я нажимаю кнопку "Зарегистрироваться"
    Then Я вижу сообщение об ошибке "Поле обязательно для заполнения"
    And Сообщение выделено красным цветом
    And Данные формы не отправляются на сервер

B. API-уровень (Бэкенд)

Наиболее критичная проверка, такова как клиентскую валидацию можно обойти.

  • Отправка запроса с пустым значением (null, "") и ожидание:
    *   HTTP статус `400` (Bad Request) или `422` (Unprocessable Entity).
    *   Четкого сообщения об ошибке в теле ответа.
  • Отправка запроса с полностью отсутствующим ключом поля в JSON/XML.
  • Проверка разных граничных значений: пробелы, табуляции (часто требуют трима).

Пример теста API на Python (pytest + requests):

import pytest
import requests

def test_required_email_field_validation():
    url = "https://api.example.com/v1/users"
    headers = {"Content-Type": "application/json"}
    
    # 1. Тело запроса с пустым email
    payload_empty = {"email": "", "name": "John Doe"}
    response_empty = requests.post(url, json=payload_empty, headers=headers)
    assert response_empty.status_code == 422
    assert "required" in response_empty.json().get("errors", {}).get("email", "").lower()
    
    # 2. Тело запроса без ключа email
    payload_missing = {"name": "John Doe"}
    response_missing = requests.post(url, json=payload_missing, headers=headers)
    assert response_missing.status_code == 422
    assert "email" in response_missing.json().get("errors", {})

    # 3. Положительный контроль - валидный запрос
    payload_valid = {"email": "test@example.com", "name": "John Doe"}
    response_valid = requests.post(url, json=payload_valid, headers=headers)
    assert response_valid.status_code in [200, 201]

C. Уровень базы данных

Проверка, что на уровне СУБД существуют соответствующие ограничения:

  • NOT NULL ограничение для обязательных полей.
  • Проверка через прямые запросы или миграции БД.

Пример SQL-проверки:

-- Проверка структуры таблицы (на примере PostgreSQL)
SELECT column_name, is_nullable 
FROM information_schema.columns 
WHERE table_name = 'users' 
AND column_name = 'email';

-- Ожидаемый результат: is_nullable = 'NO'

2. Стратегия и сценарии тестирования

Положительные сценарии:

  • Заполнение поля валидными данными -> форма отправляется.
  • Заполнение поля с ведущими/закрывающими пробелами (с учетом трима).

Отрицательные сценарии:

  • Пустое значение: "".
  • Только пробелы/табуляции.
  • Значение null (для API).
  • Удаление значения после заполнения.
  • Копирование-вставка пробела.
  • Отправка формы через горячие клавиши (например, Enter), минуя UI-валидацию.

3. Ключевые аспекты для проверки

  • Консистентность: Сообщения об ошибке должны быть единообразны для всех обязательных полей.
  • Доступность: Сообщения должны быть доступны для скринридеров (ARIA-атрибуты).
  • Локализация: Проверка перевода сообщений об ошибке на все поддерживаемые языки.
  • Зависимая обязательность: Когда поле становится обязательным только при определенных условиях (например, выбор "Другое" в выпадающем списке).
  • Восстановление после ошибки: После заполнения поля сообщение об ошибке должно исчезать.

4. Автоматизация проверок

Для комплексной проверки создают параметризованные тесты:

// Пример на Playwright (Node.js)
const { test, expect } = require('@playwright/test');

const requiredFields = ['email', 'phone', 'name'];

requiredFields.forEach(fieldName => {
  test(`Валидация обязательного поля ${fieldName}`, async ({ page }) => {
    await page.goto('/registration');
    
    // Заполняем все поля кроме тестируемого
    for (const field of requiredFields) {
      if (field !== fieldName) {
        await page.fill(`[name="${field}"]`, `valid_${field}@test.com`);
      }
    }
    
    await page.click('button[type="submit"]');
    
    // Проверяем сообщение об ошибке для конкретного поля
    const errorLocator = page.locator(`[data-error-for="${fieldName}"]`);
    await expect(errorLocator).toBeVisible();
    await expect(errorLocator).toContainText('обязательно');
  });
});

Итог: Проверка обязательности поля — это не просто "оставить поле пустым и нажать Отправить". Это многоуровневая стратегия, охватывающая UI, бизнес-логику (API) и хранение данных (БД). Наиболее важны серверные проверки, так как они являются последней линией защиты целостности данных. Все найденные дефекты должны классифицироваться по критичности: обход клиентской валидации — серьезнее, чем отсутствие звездочки у поля.