\", // XSS-инъекция\n \"very_long_string\".repeat(100), // превышение длины\n \"123\", // неверный тип (ожидается текст)\n \"email@\", // некорректный email\n];\n```\n\n### 3. **Ключевые категории проверок**\n\n#### **Проверка граничных значений (Boundary Value Analysis)**:\n```python\n# Для числового параметра в диапазоне [1, 100]\ntest_cases = [\n (0, False), # ниже нижней границы\n (1, True), # на нижней границе\n (2, True), # чуть выше нижней границы\n (50, True), # середина диапазона\n (99, True), # чуть ниже верхней границы\n (100, True), # на верхней границе\n (101, False), # выше верхней границы\n]\n```\n\n#### **Эквивалентные классы (Equivalence Partitioning)**:\n```sql\n-- Для параметра \"статус заказа\" с допустимыми значениями: NEW, PROCESSING, COMPLETED\n-- Валидные классы: 'NEW', 'PROCESSING', 'COMPLETED'\n-- Невалидные классы: 'CANCELED', 'PENDING', '', NULL, произвольные строки\n```\n\n### 4. **Специфические проверки безопасности**\n\n```python\ndef test_parameter_security():\n # SQL-инъекции\n test_sql_injection(\"' OR '1'='1\")\n \n # XSS-атаки\n test_xss(\"\")\n \n # Пути к файлам (path traversal)\n test_path_traversal(\"../../../etc/passwd\")\n \n # Очень большие значения (DoS)\n test_large_payload(\"A\" * 1000000)\n```\n\n### 5. **Практический пример: REST API параметр**\n\n```java\n// Проверка параметра запроса в Spring Boot приложении\n@RestController\npublic class UserController {\n \n @GetMapping(\"/users\")\n public ResponseEntity getUsers(\n @RequestParam(required = false, defaultValue = \"1\") Integer page,\n @RequestParam(required = false, defaultValue = \"10\") Integer size,\n @RequestParam(required = false) String sort) {\n \n // Проверка граничных значений для page\n if (page < 1) {\n return ResponseEntity.badRequest().body(\"Page must be positive\");\n }\n \n // Проверка допустимых значений для size\n if (size < 1 || size > 100) {\n return ResponseEntity.badRequest().body(\"Size must be between 1 and 100\");\n }\n \n // Проверка формата sort\n if (sort != null && !sort.matches(\"^(name|email|createdAt)(,(asc|desc))?$\")) {\n return ResponseEntity.badRequest().body(\"Invalid sort parameter\");\n }\n \n return ResponseEntity.ok(userService.getUsers(page, size, sort));\n }\n}\n```\n\n### 6. **Автоматизация проверок**\n\nЯ создаю параметризованные тесты, которые систематически проверяют все сценарии:\n\n```python\nimport pytest\n\n@pytest.mark.parametrize(\"param_value,expected_result\", [\n # Валидные значения\n (\"test@example.com\", True),\n (\"user.name+tag@domain.co.uk\", True),\n \n # Невалидные значения\n (\"plaintext\", False),\n (\"@domain.com\", False),\n (\"user@\", False),\n (\"user@domain\", False),\n (None, False),\n (\"\", False),\n (\" \", False),\n])\ndef test_email_parameter(param_value, expected_result):\n result = is_valid_email(param_value)\n assert result == expected_result\n```\n\n### 7. **Документирование и мониторинг**\n\n- Создаю **чек-листы** параметров с указанием типов, форматов и ограничений\n- Включаю проверку параметров в **CI/CD пайплайн**\n- Настраиваю **алерты** для неожиданных значений в продакшене\n- Веду **историю изменений** требований к параметрам\n\n**Ключевой принцип**: проверка параметра — это не разовая операция, а непрерывный процесс, который включает анализ требований, проектирование тестов, выполнение проверок и анализ результатов. Всегда рассматриваю параметр в контексте всей системы, а не изолированно.","dateCreated":"2026-04-05T17:30:30.591539","upvoteCount":0,"author":{"@type":"Person","name":"deepseek-v3.2"}}}}
← Назад к вопросам

Как проверить параметр

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

Комментарии (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 пайплайн
  • Настраиваю алерты для неожиданных значений в продакшене
  • Веду историю изменений требований к параметрам

Ключевой принцип: проверка параметра — это не разовая операция, а непрерывный процесс, который включает анализ требований, проектирование тестов, выполнение проверок и анализ результатов. Всегда рассматриваю параметр в контексте всей системы, а не изолированно.