Как проверить поле для ввода возраста методом граничных значений?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Проверка поля ввода возраста методом граничных значений
Метод граничных значений — один из ключевых в арсенале QA Automation, особенно для проверки числовых полей. Он основан на принципе, что ошибки чаще всего возникают на границах входных значений, а не в центре диапазона. Для поля «Возраст» мы должны определить допустимый диапазон, а затем тестировать значения на его границах и за их пределами.
Для примера, предположим, что поле «Возраст» принимает значения от 18 до 120 лет (типичные ограничения для многих систем).
Шаги проверки
- Определение допустимого диапазона:
* Нижняя граница (`min`): 18
* Верхняя граница (`max`): 120
* Допустимый диапазон: [18, 120] (включительно).
- Выбор тестовых значений:
Мы тестируем не только сами граничные значения, но и значения рядом с ними.
* **Корректные граничные значения (валидные)**:
* `min` = 18
* `max` = 120
* Любое значение внутри диапазона, например, 50.
* **Некорректные граничные значения (невалидные)**:
* `min - 1` = 17 (сразу за нижней границей)
* `max + 1` = 121 (сразу за верхней границей)
* **Дополнительные сценарии (по желанию или требованию)**:
* `min + 1` = 19
* `max - 1` = 119
* Значение 0, отрицательные числа (например, -1, -100)
* Нечисловые значения: строки, спецсимволы (это уже проверка на валидацию типа данных).
Автоматизация проверки в коде (пример на Python с использованием Pytest)
Вот как эти сценарии могут быть реализованы в тестах. Предполагается, что у нас есть объект веб-страницы (age_input_page) с методом set_age_and_validate(value), который вводит значение и возвращает True, если оно принято, или False/выбрасывает исключение, если нет.
import pytest
class TestAgeInputBoundaryValues:
"""Класс для тестирования граничных значений поля Возраст."""
# Валидные граничные значения и позитивный кейс
@pytest.mark.parametrize("valid_age", [18, 120, 50])
def test_valid_age_boundaries(self, age_input_page, valid_age):
"""Проверяем, что валидные границы и внутреннее значение принимаются."""
result = age_input_page.set_age_and_validate(valid_age)
assert result is True, f"Валидный возраст {valid_age} должен быть принят системой."
# Невалидные граничные значения
@pytest.mark.parametrize("invalid_age", [17, 121])
def test_invalid_age_boundaries(self, age_input_page, invalid_age):
"""Проверяем, что значения прямо за границами диапазона отклоняются."""
result = age_input_page.set_age_and_validate(invalid_age)
# Ожидаем, что система НЕ примет значение (False) или выбросит ошибку валидации.
assert result is False, f"Невалидный возраст {invalid_age} должен быть отклонен."
# Дополнительные негативные проверки
@pytest.mark.parametrize("edge_case", [0, -1, -999])
def test_extreme_invalid_ages(self, age_input_page, edge_case):
"""Проверка явно недопустимых значений (отрицательные, ноль)."""
result = age_input_page.set_age_and_validate(edge_case)
assert result is False, f"Значение {edge_case} не должно быть допустимым возрастом."
# Проверка на некорректный тип данных (например, строка)
def test_non_numeric_input(self, age_input_page):
"""Проверка, что поле не принимает текст."""
# Предполагаем, что метод обрабатывает исключение или возвращает False.
# В реальности может потребоваться перехват исключения или проверка сообщения об ошибке.
with pytest.raises(ValueError) or age_input_page.set_age_and_validate("двадцать пять") is False:
# Если исключение было выброшено или вернулось False - тест пройден.
pass
Ключевые аспекты для автоматизатора
- Параметризация тестов: Использование
@pytest.mark.parametrizeделает код чище и позволяет легко добавлять новые значения. - Читаемость и отчетность: Названия тестовых методов должны четко указывать, что проверяется (
valid_age_boundaries,invalid_age_boundaries). - Валидация поведения системы: Важно проверять не просто факт ввода данных, а реакцию системы: показ ошибки, блокировку кнопки, подсветку поля. В коде это отражено в проверке булева результата (
True/False) или перехвате исключений. - Интеграция с CI/CD: Такие тесты должны быть частью pipeline, чтобы гарантировать, что регрессия не сломает базовую валидацию поля.
- Взаимодействие с фронтендом: В реальном проекте методы
set_age_and_validateбудут использовать Selenium или Playwright для взаимодействия с полем ввода и проверки UI-элементов с сообщениями об ошибках.
Расширение метода
Для более тщательного тестирования метод граничных значений можно комбинировать с анализом классов эквивалентности:
- Валидный класс: 18-120.
- Невалидные классы: меньше 18, больше 120, нечисловые данные.
Таким образом, проверка поля возраста — это не только ввод чисел 17, 18, 120, 121. Это комплексная проверка логики валидации на всех критических точках, что идеально ложится на автоматизацию, обеспечивая скорость и надежность при каждом запуске.