Использование модели client-test в RestAssured.Net |
07.12.2023 00:00 |
Автор: Баз Дейкстра (Bas Dijkstra) Несколько недель назад в моей LinkedIn-ленте появился пост от коллеги-автоматизатора Куо Динга. В нем Куо предлагает использование того, что он называет моделью «клиент – тест», для улучшения разделения ответственности при создании тестов API на основе HTTP в REST Assured. Мне очень нравятся и идея, и модель Куо, это отличный шаг к улучшению читабельности и поддерживаемости кода API-тестов. Как разработчик RestAssured.Net, C#-варианта Rest Assured, я немедленно заинтересовался, можно ли использовать эту модель в моей библиотеке, и если да, то насколько хорошо. Если кратко: можно. Если полно: можно, и вот как это сделать. Я практически в точности повторяю пример Куо – я пишу тест, который верифицирует создание нового контакта, то есть простого класса, представляющего контакт, с именем, фамилией и email-адресом в качестве свойств. Как и в примере Куо, начнем с создания абстрактного ClientBase с общими настройками, которые может использовать множество клиентов: public abstract class ClientBase protected ClientBase(Uri baseUri) public RequestSpecification RequestSpec() Этот общий базовый класс затем можно использовать для создания ContactClient, отвечающий за операции с контактами – скажем, за получение конкретного контакта через HTTP GET to /contact/{id} или создание нового через HTTP POST to /contact: public class ContactClient : ClientBase public ContactClient() : base(BaseUri) public VerifiableResponse CreateContact(Contact contact) public VerifiableResponse GetContact(string contactId) Избавившись от всех настроек HTTP-клиента, тест-метод может сконцентрироваться на создании нужных данных, выполнении операции и проверке ответа: private readonly ContactClient contactClient = new ContactClient(); [Test] this.contactClient Из вышесказанного можно сделать два вывода о модели «клиент-тест», как это уже сделал Куо:
P. S.: если вы измените подпись метода CreateContact() в ContactClient на public VerifiableResponse CreateContact(object contact) то сможете передавать анонимный объект вместо создания сильно типизированной копии контакта: [Test] this.contactClient Здорово, правда? Весь код из статьи можно найти на GitHub. |