← Назад к вопросам

Что может передаваться в теле запроса?

2.0 Middle🔥 112 комментариев
#Теория тестирования

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Типы данных, передаваемых в теле HTTP-запроса

При автоматизации тестирования API важно понимать, какие данные могут передаваться в теле запроса, так как это напрямую влияет на формирование корректных запросов, валидацию ответов и тестирование граничных случаев. Тело запроса (Request Body) используется в методах POST, PUT, PATCH и иногда DELETE для передачи данных на сервер.

Основные форматы тела запроса

1. application/x-www-form-urlencoded

Стандартный формат для HTML-форм. Данные кодируются в виде пар «ключ=значение», объединенных символом &, с заменой специальных символов на процентное кодирование (URL encoding).

POST /login HTTP/1.1
Content-Type: application/x-www-form-urlencoded

username=testuser&password=secret123&remember_me=true

Использование в автотестах: Часто встречается в legacy-системах. В инструментах вроде Postman или RestAssured передается как параметры формы.

2. multipart/form-data

Используется для отправки бинарных данных (файлов) вместе с текстовыми полями. Тело разделяется на части (boundary), каждая со своими заголовками.

POST /upload HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="description"

Тестовый файл
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="report.pdf"
Content-Type: application/pdf

(бинарное содержимое файла)
------WebKitFormBoundary7MA4YWxkTrZu0gW--

Использование в автотестах: Критически важен для тестирования загрузки файлов. В коде передается через специальные методы, например, в RestAssured:

given()
    .multiPart("file", new File("report.pdf"))
    .multiPart("description", "Тестовый файл")
.when()
    .post("/upload")
.then()
    .statusCode(200);

3. application/json

Наиболее распространенный формат в современных RESTful API и микросервисах. Данные передаются в виде структурированных JSON-объектов или массивов.

POST /api/users HTTP/1.1
Content-Type: application/json

{
  "name": "Иван Петров",
  "email": "ivan@example.com",
  "age": 30,
  "isActive": true,
  "roles": ["admin", "user"],
  "address": {
    "city": "Москва",
    "street": "Ленина"
  }
}

Использование в автотестах: Основной формат для автоматизации. Легко генерировать, валидировать и манипулировать через объекты (например, POJO в Java или Pydantic в Python).

4. application/xml

Используется в SOAP API и некоторых legacy REST API. Данные структурированы с помощью тегов.

POST /api/data HTTP/1.1
Content-Type: application/xml

<user>
  <name>Иван Петров</name>
  <email>ivan@example.com</email>
  <age>30</age>
</user>

Использование в автотестах: Требует работы с XML-парсерами (например, XPath). Часто используется в интеграционном тестировании корпоративных систем.

5. text/plain, text/html, application/octet-stream

  • text/plain: Простой текст без форматирования.
  • text/html: HTML-контент (например, при отправке писем или контента CMS).
  • application/octet-stream: Поток байтов для произвольных бинарных данных (например, загрузка исполняемых файлов).

Практические аспекты для QA Automation

  1. Динамическое формирование тела: В автотестах тело часто генерируется программно. Например, использование Faker для создания тестовых данных или шаблонов (Jinja2, Mustache).

  2. Валидация схемы: Критически важно проверять соответствие отправляемых и получаемых данных заявленной схеме (JSON Schema, XML Schema). Это помогает отлавливать breaking changes.

  3. Тестирование граничных случаев и негативных сценариев: В тело запроса можно преднамеренно передавать:

    *   Невалидные данные (строки вместо чисел, спецсимволы).
    *   Очень большие объемы данных (например, огромный JSON).
    *   Пустые значения или `null`.
    *   Данные, нарушающие бизнес-логику (отрицательный возраст).

  1. Работа с токенами и подписями: В сложных API (особенно финансовых) тело запроса может использоваться для формирования цифровой подписи или HMAC. Автотесты должны корректно рассчитывать и подставлять эти значения.

  2. Сериализация и десериализация: Ключевой процесс в автотестах. Например, преобразование объекта Java в JSON (сериализация с помощью Jackson или Gson) и обратно (десериализация ответа от сервера в объект для удобной валидации).

Пример на Python (pytest + requests):

import requests
import json
from faker import Faker

fake = Faker()

def test_create_user():
    # Динамическое формирование JSON-тела
    body = {
        "name": fake.name(),
        "email": fake.email(),
        "age": fake.random_int(min=18, max=99)
    }
    
    headers = {"Content-Type": "application/json"}
    
    response = requests.post(
        "https://api.example.com/users",
        data=json.dumps(body),  # Сериализация словаря в JSON-строку
        headers=headers
    )
    
    # Десериализация ответа и валидация
    response_data = response.json()
    assert response.status_code == 201
    assert response_data["name"] == body["name"]
    # Дополнительная проверка по JSON Schema

Заключение

Для QA-инженера по автоматизации глубокое понимание форматов и содержимого тела запроса — это основа для создания надежных, поддерживаемых и всесторонних тестов API. Необходимо не только корректно формировать запросы, но и проектировать тесты, которые проверяют как позитивные сценарии, так и обработку сервером некорректных, неполных или злонамеренных данных, передаваемых в теле. Это напрямую влияет на безопасность и отказоустойчивость тестируемого приложения.

Что может передаваться в теле запроса? | PrepBro