Отправка многочастных запросов в RestAssured.Net |
20.08.2024 00:00 |
Автор: Баз Дейкстра (Bas Dijkstra) Недавно вышла версия RestAssured.Net 4.2.0. Помимо поддержки .NET 8, добавленной ранее, одной из самых значительных перемен стала поддержка создания и отправки многочастных запросов. В этой статье я подробнее расскажу об этом нововведении. Что такое многочастные запросы? Многочастные запросы позволяют передавать несколько наборов данных в едином теле запроса, разделив их границами. Как правило, они используются для передачи файлов, а также для отправки разных типов данных в одном запросе – скажем, файла и его метаданных в JSON-формате. В более ранних версиях RestAssured.Net в запросе нельзя было передать несколько наборов данных, хотя уже можно было отправить один или несколько файлов при помощи многочастного запроса. Мне указали на это в баг-репорте, переданном в мой репозиторий, и я решил глубже разобраться в том, как создаются такие запросы, и как их поддерживает .NET HttpRequestMessage. В результате поддержка многочастных запросов сильно улучшилась. Разберем несколько примеров. Пример 1: загрузка файла по-старинке До версии 4.2.0 RestAssured.Net поддерживал передачу одного или нескольких файлов (но ничего, кроме них) в многочастном теле запроса – вот так: Given() Если содержимое файла – ‘Watch Office Space’, то запрос выглядел вот так: POST https://your.endpoint.com/accepting-multipart HTTP/1.1 Доступны перегрузки – можно переопределить контрольное имя по умолчанию (file) и тип содержимого (определяется автоматически, в данном случае text/plain). Если вы хотите загрузить несколько файлов в одном запросе, можно просто объединить ряд вызовов в цепочку при помощи MultiPart(): Given() Пример 2: загрузка файлов с дополнительными данными В RestAssured.Net версии 4.2.0 появился новый способ загрузки многочастных запросов при помощи нового метода MultiPart(string - имя, HttpContent - содержимое). Это позволяет многочастно загружать любые данные, если они имеют тип HttpContent (согласно документации, или, на практике, любой тип, следующий из HttpContent). К примеру, тот же файл можно загрузить вместе с другими полями: Given() yielding POST https://your.endpoint.com/accepting-multipart HTTP/1.1 Если вы не хотите осуществлять несколько вызовов к MultiPart(), можно также передать объект типа Dictionary<string, HttpContent>: Dictionary<string, HttpContent> additionalMultipartPayload = new Dictionary<string, HttpContent>() Другие примеры многочастных запросов можно найти в приемочных тестах RestAssured.Net. RestAssured.Net находится на NuGet. |