paint-brush
Драматург против Кипариса для автоматизированных тестов REST API: кто победит?к@bormando
8,617 чтения
8,617 чтения

Драматург против Кипариса для автоматизированных тестов REST API: кто победит?

к Dmitrii Bormotov3m2023/09/05
Read on Terminal Reader
Read this story w/o Javascript

Слишком долго; Читать

Cypress — это среда автоматизации тестирования, имеющая двойное назначение: тестирование пользовательского интерфейса и API. У Playwright совершенно такое же предназначение, но он не поставляется ни с какими браузерами из коробки — их приходится устанавливать отдельной командой (если хотите). Что касается легкого и быстрого инструмента, то это наверняка будет Playwright, поскольку он требует меньше времени для установки и не потребляет дополнительных ресурсов для запуска браузеров, поскольку в этом нет необходимости с точки зрения тестирования API.
featured image - Драматург против Кипариса для автоматизированных тестов REST API: кто победит?
Dmitrii Bormotov HackerNoon profile picture

Всем привет!


Я всегда скептически смотрел на фреймворки автоматизации тестирования с двойной целью — покрытие тестированием UI и API. Обычно вы запускаете разные уровни тестов в разных тестовых запусках (или проектах событий), поскольку каждый из них, вероятно, имеет свои собственные зависимости , конфигурация, и переменные среды .


Недавно я взглянул на то, что Playwright может предложить с точки зрения тестирования API , и сравнил это со своим опытом работы с Cypress , так что вот чем я хочу поделиться со всеми вами…

Кипарис

Cypress некоторое время назад сделал возможным тестирование API . На учебном портале вы можете найти статью о том, насколько хорош этот инструмент с точки зрения тестирования API , с примерами.

Производительность установки

Чтобы запускать тесты, вам необходимо установить зависимости проекта, верно? Что ж, Cypress поставляется с электронным браузером , и его установка может быть весьма избыточной (и трудоемкой), если вы хотите запускать исключительно тесты API (скажем, у вас есть отдельные задания в CI для запуска тестов пользовательского интерфейса и API, как это обычно бывает).


Время чистой установки Cypress


Выглядит не очень хорошо, да? ☝️


Кроме того, когда вы запускаете тесты API - он все равно запускает браузер.


Cypress запускает сеанс браузера в соответствии со спецификациями API


Запись спецификации тестов API в браузере

Тестовый пример

Простой тест API с Cypress будет выглядеть так:


 it('Sign in with valid credentials', () => { cy.request('POST', '/auth', { login: Cypress.env('username'), password: Cypress.env('password'), }).should(response => { expect(response.body.token).to.be.a('string') expect(response.status).to.eq(200) }) })


Выглядит довольно просто и понятно, да? Здесь важно сказать, что это общий синтаксис Cypress , то есть связывание элементов в цепочку вместо записи каждого вывода в переменную (хотя это возможно с некоторыми изменениями ).

Драматург

Как и Cypress , Playwright представляет собой среду автоматизации тестирования — вы можете использовать только инструмент автоматизации браузера или всю платформу (средство запуска тестов, библиотеку утверждений, инструмент автоматизации браузера, HTTP-клиент, репортер и т. д.).

Производительность установки

Разница здесь в том, что Playwright не поставляется с браузерами из коробки — их нужно установить отдельной командой (если вы этого хотите).


Время чистой установки драматурга


Здесь это имеет огромное значение, поскольку с точки зрения запуска исключительно тестов API он не будет запускать какой-либо браузер или любое другое настольное приложение и сэкономит некоторое время выполнения и ресурсы на вашем компьютере.

Тестовый пример

Простой тест API с Playwright будет выглядеть так:


 import {test, expect} from '@playwright/test' test('Sign in with valid credentials', async ({request}) => { const response = await request.post('/auth', { data: { login: process.env.USERNAME, password: process.env.PASSWORD, }, }) expect(response.status()).toEqual(200) expect(await response.json()).toEqual({ token: expect.any(String), }) })


Я хотел бы выделить Jest-подобный синтаксис утверждения объектов:


 expect(await response.json()).toEqual({ token: expect.any(String), })


Этот синтаксис позволяет вам проверить всю структуру объекта с помощью всего лишь одного expect вызова ☝️

Заключение

Тесты API должны быть небольшими и легкими, поскольку для их запуска не требуется слишком много усилий.


Подведем итоги вышеизложенному…

Производительность установки

Драматург выигрывает благодаря более быстрой чистой установке из коробки в 13 раз .


ℹ️ Вы можете сократить время установки Cypress в CI , если используете образ с предустановленными зависимостями или кешируете их в своем CI- хранилище .

Производительность запуска

Playwright выигрывает, поскольку ему не требуется браузер для запуска тестов API, поэтому он сразу переходит к делу.


ℹ️ Невозможно «не запускать» браузер в тестах API, так как это часть логики фреймворка.

Тестовый синтаксис

Здесь невозможно определить победителя, так как объективного преимущества ни у Сайпресса , ни у Драматурга нет.


У них обоих довольно простой синтаксис с небольшими различиями. Я бы сказал, что это решение тестировщика — выбрать то, что ему здесь нравится.

Общий

Я могу с уверенностью сказать, что использовать Playwright для автоматизации тестирования API достаточно безопасно из-за его производительности. Было бы разумным решением, если бы у вас уже были тесты пользовательского интерфейса с этой платформой.


Мой совет тем, кто использует Cypress для UI- тестов и хочет охватить слой API — лучше используйте что-нибудь другое ( Jest + Axios , пример можно посмотреть там ).