Переход с Cypress на Playwright

«Нам было достаточно небольшого объема функциональности Cypress, но мы решили обратить внимание на Playwright, по нескольким причинам. Мы хотели изучить фреймворк Microsoft, и понять причину популярности. Кроме того, как и в случае с добавлением MongoDB в наше приложение (extensive-react-boilerplate), мы получали запросы от комьюнити и коллег, которые хотели совместимости своих проектов с тестами Playwright. Начав миграцию тестов, мы поняли, что их объем незначителен. Поэтому решили переписать все тесты вручную, чтобы лучше изучить фреймворк.

Сравниваем документацию

Начнем с документации. Можно с уверенностью сказать, что документация Cypress лучше чем Playwright. В Cypress очень подробная документация, множество примеров и туториалов. Кроме того, на GitHub выложен проект с примерами теста каждого действия пользователя на стандартном сайте. Далее, комьюнити Cypress более многочисленно по сравнению с Playwright. Опытным тестировщикам, наверное, будет достаточно документации Playwright, менее опытным все-таки лучше Cypress.

Сравниваем код

Переходим к настройке конфигурационного файла. Мы не находим здесь существенных различий между двумя фреймворками. Нужно только перенастроить таймауты и базовый URL. Также посмотрели новые возможности Playwright:

  • Установка таймаутов для каждого теста, включая хуки Before/After:
// playwright.config.ts
export default defineConfig({
...
  timeout: 2 * 60 * 1000,
...
});
  • Playwright поддерживает WebKit / Apple Safari, а Cypress нет

Playwright перед запуском тестов может запускать локальный development-сервер с проектом, что легко реализуется параметром webServer:

  webServer: {
    command: process.env.CI
      ? "npm run build:e2e && npm run start"
      : "npm run dev",
    url: "http://127.0.0.1:3000",
    reuseExistingServer: !process.env.CI,
  },

Разница в синтаксисе заметна. Cypress использует «цепной» синтаксис и имеет собственную реализацию асинхронности; Playwright поддерживает стандарт ECMAScript 2015 (ES6) и работает с асинхронными функциями через удобную конструкцию async/await.

Пример кода в Playwright:

  test("should be successful open page and check data is displayed", async ({
    page,
  }) => {
    await page.getByTestId("profile-menu-item").click();
    await page.getByTestId("user-profile").click();
    await page.waitForURL(/\/profile/);
    await expect(page.getByTestId("user-name")).toHaveText(
      `${firstName} ${lastName}`
    );
    await expect(page.getByTestId("user-email")).toHaveText(email, {
      ignoreCase: true,
    });
    await page.getByTestId("edit-profile").click();
    await page.waitForURL(/\/profile\/edit/);
    await expect(page.getByTestId("first-name").locator("input")).toHaveValue(
      firstName
    );
    await expect(page.getByTestId("last-name").locator("input")).toHaveValue(
      lastName
    )

И в Cypress:

  it("should be successful open page and check data is displayed", () => {
    cy.getBySel("PersonIcon").click();
    cy.getBySel("user-profile").click();
    cy.location("pathname").should("include", "/profile");
    cy.getBySel("user-name").should("contain.text", firstName + " " + lastName);
    cy.getBySel("user-email").should("contain.text", email);
    cy.getBySel("edit-profile").click();
    cy.location("pathname").should("include", "/profile/edit");
    cy.get('[data-testid="first-name"] input').should("contain.value", firstName);
    cy.get('[data-testid="last-name"] input').should("contain.value", lastName);
  });

Скорость

Когда дело доходит до выполнения тестов, сказываются архитектурные различия между фреймворками.

  • Cypress выполняет команды внутри браузера, что дает ему быстрый доступ к таким важным компонентам, как DOM, локальное хранилище и оконные объекты. Playwright построен на клиент-серверной архитектуре и взаимодействует с браузерами через WebSocket-соединение.
  • Переписав все тесты, мы запустили их и заметили, что по умолчанию Playwright выполняет тесты параллельно, причем предоставляя эту возможность бесплатно. В отличие от него, Cypress выполняет распараллеливание только для разных машин, и это платная функция.
  • Выполнение одинаковых тестов в обоих фреймворках показало, что Playwright выполняет тесты чуть быстрее, чем Cypress.

Мы выполнили тесты и обнаружили, что Playwright выполнил их за 2,7 минуты:

В то время как Cypress выполнял 3,82 минуты, показав некоторую разницу во времени в пользу Playwright.

Выводы

Учитывая вышесказанное, можно задаться вопросом, почему мы все-таки решили сменить фреймворк, если разница не сказать что существенная. Хотя на тот момент мы не видели особых преимуществ Playwright, мы принимали во внимание масштабирование текущего проекта, да и других потенциальных проектов, которые будут построены в нашей экосистеме bcboilerplates для React. С этой точки зрения Playwright показался более перспективным, благодаря распараллеливанию тестов, скорости выполнения, возможности тестирования мобильных приложений, возможности использовать другие языки программирования кроме JS и TS, и поддержке Microsoft.»

DZone


Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас

MARShttps://www.cellerini.it/girişcasibom girişcasibomcasibom girişbahsegelmarsbahis