Ответ
Для тестирования обработки разных типов данных я применяю комбинацию техник тест-дизайна, в первую очередь эквивалентное разбиение и анализ граничных значений.
1. Планирование тестовых данных:
- Эквивалентные классы: Группирую входные данные по ожидаемой реакции системы.
- Валидные данные: Корректные строки, числа, даты, булевы значения.
- Невалидные данные:
null/undefined, пустые строки, строки с неверным форматом (например, буквы в числовом поле).
- Граничные значения: Для числовых полей и строк проверяю значения на границах допустимых диапазонов.
- Минимальное и максимальное допустимое значение.
- Значения
min-1иmax+1(должны вызывать ошибку). - Максимальная и максимальная+1 длина строки.
2. Практический пример (тестирование поля 'Возраст'): Допустим, поле принимает целое число от 18 до 120.
- Валидные значения (ожидается успех): 18, 25, 120.
- Невалидные значения (ожидается ошибка):
- Граничные: 17, 121.
- Некорректный тип:
"двадцать пять",null,""(пустая строка),25.5(дробное). - Специальные случаи: 0, отрицательные числа, очень большие числа.
3. Реализация в автотестах (на примере API):
import pytest
import requests
@pytest.mark.parametrize("age_input, expected_status", [
(25, 200), # Валидное значение из середины диапазона
(18, 200), # Нижняя граница
(120, 200), # Верхняя граница
(17, 400), # Ниже нижней границы
(121, 400), # Выше верхней границы
(None, 400), # Null значение
("", 400), # Пустая строка
("twenty", 400), # Строка вместо числа
])
def test_age_validation(api_url, age_input, expected_status):
payload = {"age": age_input}
response = requests.post(f"{api_url}/user", json=payload)
assert response.status_code == expected_status, f"Failed for input: {age_input}"
4. Комбинаторное тестирование: Для форм с несколькими полями разных типов использую попарное тестирование (Pairwise), чтобы покрыть основные взаимодействия типов данных без взрывного роста числа тестов.