В этом посте я хочу поделиться обзором 15 докладов с конференции Heisenbug, рассказать, что интересного было на стендах у компаний, а также поделиться видеоматериалом из доклада Артема Ерошенко о создании actions плагинов для IntelliJ IDEA, которые помогут быстро изменять код тестового проекта.
Информация о HeisenBug
Heisenbug – техническая конференция для специалистов в области тестирования. В основном, она интересна тестировщикам, software development engineers in test, специалистам по автоматизированному и нагрузочному тестированию. Организаторами выступает команда JUG.RU, за плечами которой такие конференции, как Joker, HolyJS, SmartData, DevOops, DotNext, Mobius.
Место проведения
Пятая по счету конференция проходила в отеле «Славянская Рэдиссон», метро Киевская, г. Москва. При подходе к гостинице был виден электронный баннер с логотипом конференции. Далее при входе в лобби гостиницы, участника сопровождали указатели до стоек регистрации и гардероба. Заблудиться невозможно. Регистрация участников и спикеров проходила на первом этаже, в основном фойе конференции располагались стенды партнеров, конференц-залы, залы с кофе-брейком и обедами. Уровень охранников порадовал, так что «безбилетным зайцам» было не попасть. Всего на мероприятии присутствовало порядка 500+ участников, большинство из которых зарегистрировалось за две недели до начала.
Программа
Программу можно найти здесь. Хочу отметить, что JUG.RU всегда стремится сделать программу практической, без лишней воды и с известными зарубежными специалистами. Доклады делятся на условные обозначения:
Если вы впервые планируете стать докладчиком на Гейзенбаге, посмотрите памятку спикера, – в ней довольно ёмко собрана вся полезная информация.
Коммуникация и волонтерство
Чтобы участники не пропустили что-то важное на конференции, были организованы телеграм-канал и телеграм-чат. Кстати в последнем искали волонтеров на просмотр видеозаписей, за что давали бесплатный билет на конференцию.
Если вы решитесь стать волонтером, обозначьте свое решение организаторам как можно раньше. Подготовка к мероприятию осуществляется задолго до начала конференции. При условии свободных мест вас запишут в команду.
Стенды компаний
В этот раз на конференции было представлено более десятка стендов крупных IT-компаний, таких как Deutsche Bank, Альфа-Банк, Райффайзен, Badoo, Luxoft, СКБ Контур, Gett и др. Каждая из компаний по-своему подошла к организации интерактивов с участниками мероприятия, поэтому в перерывах между выступлениями скучать не приходилось. Можно было порешать задачи за небольшой памятный сувенир, поиграть в видео- и настольные игры, поучаствовать в лотерее.
Райффайзен предлагал пройти онлайн квест с разгадкой всяческих пазлов, также ценители нестареющей классики могли поиграть в Mortal Kombat 3 на Sega. Коллеги из Альфа-Банка сделали телеграм-бота с задачами, плюс в лотерее разыгрывал большой набор Lego Mindstorms. Хочу похвалить стенд Deutsche Bank, где разработчики в живом общении выдавали задачи и принимали участие в обсуждении, в отличие от всех остальных стендов, где лишь проверяли правильность ответов.
Многие компании ненавязчиво занимаются хантингом специалистов, раздавая буклеты с описанием вакансий (не все же заниматься благотворительностью).
Обзор докладов
1. У нас DevOps. Давайте уволим всех тестировщиков — Барух Садогурский.
Открывал конференцию Барух Садогурский, developer advocate из компании JFrog, известный спикер на конференциях, связанных с Java и Devops. В докладе Барух затронул проблемы качества ПО в условиях частых релизов, которые вызваны постоянно растущими запросами бизнеса, сложности тестирования кода вследствие плохой архитектуры, модернизации роли тестировщика в современных Agile командах. Доклад было интересно слушать от начала до конца, много юмора, интересных фактов и сравнений.
Ну а главные мысли доклада можно уложить в один слайд, который иллюстрирует, что автоматизация тестирования и практики DevOps уменьшают временные издержки на рутинные процессы и позволяют уделять больше времени реализации новых задач.
2. Нужно сделать рефакторинг проекта? Есть же IDEA! — Артем Ерошенко.
Артем в своем докладе рассказывал о создании actions плагинов для IntelliJ IDEA, которые помогут вам в быстром изменении кода тестового проекта.
Дал объяснение основным классам (AnAction, PsiClass, PsiAnnotation, AnActionEvent, JavaCodeStyleManager), которые являются входной точкой Plugin Actions.
Рассмотрел, как решить следующие задачи:
а) Что на проекте у нас автоматизировано, а что нет. Автоматическая синхронизация с Jira.
По тексту аннотации @DisplayName сходил в Jira, получил нужные тикеты и проставил все необходимые связи, используя @TmsLink.
б) Автоматическое проставление @Tags из контекста Jira.
Есть определенные лэйблы в тикете favorite, regress. Переходим в тест, есть аннотации @TmsLink, применяем плагин и у нас появляются новые аннотации @Tags, и далее средствами Junit мы можем запускать тесты по этим тэгам.
в) Что в тестах проверяется?
Есть автотест, есть steps, делаем экспорт и у нас появляются шаги в тестах. Также в видео есть пример для двух тестов.
Еще Артем демонстрировал, как быстро перейти с Allure 1 на Allure 2.
Очень практичный доклад для тех, кто задумывается об оптимизации процесса написания кода. Исходный код плагинов можно найти здесь.
3. Проект на Java и Reactor? — А как же тесты? — Кирилл Меркушев.
Кирилл поделился опытом разработки международного медицинского стартапа Vivy. Рассказал, как были решены проблемы масштабируемости монолитной системы при помощи микросервисов и библиотеки Reactor. Большое внимание было уделено этой библиотеке, ее базовым принципам, подходам к тестированию реактивных систем, киллер-фичам (таким как чекпоинты и логи в цепочке запроса, Hooks и повторные запросы (retry).
Лично я не имел дело с тестированием реактивных систем, поэтому для меня это было ново и интересно.
4. Как мы написали фреймворк Sealant для поиска утечек памяти в JS — Сергей Докучаев.
В данном докладе речь идет об утечках памяти (объектах, доступных из кода, но более не нужных) на одностраничных web-приложениях. Сергей ставил задачу автоматически найти все критичные утечки памяти в выпускаемой версии продукта. Говорил о сложностях нахождения подобных ошибок и как можно делать это вручную, используя инструменты Google Chrome. Далее рассматривал инструмент SeaLant, автором которого он является. SeaLant позволяет автоматизировать нахождение утечек, взаимодействуя с процессом Chrome по протоколу Chrome DevTools. Заканчивал доклад тем, что если на странице можно выполнять циклические сценарии (с одного устройства, с одной сессией, без перезагрузки страницы), то вероятнее всего, протестировав их, можно избавиться от большей части утечек памяти.
5. Особенности визуального тестирования интерфейсов — Антон Усманский, ведущий разработчик инструментов Gemini (инструмент визуального тестирования) и Hermione (инструмент следующего поколения, более общего назначения, который умеет выполнять ассерты скриншотами).
Доклад полезен тем, кто задумывается о внедрении инструментов визуального тестирования в свои проекты. Тем, кто уже использует Gemini и Hermione, тоже может быть интересно — дает понимание, как внутри устроены инструменты. Местами автор касается достаточно базовых вещей.
6. Заморочки в Selenium WebDriver — Алексей Баранцев.
Алексей рассказывал о проблемах проекта Selenium и о причинах их возникновения. Поделился деталями сборки монорепозитория с помощью сборщика Bazel. Затронул тему видимости элементов (в стандарте W3C WebDriver нет операции, которая проверяет, виден элемент или нет) и пояснил, чем отличаются функции getProperty, getDomAttriubute, getAttribute.
Знание заморочек позволит пользователям отличить фичи от багов и разрабатывать эффективные «костыли» в своих тестовых проектах.
7. Рецепты создания с нуля и развития системы нагрузочного тестирования — Анатолий Пласковский.
Анатолий представляет группу исследования производительности Яндекс.Деньги. В своем докладе он поделился практиками, как определить потребность в исследованиях быстродействия, где найти людей для проведения данных мероприятий и как выстроить процесс исследований. Автор заостряет внимание на том, что исследование производительности != нагрузочному тестированию, и что только тестирование на продакшне может показать релевантный результат. При этом проводить эксперименты можно без проблем для клиентов путем выбора тестовых маршрутов и данных, контроля и прогноза возможных исходов сценария.
Анатолий создал телеграм-чат loadland, в котором обсуждается нагрузочное тестирование, и куда можно стучаться за помощью и советами.
8. Epic Fails производителей девайсов — Валентин Wylsacom Петухов.
Закрывал первый день доклад небезызвестного Wylsacom, который был неоднозначно воспринят публикой (судя по чату участников гейзенбага в телеграме :) ).
Для себя я ничего интересного не вынес из доклада про бета-тестирование устройств и приложений, но возможно фанатам понравилось. На дискуссионной зоне выстроилась очередь за фото, так что пиар удался.
9. Элегантное интеграционное тестирование зоопарка микросервисов с помощью TestContainers и JUnit 5 на примере глобальной SMS-платформы — Андрей Маркелов.
Автор рассказывал, как у себя в компании тестируют микросервисы при помощи связки TestСontainers + Junit 5 + MockServer. Доклад звучал интересно, но такая схема не для большого количества микросервисов. Ссылка на исходный код.
10. Вуайеризм тестировщика, или Как наблюдение за пользователями поможет вам — Антонина Хисаметдинова.
Очень интересный доклад, хоть и связанный больше с web-дизайном, чем с тестированием. В нем рассказывается о практиках UX и подводных камнях, которых нужно избегать при проектировании клиентского интерфейса.
Антонина выделила основные ошибки при наблюдениях за пользователями в таких UI-решениях, как отключение кнопок, использование лоадеров, подсказок, привычных компонентов и др.
Также стоит отметить графическое оформление доклада с интуитивно понятными примерами из реальных проектов (как и подобает докладам про UX).
11. Тестирование систем с внешними зависимостями: проблемы, решения, Mountebank — Андрей Глазков.
Автор рассказывал про эволюцию этапов мокирования на своих проектах. Рассматривал плюсы и минусы мокирования на уровне кода. Делился опытом, в каких случаях хорошо создать фейковую реализацию сервиса. Но если вы хотите, чтобы фейковые сервисы перестраивались на лету, проксировались и при этом ввелись логи пришедших запросов, то Андрей рекомендует присмотреться к инструменту Mountebank.
Основные плюсы:
- mounteBank — работает на уровне TCP;
- JavaScript injection;
- надежность и скорость из коробки;
- отличная документация;
- поддержка докер-контейнеризации.
Выявленные ограничения инструмента:
- внешние системы с сохранением данных;
- WebSocket — не поддерживается;
- нагрузочные тесты (> 150 rps), но можно использовать балансировщик.
12. Зачем профилировать end-to-end тесты мобильных приложений — Вячеслав Фролов.
В своем докладе Вячеслав рассказал о состоянии автотестов в компании Badoo, а именно, как они решали задачу распараллеливания 1500 мобильных UI-тестов, которые занимают 30 машино-часов на прогон на одном симуляторе. В итоге им удалось достичь результата в 30 минут, что позволило запускать 80 тысяч тестов в день. Помимо линейного увеличения мощности, применили оптимизацию по очистке кэша приложений вместо рестарта симулятора. Также в докладе были упомянуты профилировщики, и как с их помощью обнаружили особые случаи узких мест в тестах: например, метод long_press() в ios 11.0 выполнялся 5 секунд, а после оптимизации стал выполняться за секунду, или как с помощью http-хедера «keep-alive» можно избежать повторной установки соединения, тем самым значительно ускорить все тесты разом. Также автор рассказал, как отобразить результаты профилировщика с использованием инструментов FlameGraph и FlameChart.
13. Юнит-тесты: от теории к практике — Вадим Пуштаев.
Автор делится опытом разработки UnitTests. Доклад состоял из трех частей.
- Что мы хотим от UT → Регрессия (Поменял код, проверил), Влияние на архитектуру (Когда разработчики, пишут тесты, код становится лучше), Понимание (разбираться с legacy кодом);
- Принципы → Вадим вспоминает, что с теорией не так хорошо, как с практикой. Отверг принцип «тестируй интерфейс, а не реализацию», так как в реализации может быть много логики. Плюсанул принцип «unit tests это не механизм тестирования». Считает это некий архитектурный прием, мощный и очень полезный, но это не механизм проверки и верности кода.
- Реализация → Рассказ о технических приемах, которые автор использует в работе (на каждый класс один тестовый класс, создание своих матчеров, применение внешних зависимостей, если это требуется и т.д).
14. Тестируем и плачем вместе со Spring Boot Test — Кирилл Толкачёв
Кирилл решил вернуть нас в мир IoC, DI и Spring и рассказать, как при помощи JUnit 5 и SpringBoot написать unit и компонентные тесты.
Большим плюсом этого доклада является то, что спикер писал большую часть тестов в real-time, т.е. наглядно показал поэтапный процесс оборачивания тестов Spring-овыми аннотациями. Правда, из-за большого количества кода, было сложно уложить в голове все показанные приемы. Кирилл рассмотрел фичи Spring по работе с профилями, Mock&Spy Beans, а также настройки конфигураций контекста. Как по мне, Spring — это довольно тяжелый фреймворк для подобных задач и только опытным юзерам удастся не наступить на грабли при разработке unit тестов.
15. Прокачиваем мобильные автотесты — Екатерина Батеева.
В докладе автор рассматривал инструмент XCTest для автоматизации IOS-приложений. Тиражировать этот инструмент на другие проекты оказалась неудобно.
А именно были выявлены следующие минусы:
- тяжело читать настройки запуска;
- сложно конфигурировать сборки;
- сложно интегрироваться с различными сервисами;
- неудобно управлять скриншотами;
- неудобно настраивать перезапуски тестов.
Далее Екатерина рассказывала про open-source фреймворк Fastlane, который решил их проблемы.
Итоги
В целом, конференция мне понравилась. Получил заряд эмоций и ответы на интересующие вопросы. На BoF-сессии большинство участников сняли свои «маски» и вели жаркие дискуссии в рамках BoF-тем. Кофе-брейки и обеды были идеальны, всегда было что перекусить. Также хочу отметить организацию мероприятия — команда JUG.RU с каждым разом делает Heisenbug все лучше и лучше. Напоследок — ходите на конференции, делитесь полученными знаниями и улучшайте свои навыки!
P.S: Выражаю благодарность Алексею Румянцеву за участие в подготовке статьи и Артему Ерошенко за видеоматериал.
Автор: dopefish_hunters