vas3k.club icon indicating copy to clipboard operation
vas3k.club copied to clipboard

Фича: E2E тесты

Open framebassman opened this issue 3 years ago • 18 comments

Хочу покрыть базовые сценарии E2E тестами, которые будут открывать браузер и что то в нем тыкать Это ишью завел чтобы обсудить, какими технологиями это начать делать и заасайнить его на себя Дискач:

framebassman avatar Jan 04 '21 21:01 framebassman

Короче, предлагаю заюзать что-нибудь в стиле feature-файлов в gherkin нотации (cucumber / specflow) Ну и инструмент, которым по браузеру тыкать тоже надо выбрать

Вот, как мне кажется, самые ок варианты:

Язык Gherkin имплементация Чем тыкать в браузере
python behave selenium
js cucumberjs webdriverio
java cucumber selenide

Давайте выберем из этого? Можете предложить своё)

Ну, и еще - чтобы оно всё не тормозило и соответствовало пирамиде тестирования - E2E тестами надо покрыть только самые базовые сценарии - их должно быть мало)

framebassman avatar Jan 07 '21 20:01 framebassman

Добавлю cypress (https://www.cypress.io). Сам не использовал, но пишут (вот тут например хорошо объяснено https://blog.logrocket.com/cypress-io-the-selenium-killer/), что гораздо удобнее Selenium'а. Язык там JavaScript.

Я бы с удовольствием присоединился к покрытию тестами, ну или хотя бы посмотрел на результат - очень хочется посмотреть как он в деле и сравнить с Python + Selenium.

DiPaolo avatar Jan 12 '21 08:01 DiPaolo

В статье написано, что самое главное в чем cypress выигрывает у selenium - это время выполнения тестов. Это ошибочное утверждение, потому что проблемы возникают:

  • в синхронизации приложения и тестов - обычно когда пишут тесты, то проблемы решают внутри тестов, хотя нужно копать с двух сторон
  • в несоблюдении пирамиды - покрывают разные случаи e2e тестами, когда надо написать юниты / api

Кроме этого все равно будем подготавливать данные в датабазе / запускать эмуляторы

На этом этапе становится понятно, что какой бы инструмент не выбрали - все равно проблемы будут не в инструментах а в подходе

Энивей, тут нужен автор или другой человек, который принимает решение)

framebassman avatar Jan 19 '21 07:01 framebassman

@FrameBassman поправлю: в статье речь идет не о времени выполнения, а о тайминге (т.е. синхронизации), как об основном преимуществе cypress:

The problems with selenium can be expressed in one word, timing.

То есть большая проблема в селениуеме - это флакирующие тесты. Когда у тебя тест пытается взять значение элемента, который еще не отписывался/не подгрузился/не обновился. И от этого рандомно падает или не падает.

И вторая проблема, которая призвана решить первую - это необходимость писать бойлерплейты для синхронизации этих самых элементов: всякие wait.until(conditions.<...>) или sleep(...).

DiPaolo avatar Jan 19 '21 07:01 DiPaolo

Предлагаю в качестве "чем тыкать в браузере" заюзать https://github.com/microsoft/playwright. Насколько я понимаю это топовая штука сейчас.

Еще как альтернатива (один фиг у нас монополия в браузерах) — просто взять папеттер. Эту штуку пишут разрабы девтулзов хрома и она отлично работает.

dima-takoy-zz avatar Feb 03 '21 01:02 dima-takoy-zz

@vas3k как ты видишь это?)

framebassman avatar Feb 14 '21 09:02 framebassman

@FrameBassman честно говоря, пока никак :) Пока нет фронтенд-боярина, который будет владеть и повелевать этими тестами, для меня это будет скорее обузой и я их просто выпилю через полгода красного мастера.

Но на позапрошлой работе у нас был cypress.io и было прикольно

vas3k avatar Feb 14 '21 10:02 vas3k

@vas3k не, падажжи - не фронтенд-боярин должен e2e тестами владеть - они же всё приложение будут тестить Так что ими должны владеть все разработчики (но на самом деле я бы хотел ими владеть)

По поводу красного мастера - да, вы правы - их действительно сложно сделать красиво и чтоб они не мигали Но у меня есть идея как это сделать - и чтобы это реально приносило business-value - защищало мастер от автодеплоя приложухи, которая даже не взлетает - а это реально, если иногда хочешь сделать ПР с телефона, чтобы фиксануть опечаточку или попробовать какую нить гениальную идею - и самое главное - чтобы они не запускались минуты/часы/бесконечность времени

Короче, хочу сделать базовую имплементацию и попробовать помейнтейнить её например полгодика)

Вы в любое время сможете её выкинуть, если она будет не устраивать dev-тиму)

framebassman avatar Feb 14 '21 21:02 framebassman

@vas3k ну так че, можно мы обсудим какими технологиями нам норм и сделаем ПР, в котором будет какая то базовая имплементация, которая всех устраивает (по времени и устойчивости?)

framebassman avatar Feb 16 '21 14:02 framebassman

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

vas3k avatar Feb 16 '21 14:02 vas3k

Нене, попрактиковаться я и в собственной репе могу)

Давай проясним про "поддерживать" - что ты под этим понимаешь? К сожалению, каждый раз когда меняется функциональность - надо менять и тесты. На сколько я понимаю сейчас так и происходит: чувак, который поменял логику на бэке - меняет тесты на бэке; тот кто поменял логику на фронте - фиксит тесты на фронте (фронтовых тестов вроде нет, на скока я понимаю))

framebassman avatar Feb 16 '21 14:02 framebassman

Короче, предлагаю тогда ишью закрыть @vas3k можешь еще раз четко сформулировать - не будем делать, потому что непонятно кто будет поддерживать, так? Я правильно понимаю, что ответ "я буду поддерживать" тебя не устраивает?

framebassman avatar Feb 25 '21 20:02 framebassman

Еще я подумал, что многие могут путать UI и e2e тесты

Я же предлагаю запилить именно e2e тесты

UI тесты - это когда мокаем бэк и проверяем только фронт (в контексте этого ишью)

framebassman avatar Mar 01 '21 16:03 framebassman

Думаю, такое можно было бы иметь в самых критических местах. Буквально одном-двух типа отправки комментов и оплаты. Да и то не понимаю как протестить оплату. То есть остается совсем узкий набор важных кейсов.

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

Сейчас наша цель развиваться, а не охранять написанное. Move fast, break things, вот это вот всё. E2E тесты надо писать когда ты интерпрайз на 5000 человек. Нам я не понимаю зачем они пока.

vas3k avatar Mar 05 '21 20:03 vas3k

Я абсолютно согласен - давайте напишем пару тестов, которые протестят оплату?

framebassman avatar Mar 06 '21 08:03 framebassman

Тогда это намного проще будет сделать на уже имеющихся тестах в джанги, там даже есть что-то подобное :)

Хотя я все равно не представляю как написать такие тесты, чтобы быть 100% защищенным от опечатки в productID ошибки или обновления версии Stripe SDK.

vas3k avatar Mar 06 '21 10:03 vas3k

Не закрывайте ишью пока, я еще исследую))

framebassman avatar Apr 26 '21 14:04 framebassman

Ну я до сих пор исследую)

framebassman avatar Mar 16 '22 14:03 framebassman