Поучительный рассказ Slack о том, как они Cypress используют
Прочитал замечательную историю о том, как развивался набор e2e-тестов для Slack. Они начали с небольшого набора тестов, созданных при помощи инструмента Cypress на внутреннем хакатоне, но по мере роста количества и сложности тестов начали возникать проблемы стабильности (flaky-тесты) и поддерживаемости (сложный анализ сбоев).
Что они сделали? Обмазали Cypress дополнительным слоем абстракции, который сделал тесты более понятными, а также позволил реализовать (невидимые для тестов) дополнительные проверки или ожидания, повышающие стабильность.
Правила, которые они выработали при создании этого слоя абстракции, достаточно хороши, чтобы использовать их в других проектах, независимо от того, что именно вы прячете под слоем абстракции — Cypress или Puppeteer или WebDriver:
* Selecting Elements: Instead of relying on product-driven class names or element ids, we add a custom “data-qa” attribute to elements that we need to select for testing purposes. This allows us to provide context for our selectors so they aren’t impacted by JS/CSS changes.
* Only create new components when needed. We shouldn’t try to define every UI Action possible, but define those that are being used by our test.
* Methods within a component should only modify the piece of UI that they’re written for. The component for the channel sidebar shouldn’t interact with the message input, for instance.
* Try to only break items into components where it makes sense rather than creating a lot of smaller components.
* The UI Abstraction is stateless. The test should maintain the state and validate against it.
https://slack.engineering/scaling-end-to-end-user-interface-tests/