Шпаргалка для QA: как тестировать Flutter-приложения
Привет! Меня зовут Юлия Андреева, я QA-специалист в AGIMA. Мы много работаем с Flutter-приложениями, и я заметила, что не все понимают их специфику. В этой статье расскажу о ключевых инструментах и подходах, которые применяются именно к тестированию Flutter.
Что важно знать о Flutter
Flutter – это кросс-платформенный фреймворк от Google. С его помощью можно разрабатывать приложения сразу для Android, iOS, Web и даже десктопа. Сегодня в Google Play уже более 700 тысяч Flutter-приложений.
Уникальная архитектура и концепция виджетов обеспечивают высокую производительность, но требуют особого подхода к тестированию. Разберем, какие нюансы важно учитывать.
Особенности тестирования Flutter-приложений
Попробую суммировать, какие тонкости наша команда замечает при работе с Flutter-проектами. Я их объединила в три большие группы.
● Архитектура Flutter.
Все элементы представляют собой виджеты. Это упрощает тестирование интерфейса и функциональности, а также обеспечивает единообразие интерфейса в приложении.
● Кросс-платформенность.
Можно сильно сэкономить время на тестировании приложения для каждой платформы. Платформенно-специфические функциональности тестируешь отдельно на iOS и на Android, всё остальное – на какой-то одной.
● Специфические инструменты тестирования.
Flutter предоставляет собственные инструменты для тестирования виджетов и интеграционного тестирования, например FlutterDevTools.
Проблемы и их решение при тестировании Flutter-приложений
Самая популярная проблема – отслеживание трафика. Dart обычно использует высокоуровневые библиотеки для HTTP-запросов. Библиотеки инкапсулируют низкоуровневые детали сетевого взаимодействия. И это затрудняет прямой доступ или мониторинг данных – как отправляемых, так и получаемых.
Проблема решается подключением прокси-сервера. Лучше всего добавить этот функционал в вашу инженерную панель.
При тестировании различий UI/UX на разных платформах чаще всего мы сталкивались с такими проблемами:
- Проблемы с анимацией, обращайте внимание на переходы и скроллы, особенно на iOS-устройствах.
- Работа с жестами при закрытии и свайпах экранов.
- Отображение системных диалоговых окон.
Не стоит фокусироваться на всех кнопках. Лучше обращать внимание только на существенные различия. Плюс помогает общение с сообществом. На GitHub можно найти множество уже открытых проблемы, а также добавить свою.
Кроме того, в решении любых проблем помогает Flutter DevTools.
Flutter DevTools
Этот комплект инструментов для отладки и профилирования в экосистеме Flutter дает нам возможность глубоко анализировать и тестировать приложения. Мы можем использовать его для инспекции иерархии виджетов. Это помогает выявлять проблемы с UI, а также мониторить производительность и использование памяти приложения.
Особенно ценной мы считаем его способность к отслеживанию сетевых запросов и логированию. Это делает его мощным инструментом в нашей повседневной практике тестирования и отладки.
Так выглядит интерфейс Flutter DevTools
Интеграция голден тестов в процесс разработки
Мы также активно внедряли голден тесты в наши процессы разработки. Команда тестирования участвовала в разработке сценариев для этих тестов.
Голден тесты – это специальные тестовые сценарии, которые записывают ожидаемые результаты выполнения приложения.
Они работают путем сравнения текущего внешнего вида виджетов с «золотым» эталоном – заранее сохраненными изображениями ожидаемого внешнего вида. Когда разработчики вносят изменения в код, голден тесты автоматически сравнивают новые изображения с эталонными, чтобы обнаружить любые отклонения.
Пример реализации:
Внедрение автоматизации
Выбор подходящего фреймворка для автоматизации тестирования приложений на Flutter представляет собой ключевой момент в процессе разработки. Это решение оказывает влияние на эффективность тестирования, удобство работы и, в конечном итоге, на качество продукта.
Что необходимо учитывать:
- Flutter-совместимость. Наши тесты должны говорить на одном языке с Flutter, так что выбирайте инструмент, дружащий с Dart. Среди них Selenium, Patrol, утилиты integration_test (ex-Flutter Driver), библиотеки flutter_gherkin().
- Кросс-платформенность. Flutter не знает границ, так что и наш фреймворк должен уметь работать и на Android, и на iOS.
- Дружба с CI/CD. Хотите скорости и удобства? Убедитесь, что ваш фреймворк ладит с Jenkins, GitLab и прочими CI/CD-инструментами.
- Популярность в индустрии. Выбирайте фреймворк, который имеет большое комьюнити.
Наш выбор пал на Appium – это открытый инструмент для автоматизации тестирования мобильных приложений, который поддерживает множество платформ, так же как и Flutter. Тесты для Appium можно писать на разных языках программирования. А еще он легко интегрируется с системами непрерывной интеграции и доставки (CI/CD).
Проблема, с которой мы столкнулись: почти всё в приложении является виджетом. Поэтому нам не удавалось получить текст из некоторых модальных окон. Чтобы решить эту задачу, обращайтесь к своей разработке. Они добавят идентификаторы к элементам.
В итоге с помощью Appium мы сильно сократили время на регрессионное тестирование. Ранее полный регресс в нашей команде занимал до 90 часов, а после автоматизации время сократилось до 33 часов. Среднее время выполнения одного теста ~1,5 минуты. Около 10% дефектов заводилось благодаря автотестам.
Параметризацией и оптимизацией тестовых сценариев удалось уменьшить количество тест-кейсов с 1334 до 483 – более чем в два раза! Параметризация позволила сделать тесты более гибкими и адаптировать их под различные условия. В итоге мы стали эффективнее распределять наши ресурсы и уделять больше внимания новым функциям и улучшениям.
End-2-end тест на 6 страниц проходит всего за полторы минуты
Заключение
Тестирование Flutter-приложений требует специфического подхода, учитывающего уникальные особенности фреймворка.
Раннее тестирование с использованием голден тестов, оптимизация процессов, применение автоматизации с параметризацией на основе Appium и интеграция с CI/CD позволяют повысить эффективность и точность тестирования для вашего продукта. В этом мы убедились на собственном опыте.