Модель Client-Test для тестирования REST API |
10.01.2024 00:00 |
Автор: Куо Динг (Kwo Ding) Разделение ответственности – отличный принцип программирования, разделяющий код на отдельные секции, у каждой из которых свои обязанности. Применим этот принцип к коду тестов, создавая тесты REST API. Допустим, у нас есть сервис адресной книги с API для выполнения CRUD-операций (создание, чтение, обновление, удаление). К примеру:
При помощи Rest Assured можно создать контакт в тесте: @Test Модель client-testДовольно просто, не так ли? Так, но по мере роста количества тестов хочется избавиться от всех этих настроек, чтобы просто выполнить http-запрос теста. Переработаем это с использованием модели client-test:
Такая настройка явно разделит ответственность. Начнем с настройки базового клиента с общей конфигурацией. public abstract class BaseClient { Замечу, что это упрощенный пример, куда можно добавить больше настроек – к примеру, для (де)сериализации объектов. Теперь создадим ContactClient, который имеет дело непосредственно с http-запросами. public class ContactClient extends BaseClient { ОК, вернемся к тесту. В примере ниже тест не замусорен настройками http-переговоров и концентрируется только на шагах/действиях и проверках. private final ContactClient client = new ContactClient(); void shouldCreateContact() { ЗаключениеРазделение ответственности – прекрасный принцип программирования, который, как и любой другой хороший принцип, стоит применять к коду тестов. При внедрении тестов REST API логично, чтобы тест содержал только шаги и проверки. Выполнение http-запросов можно абстрагировать в так называемый клиент. Таким образом тесты станут четче, а клиент(ы) можно легко расширить и использовать в других тестах. |