Комментарии (1)
🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое Query-параметры (Параметры строки запроса)?
Query-параметры (также известные как параметры строки запроса или URL-параметры) — это часть URL (Uniform Resource Locator), следующая за символом вопросительного знака ?. Они представляют собой набор пар «ключ-значение», разделенных символом амперсанда &, которые используются для передачи дополнительных данных и параметров от клиента (например, браузера или мобильного приложения) к серверу при выполнении HTTP-запроса.
Базовая структура URL с Query-параметрами
https://api.example.com/search?category=books&author=tolkien&limit=10
В этом примере:
- Базовый URL (endpoint):
https://api.example.com/search - Символ начала параметров:
? - Параметр 1:
category=books - Разделитель параметров:
& - Параметр 2:
author=tolkien - Параметр 3:
limit=10
Таким образом, серверу передаются три параметра: category со значением books, author со значением tolkien и limit со значением 10.
Основное назначение и использование
- Фильтрация, сортировка и поиск данных: Самый частый сценарий в RESTful API.
* `GET /api/products?category=electronics&min_price=500&sort_by=rating`
- Пагинация: Указание смещения и количества возвращаемых элементов.
* `GET /api/news?page=2&per_page=20`
- Настройка ответа API: Например, выбор языка или формата данных.
* `GET /api/user/123?lang=ru&fields=id,name,email`
- Передача состояния в веб-приложениях: Часто используется для сохранения состояния фильтров, которые можно добавить в закладки или которыми можно поделиться.
- Отслеживание в маркетинге (UTM-метки):
* `https://site.com/?utm_source=newsletter&utm_medium=email`
Особенности с точки зрения QA Automation
Для автоматизатора тестирования API понимание query-параметров критически важно по нескольким причинам:
- Тест-дизайн: Необходимо планировать тесты на корректную обработку сервером как валидных, так и невалидных параметров.
- Валидация: Сервер должен проверять типы данных (строки, числа), обязательность параметров, допустимые диапазоны значений.
- Негативное тестирование: Проверка реакции API на:
* **Дублирующиеся ключи:** `?id=1&id=2` (Какой `id` будет использован?)
* **Отсутствующие значения:** `?key=&key2=value` или `?key`
* **Специальные символы и кодирование:** Пробелы, амперсанды, кириллица должны быть корректно закодированы (например, пробел становится `%20`). Используется **URL Encoding (Percent-Encoding)**.
* **Очень длинные строки параметров** (возможное ограничение длины URL).
* **Некорректные типы данных:** Передача строки вместо ожидаемого числа (`?limit=ten`).
Пример кода для работы с Query-параметрами в автотестах (Python, requests)
import requests
import pytest
BASE_URL = "https://api.example.com/products"
def test_filtering_by_category_and_price():
"""Позитивный тест: фильтрация по категории и минимальной цене."""
params = {
"category": "books",
"min_price": 100,
"sort": "price_asc"
}
response = requests.get(BASE_URL, params=params)
assert response.status_code == 200
data = response.json()
# Проверяем, что все товары в ответе соответствуют фильтру
for product in data["items"]:
assert product["category"] == "books"
assert product["price"] >= 100
# Проверяем порядок сортировки (первые дешевле последних)
if len(data["items"]) > 1:
assert data["items"][0]["price"] <= data["items"][-1]["price"]
def test_pagination():
"""Тест корректности работы пагинации."""
params_page_1 = {"page": BO1, "per_page": 5}
params_page_2 = {"page": 2, "per_page": 5}
resp1 = requests.get(BASE_URL, params=params_page_1)
resp2 = requests.get(BASE_URL, params=params_page_2)
data1 = resp1.json()
data2 = resp2.json()
# Проверяем, что это разные наборы данных
assert data1["items"][0]["id"] != data2["items"][0]["id"]
# Проверяем соблюдение лимита на количество элементов
assert len(data1["items"]) <= 5
assert len(data2["items"]) <= 5
@pytest.mark.negative
def test_invalid_parameter_type():
"""Негативный тест: передача строки вместо числа для числового параметра."""
params = {"limit": "not_a_number"}
response = requests.get(BASE_URL, params=params)
# Ожидаем ошибку клиента (4xx), например, 400 Bad Request или 422 Unprocessable Entity
assert response.status_code == 400
error_data = response.json()
assert "error" in error_data
assert "limit" in error_data["message"].lower()
Ключевые выводы для автоматизатора
- Query–параметры — это механизм
GET-запросов. Хотя технически их можно передать и в теле других типов запросов, это противоречит лучшим практикам REST. Для передачи данных вPOST,PUT,PATCHзапросах используется тело запроса (request body), обычно в формате JSON или XML. - Они видны в истории браузера и логах. Это важно с точки зрения безопасности — никогда не передавайте в query-параметрах чувствительные данные (пароли, токены, персональные данные). Для этого используются заголовки (headers), например,
Authorization: Bearer <token>. - Тестирование должно быть комплексным. Помимо позитивных сценариев, обязательно покрывайте граничные значения, некорректные типы, спецсимволы и отсутствующие обязательные параметры. Именно в обработке ошибок часто кроются уязвимости и баги.