Всем привет! Я Оля, тестировщик мобильных приложений в hh.ru, и мы продолжаем серию ответов на самые популярные вопросы про автоматизацию тестирования. Ранее мы уже ответили на вопросы ручного тестировщика и менеджера. Пришло время ответить на пять самых страшных вопросов от технического директора — как не проиграть при выборе фреймворка для автоматизации, про сложность найма и трудозатраты на поддержку автотестов.
Видеоверсию моих ответов можно посмотреть и послушать тут.
Вопрос 1. Как выбрать фреймворк для автотестов?
Начнем с истории о том, как мы выбирали фреймворк для автотестов android.
Однажды одна команда разработчиков и тестировщиков hh.ru решила, что было бы неплохо автоматизировать регресс. И начался большой подробный ресерч.
Мы изучали, что уже есть на рынке:
с какими проблемами сталкиваются пользователи этих фреймворков
как быстро и качественно эти проблемы решаются
как часто приходится вбивать костыли, чтобы автотесты работали стабильно
актуальность в сообществе
В итоге получили таблицу с плюсами и минусами каждого фреймворка, из которых мы начали выбирать.
Мы определили, что для нас наиболее важно — например, чтобы писать автотесты было легко, чтобы они были читаемы и понятны как тестировщикам, так и разработчикам. Таким образом мы отсеяли все неподдерживаемые, сложные, кроссплатформенные, нестабильные фреймворки и остановились на Kakao.
Kakao — это обертка над всем известным Espresso. Писать автотесты на нём уже было гораздо проще и удобнее. Как минимум, определение элемента не занимало у нас 3-5 строк кода, как на Espresso. На Kakao мы автоматизировали примерно полгода, и за это время у нас появилось четкое представление, чего нам не хватает в выбранном фреймворке. Так появился Kaspresso, в котором все наши хотелки были реализованы.
Kaspresso — еще более удобный фреймворк. Он помогает не только писать автотесты легко, но и делать их стабильными и читаемыми. Под капотом у Kaspresso много полезного функционала, благодаря которому даже самые сложные проверки мобильных приложений пишутся достаточно легко.
Помимо всего написанного о преимуществах и прелестях Kaspresso, мы добавили в него степы (steps) — человекочитаемое описание того, что делаем в тесте или в методе. Из этих степов формируется пошаговый отчет — видно, какие шаги тест прошел и на каком шаге упал. Также мы сделали dsl для создания тестовых данных. Подробнее об этом можно почитать в этой статье.
С iOS история гораздо короче и проще. Тут всё из коробки — XCUITest, с которым все отлично и стабильно работает. Фреймворк актуальный, поддерживаемый, стабильный, удобный. Другие возможные варианты нам пробовать не приходилось, так как XCUITest соответствует всем нашим требованиям.
Вопрос 2. Как вам живется с автоматизированными регрессами?
За два года, что мы живем с автоматизированным регрессом, у нас надежно устаканился недельный релиз-трейн. Релизы регулярно отправляются в прод без проведения ручных регрессов благодаря количеству, качеству и, главное, доверию к автотестам.
Помимо того, что автотесты запускаются на релизных ветках, весь набор автотестов всегда прогоняется на фиче-ветках разработчиков перед мерджем. В девелоп/мастер не допускается код, который уронил тесты. Благодаря этому мы поддерживаем стабильность девелопа, мы уверены в нем и можем отрезать релизную ветку в любой момент.
Для тестировщика автоматизированный регресс может означать больше свободного времени для более важных и полезных задач — это, например, написание новых автотестов, увеличение стабильности существующих, развитие своего направления и тому подобные крутые задачи.
Вопрос 3. Много ли времени уходит на поддержку автотестов?
Поддержка автотестов встроена в наши процессы разработки. Как это работает — каждую неделю назначается дежурный тестировщик, одной из задач которого является следить за стабильностью тестов. Если тест упал, дежурный должен разобраться в причине падения и назначить ответственного на фикс. Если тест упал из-за собственной нестабильности — задача на тестировщика, если тест нашел баг — на разработчика, код которого повлиял на этот автотест. По опыту, чаще всего это не занимает много времени — один тестировщик тратит несколько часов за неделю.
Более сложные задачи — развитие, улучшение и оптимизация, фиксы инфраструктуры. Такие задачи идут наравне с разработкой продуктового функционала и имеют соответствующий флоу (проработка, декомпозиция, оценка, разработка и тд). Это случается не слишком часто, в среднем раз в квартал на каждую платформу. Тут важно отметить, что чаще всего это не самые высокоприоритетные задачи, и делаются они, когда у команды появляется на это ресурс.
Если всё четко настроить, научиться работать с флакующими тестами и по-максимуму их не допускать, то поддержка автотестов занимает мало времени и приносит много пользы.
Вопрос 4. Насколько сложно найти мобильного автоматизатора?
Порой сложно найти просто хорошего мобильного тестировщика с релевантным опытом, а с опытом автоматизации в конкретном стеке технологий дела обстоят еще сложнее.
В мобильные команды hh.ru мы обычно ищем просто крутых ручных тестировщиков, которые хотят развиваться в сторону автоматизации. Во время собеседований базовые знания в программировании, конечно, являются плюсом, но не решающим фактором. Автоматизации мы готовы обучать у себя. А вот что действительно важно — чтобы человек стремился развиваться, умел и хотел обучаться и был проактивным в этих моментах. Конечно, сложно точно определить такое во время собеседований, но и не совсем невозможно.
Вопрос 5. За сколько тестировщик превращается в автотестировщика
Опять же, по нашему опыту, мы нанимаем человека без опыта автоматизации и на испытательный срок (3 месяца) ему ставится задача — написать свой первый автотест на любую из платформ, которая ему понравится больше или покажется проще. И у нас еще никто не провалил испытательный срок.
Естественно, большую роль играет то, что человек пишет автотесты не совсем с нуля. У нас уже есть и готовые автотесты, которые можно смотреть и писать по аналогии, и люди, которые готовы помогать и отвечать на вопросы.
По итогу за 3 месяца мы получаем человека, который уже понимает, как писать автотесты минимум для одной из платформ. Следующим шагом будет написать такой же тест для второй платформы. Еще через 3-4 месяца мы получим самостоятельного автоматизатора мобильных приложений под обе платформы, которому еще какое-то время, возможно, нужна будет помощь с какими-то сложными вещами. Но вот свободно писать легкие автотесты под обе платформы он будет уже через полгода.
Вместо заключения:
Эта статья — продолжение серии ответов на вопросы про автоматизацию тестирования. Дальше нас ждут заключительные ТОП-5 вопросов начинающего автоматизатора про автотесты. Поговорим о флаковании, стабильности и баги с прода.
А чтобы не пропустить новые видео, статьи и прочие новости, подписывайтесь на наш новостной канал в телеге и канал с охэхэнными историями на youtube. Также вы можете задать вопросы нашим инженерам по любым темам в комментариях, в телеграм-чате с разработчиками hh или в личку.
Маленький опрос для большого исследования
Мы проводим ежегодное исследование технобренда крупнейших IT-компаний России. Нам очень нужно знать, что вы думаете про популярных (и не очень) работодателей. Опрос займет всего 10 минут.
Пройти опрос можно здесь.
Stay tuned!
Ищем тестировщиков в четыре разных направления:
Комментарии (6)
amedvedjev
15.10.2021 17:03Так у вас получается 2 проекта тестирования, которые надо как то синхронизовать. Писать одинаковые тесты с проверками. Писать одни и теже шаги. Править при изменении оба проекта...
Но самое главное ведь в крупных проектах это создание тестовых данных. Как вы это делаете имея 2 различных по коду проекта?
Интересно сколько у вас тестов в каждом проекте и сколько автотестеров их поддерживает?
olgamsk4 Автор
16.10.2021 10:13+1Все верно, у нас два приложения - iOS и Android. И да, на них пишутся плюс-минус одинаковые автотесты.
Править автотесты действительно приходится и там, и там в случае каких-то изменений. Но так как у нас автотесты нативные, их могут поправить сами разработчики после своих задач. У нас они не только «могут поправить», но и делают это. То есть все небольшие правки-изменения не блокируются загрузкой тестировщика, а могут быть сделаны кем угодно в команде. Наше дело в таких случаях - обязательное ревью. Плюс тут хочется добавить, что если автотесты правильно спроектированы, то править их не сложно и быстро.
По поводу тестовых данных. Автотесты гоняются на тестовых стендах - копия прода без продовой базы данных. Для создания тестовых данных у нас есть фикстуры - апи для создания тестовых данных на стенде. Для каждого автотеста создаются уникальные тестовые данные. Одни и те же созданные данные не могут использоваться в двух и более тестах, так что никаких пересечений нет.
Вот тут кстати можно посмотреть, как у нас выглядят и создаются тестовые данные - https://habr.com/ru/company/hh/blog/455042/
Именно end-to-end UI автотестов, которые пишут тестировщики, у нас в данный момент на Android - 363, на iOS - 440. Тестировщиков 5. В остальном, как мы занимаемся поддержкой и кто за что отвечает, уже рассказала в статье.
amedvedjev
16.10.2021 11:35+1Да интересно. Но все-таки 2 проекта по мне накладных расходов больше. Переключения Kotlin/XCUItest/Api.
У нас сейчас 822 E2E теста. Для Android и iOS. Java. На Java написаны E2E и API тесты и все создание тестовых данных. Т.к. сервер на яве тоже, то девы иногда помогают или чинят когда автоматчики в отпуске.
Автоматчиков 2 на все E2E и API (WEB есть тоже, но там мало. Простой он у нас. 50 тестов).
Xanderblinov
16.10.2021 17:47Не понял, а у вас кроссплатформенные тесты на java?
А какой стек целиком? На сколько флакуют?
amedvedjev
16.10.2021 18:12+1Да кроссплатфома Appium + Java + testNG + maven + allureReport + TestRail (для релизов). Один повтор если тест упал по hard Assertu.
Идшки в iOS начинали сами проставлять. Потом девы помогли сделали генерацию на лету для тест билдов. Теперь лезу туда реже в основном для динамических компонентов.
В Андроиде тоже не без подачи автоматчиков навели порядок. Опять только динамические элементы больше проблема.
Но самое интересное т.к. тесты стали использовать или просить по фунционалу запускать девелоперы сами, то теперь сами стали заботится об этих идшках, если переписывают компоненты.
Флаки только серверные. У нас много third-party компонентов на серваке, а моки не пишут. В результате иногда не пашет. Плюс есть стабильные баги, которые жить не мешают, а тесты по ним сделаны. Наверно это как у всех - всегда есть проблемы по мелочи.
Пример. Ночные у нас бегают по 500 на каждой платформе. Среднее колво падений около 20-25 на платфому. Из них известные проблемы обычно около 15-18. А остальные как раз проблемы third-party сервисов, которые иногда (раз в 2 недели точно) могут и вырасти до 100 если упало совсем чтото. Тогда ругаемся и чинят сервер.
Все падения сверху это или изменения в клиентах или на сервере (скажем поменяли API).
Все ручные тестеры кто хочет автоматизировать пытаемся обучить. Но выхлоп пока мал.
Все тесты у нас с видео. Ошибки человеческие (типа нет кнопки Логин. Экран Info не появился). Это все привело к тому, что проверять результаты тестов стали ручники и девелоперы сами.
... ой не туда отправил...
lxsmkv
Чем вам слово «исследование» вместо «ресерч» не угодило? :)