Комментарии (1)
🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Стратегия проверки параметра в тестировании
Проверка параметра — это фундаментальная задача в тестировании, которая требует системного подхода. Вот моя методология, основанная на многолетнем опыте:
1. Анализ источника и типа параметра
Перед проверкой необходимо определить:
- Источник параметра: query-строка URL, тело HTTP-запроса (JSON, XML, form-data), заголовки, cookies, переменные окружения
- Тип данных: строка, число, булево значение, массив, объект, null
- Ожидаемый формат: email, дата, UUID, специальная маска (например, телефон)
2. Основные аспекты валидации
Позитивные проверки (валидные данные):
# Пример позитивных тестов для параметра "age"
def test_valid_age_parameter():
# Нормальные значения
assert validate_age(25) == True
# Граничные значения
assert validate_age(18) == True # нижняя граница
assert validate_age(100) == True # верхняя граница
Негативные проверки (невалидные данные):
// Пример негативных тестов для строкового параметра
const invalidCases = [
null, // отсутствие значения
undefined, // неопределенное значение
"", // пустая строка
" ", // пробелы
"<script>alert()</script>", // XSS-инъекция
"very_long_string".repeat(100), // превышение длины
"123", // неверный тип (ожидается текст)
"email@", // некорректный email
];
3. Ключевые категории проверок
Проверка граничных значений (Boundary Value Analysis):
# Для числового параметра в диапазоне [1, 100]
test_cases = [
(0, False), # ниже нижней границы
(1, True), # на нижней границе
(2, True), # чуть выше нижней границы
(50, True), # середина диапазона
(99, True), # чуть ниже верхней границы
(100, True), # на верхней границе
(101, False), # выше верхней границы
]
Эквивалентные классы (Equivalence Partitioning):
-- Для параметра "статус заказа" с допустимыми значениями: NEW, PROCESSING, COMPLETED
-- Валидные классы: 'NEW', 'PROCESSING', 'COMPLETED'
-- Невалидные классы: 'CANCELED', 'PENDING', '', NULL, произвольные строки
4. Специфические проверки безопасности
def test_parameter_security():
# SQL-инъекции
test_sql_injection("' OR '1'='1")
# XSS-атаки
test_xss("<script>malicious()</script>")
# Пути к файлам (path traversal)
test_path_traversal("../../../etc/passwd")
# Очень большие значения (DoS)
test_large_payload("A" * 1000000)
5. Практический пример: REST API параметр
// Проверка параметра запроса в Spring Boot приложении
@RestController
public class UserController {
@GetMapping("/users")
public ResponseEntity<?> getUsers(
@RequestParam(required = false, defaultValue = "1") Integer page,
@RequestParam(required = false, defaultValue = "10") Integer size,
@RequestParam(required = false) String sort) {
// Проверка граничных значений для page
if (page < 1) {
return ResponseEntity.badRequest().body("Page must be positive");
}
// Проверка допустимых значений для size
if (size < 1 || size > 100) {
return ResponseEntity.badRequest().body("Size must be between 1 and 100");
}
// Проверка формата sort
if (sort != null && !sort.matches("^(name|email|createdAt)(,(asc|desc))?$")) {
return ResponseEntity.badRequest().body("Invalid sort parameter");
}
return ResponseEntity.ok(userService.getUsers(page, size, sort));
}
}
6. Автоматизация проверок
Я создаю параметризованные тесты, которые систематически проверяют все сценарии:
import pytest
@pytest.mark.parametrize("param_value,expected_result", [
# Валидные значения
("test@example.com", True),
("user.name+tag@domain.co.uk", True),
# Невалидные значения
("plaintext", False),
("@domain.com", False),
("user@", False),
("user@domain", False),
(None, False),
("", False),
(" ", False),
])
def test_email_parameter(param_value, expected_result):
result = is_valid_email(param_value)
assert result == expected_result
7. Документирование и мониторинг
- Создаю чек-листы параметров с указанием типов, форматов и ограничений
- Включаю проверку параметров в CI/CD пайплайн
- Настраиваю алерты для неожиданных значений в продакшене
- Веду историю изменений требований к параметрам
Ключевой принцип: проверка параметра — это не разовая операция, а непрерывный процесс, который включает анализ требований, проектирование тестов, выполнение проверок и анализ результатов. Всегда рассматриваю параметр в контексте всей системы, а не изолированно.