Разделы портала

Онлайн-тренинги

.
Встречайте - RestAssured.Net
14.06.2023 00:00

Автор: Баз Дейкстра (Bas Dijkstra)
Оригинал статьи
Перевод: Ольга Алифанова

Возможно, вы знаете, что я фанат библиотеки REST Assured для Java – особенно из-за простоты ее использования при создании читабельных, но мощных тестов для HTTP API.

К тому же с тех самых пор, как я работал над SDK Python и C# для платформы TestProject, я размышлял о создании и публикации своей собственной открытой библиотеки. Почему? Отчасти потому, что я люблю сообщество открытого исходного кода, а отчасти – потому что я искренне убежден, что надо благодарить делом и "платить вперед"; а отчасти потому, что я считаю это ценным опытом, а также хорошим способом попрактиковаться и отточить навыки разработки.

Объединяем все это с тем фактом, что, несмотря на крайнюю полезность RestSharp, я годами искал библиотеку, которая будет так же облегчать создание API-тестов на C#, как и REST Assured на Java – и мы получим идею переноса REST Assured в C#.

Так и родился RestAssured.Net.

На этих выходных я выпустил версию 0.4.1, и это первый бета-релиз (после ряда альфа-релизов) – а это значит, что я считаю ее готовой для обкатки тестовым сообществом. Вот самые важные ссылки:

Посмотрим, как воспользоваться RestAssured.Net для создания тестов REST API.

Начало работы

Вот что вам нужно, чтобы начать работу с RestAssured.Net:

  • Создайте новый проект C#, используя или .NET 6, или .NET Core 3.1 (обе они – LTS-версии фреймворка .NET).
  • Добавьте свой любимый фреймворк юнит-тестирования.
  • Добавьте пакет RestAssured.Net
  • Добавьте следующую директиву using:
using static RestAssuredNet.RestAssuredNet;

- и вы готовы к бою!

Первый тест

Тем, кто имеет опыт работы с REST Assured в Java, этот синтаксис, возможно, покажется очень знакомым:

[Test]
public void CheckResponseStatusCodeAndJsonResponseBodyElementValue()
{
Given()
.When()
.Get("http://api.zippopotam.us/us/90210")
.Then()
.AssertThat()
.StatusCode(200)
.And()
.Body("$.places[0].state", NHamcrest.Is.EqualTo("California"));
}

Синтаксис Gherkin "Если – Когда – Тогда" красиво делит наш тест (а это всего лишь одна строчка кода) на три внятных секции: настройка запроса (Given), выполнение вызова HTTP (When) и обработка и/или проверка ответа (Then).

Тут я не буду демонстрировать все возможности RestAssured.Net, так как большинство из них (если не все) проиллюстрировано примерами в руководстве пользователя, но вот неполный список поддерживаемого:

Для запросов:

  • Добавление заголовков Content-Type, Accept, а также кастомных.
  • Добавление кукис
  • Добавление авторизации – как базовой, так и через токен OAuth2.
  • Добавление параметров запроса и пути.
  • Добавление содержания запроса с возможностью преобразования объектов в JSON или XML.

Для ответов:

  • Верификация значений заголовков и элементов тела JSON.
  • Извлечение как ответов целиком, так и значений заголовков, а также элементов тела ответа JSON и XML.
  • Обратное преобразование содержания ответа в объекты из JSON или XML.

Продемонстрирую, как легко пользоваться RestAssured.NET – вот пример такого обратного преобразования:

[Test]
public void DeserializeIntoCSharpObject()
{
TodoItem todoItem = (TodoItem)Given()
.When()
.Get("https://jsonplaceholder.typicode.com/todos/1")
.As(typeof(TodoItem));
Assert.That(todoItem.title, Is.EqualTo("delectus aut autem"));
}

А это внедрение класса TodoItem:

public class TodoItem
{
public int userId { get; set; }
public int id { get; set; }
public string title { get; set; }
public bool completed { get; set; }
}

Что теперь?

Будут добавляться новые возможности, поэтому следите за релизами – они должны выходить достаточно регулярно в ближайшие недели/месяцы.

На данный момент мне в основном нужны люди из сообществ тестировщиков и C#-разработки, желающие попользоваться библиотекой, рассказать мне о своих впечатлениях и, что важнее всего, проблемах, с которыми они столкнулись, и функциях, которых им не хватает.

Пожалуйста, не молчите и создайте задачу на GitHub, если видите потенциал для улучшения – я уверен, там есть что добавить и/или улучшить.

Обсудить в форуме