Первая в новом году подборка посвящена JavaScript 🧑💻
И это не просто подборка, а структурированный комментарий от нашего QA-инженера Вани Обухова.
❓ Какие фреймворки ты советуешь применять для тестирования фронтовых приложений?
📞 Вообще фреймворк тяжелое понятие в it, им же называют что угодно. Если мы говорим о фреймворке, как о готовом решении для тестирования web с помощью браузера, прежде всего подходят на ум Selenium(Webdriver.io), Playwright и Cypress.
Фреймворк - комбинированное решение. Выбирая решение для себя, нужно разобраться из чего оно состоит. Для фреймворков, условно, можно выделить 6 компонент:
1) Язык программирования — удобнее использовать язык стека разработки. Для web чаще всего это JS.
2) Тест-раннер — именно тест-раннер превращает код в тесты, определяет, как именно они будут запущены, обеспечивает параллель и изоляцию запуска автотестов, позволяет выполнять действия для подготовки и очистке окружения. Существуют готовые тест-раннеры, такие как mocha, jest и jasmin. Некоторые фреймворки, такие как webdriver.io позволяет подключать любой из них. В Playwright-Test используется свой собственный тест-раннер.
3) Механизм управления браузером — компонент, позволяющий оценить трудозатраты и особенности при разворачивании системы тестирования в среде непрерывной интеграции (ci/cd). Можно выделить 3 механизма:
- Selenium(Webdriver.io) — удаленно/http.
- Playwright — удаленно/websocket.
- Cypress — загружает свой код прям в браузер и исполняет его изнутри.
4) Генератор отчета — бывает встроенный в фреймворк, бывает внешний. В СНГ наверное повсеместно, стандарт — Allure. Цель тестирования для фреймворка — именно получить отчет о выполнении автотестов.
5) Библиотека сравнений — чаще chai, expect или встроенные проверки из node.js.
6) Наличие инструментов изолирования — возможность мокирования, генерации тестовых данных на лету, возможность изолированного запуска теста в своем отдельном процессе.
❓ Расскажи вкратце про каждый фреймворк в отдельности.
📞 Mocha и Jasmine скорее воспринимаются как тест-раннеры, к которым уже можно подключать библиотеки или на базе них строить фреймворки. Но они неплохо подходят для юнит-тестирования.
Jest — тоже тест-раннер, но у него гораздо больше всего для тестирования есть из коробки. Его очень часто используют у нас.
Puppeteer — библиотека для управления браузером (удаленно/websocket), изначально вообще не для тестирования была, но со временем набрала популярность.
Cypress — фреймворк для веб тестирования. Легкий вход в инструмент. Есть функционал мокирования. Можно изолировать фронт и проводить интеграционное тестирование. Особенностью решения является среда исполнения: код исполняется прямо в браузере, что позволяет сделать множество операции по работе с DOM синхронными. Но инструмент опасен, есть ограничения и на нашем опыте при росте числа автотестов решение становится непроизводительным. Я бы его не рекомендовал сейчас 🧐
Playwright — отличное решение, точнее даже фреймворк playwright-test — это переосмысленный Puppeteer для автотестирования, где все есть из коробки. Те же авторы, вендор microsoft. Можно сказать самое популярное решение на рынке на сегодня. Очень быстро развивается. Мой однозначный фаворит на сегодня ⭐️
Webdriver.io — он уже уступает Playwright, но при этом еще популярен. Это так называемое Selenium base решение в мире JS. К сожалению, сам Selenium устарел морально, почти не развивается, все запросы к браузеру на http, что не так эффективно по сравнению с websocket-ами. Можно, конечно, подключить Puppeteer, но уже незачем, когда есть Playwright 🎭
#подборка