Автор статьи: Дмитрий Шадрин
Вступление
Хочется поделиться моим топом инструментов для тестирования, которые еженедельно помогают мне в эффективной работе и улучшении своих показателей.
Я занимаюсь тестированием на аутсорсе и приходится работать с различными видами продуктов: мобильные приложения и игры, web, серьезные криптовалютные проекты для Desktop и т.д. В этой статье я хотел бы подобрать наиболее удобные и значимые инструменты, которые помогают мне оптимизировать свою работу при тестировании мобильных приложений.
Мобильные приложения
Самое главное, на что необходимо сделать упор в тестировании мобильного приложения — это функциональное тестирование. Когда вы определились для кого сделан ваш продукт, кто конечный потребитель, то только тогда вы сможете составить грамотные end-to-end тесты для своего приложения.
Начинаем тестирование мы всегда с соответствия требованиям и дизайну приложения. Хороший QA должен знать требования к тестируемому продукту, а отличный — дружить с дизайном. И это значит не просто уметь заглянуть в Figma, Invision или Zeplin, но и понимать как устроен UI/UX его приложения.
Для более точного закрепления всех перемещений пользователя по экранам приложения обычно составляется майндкарта (mindmap). Из наиболее удобных для меня могу выделить xMind, Mindomo и MindMeister.
С появлением и актуализацией майндкарты становится легче тестировать приложения, а что особенно удобно — актуализировать и пополнять тестовую документацию (чек-лист, например).
Хороший чек-лист опирается на требования к проекту, документацию к фичам и задачи, поставленные перед командой в текущей реализации. Майнд-карта же позволяет не забыть и учесть все нюансы, тем самым делая отличную почву для end-to-end тестирования. Сервис, который поможет вам как найти готовые чек-листы, так и актуализировать свой: https://checkvist.com/checklists/476089
- В каждом чек-листе должны присутствовать и общие для всех мобильных приложений кейсы, вроде:
- тестировщики обращают внимание на правильную функциональность всех полей ввода (обязательных и необязательных), правильно ли они отображаются на экране и появляются ли соответствующие алерты при неправильном их заполнении
- приложение не должно сильно влиять на общую производительность мобильного устройства и правильно реагировать на прерывания. В этих кейсах тестировщики проверяют все возможные прерывания. Имитируются сценарии входящих звонков, смс, предупреждения о низком заряде батареи, отсутствия доступа к сети Интернет, потеря GPS или внезапное отключение устройства. Влияние на производительность можно замерить скоростью разрядки батареи, нагрузкой на процессор и оперативную память устройства. Обычно, при разработке приложения, учитываются минимальные требования к устройству и как раз с таких устройств стоит начать проверку производительности.
- если в приложении присутствуют платежные транзакции, то QA инженеры должны перед каждым релизом убедиться, что приложение поддерживает любую из указанных в приложении платежных систем (Visa, Mastercard, Paypal)
- новую функциональность в приложении всегда стоит проверять на соответствие гайдлайнам выбранной мобильной операционной системы:
iOS > developer.apple.com/design/human-interface-guidelines
Android > material.io/design/guidelines-overview - не стоит забывать и о кейсах для accessibility testing. Этому виду тестирования в последнее время уделяется много внимания и за мою карьеру случалось несколько случаев, когда наш билд “заворачивали”, пока мы не добавим все необходимые возможности. Подробнее об этом виде тестирования можно прочитать в этой статье: habr.com/ru/post/470091
- в мобильном приложении рано или поздно появляются пуш-уведомления. Стоит проверить что по нажатию на них пользователь попадает на заданный экран, что пуши нормально компонуются в очередь и доходят до адресата.
Инструменты, которые понадобятся для проверки вышеуказанных кейсов:
Снифферы Charles или Fiddler, как самые популярные до сих пор инструменты для анализа сетевого трафика. Они позволяют проверить кейсы на обрыв сети и слабый интернет, посмотреть на исходящие запросы и полученные ответы. Так же позволяют имитировать некоторые ситуации, которые сложно воспроизвести на реальных кейсах.
Данные из снифферов пригодятся при дальнейшем тестировании API. Но для работы с API советую использовать специализированные инструменты: Swagger UI, Postman. Оба инструмента решают две задачи: документирование запросов и их интерактивную проверку.
Стоит задуматься и об автоматизации процесса тестирования. Одним из самых распространенных решений для автоматизации UI тестирования мобильных приложений является Appium. Сравнительно легкий порог вхождения и обилие документации, а также огромная база QA специалистов, которые всегда помогут ответить на возникающие вопросы.
Appium — это бесплатный кроссплатформенный инструмент с открытым исходным кодом, который помогает автоматизировать приложения как для Android, так и для iOS. Является одним из самых широко используемых инструментов для создания автоматических тестов для смартфонов и планшетов.
Несомненными преимуществами Appium является простота в использовании, а также поддержка многих языков программирования: Java, Ruby, Python, C#, PHP.
Прежде чем начинать работать с Appium, необходимо настроить окружение из следующих компонентов:
После того как программное обеспечение будет установлено, можно позаботиться и о приложении. Вам понадобится
.apk-файл
для Android-приложения либо .ipa-файл для iOS для того, чтобы при запуске тестов данное приложение было установлено на выбранное устройство. Если приложение не было установлено на устройстве, то код тестов его установит, а затем запустит сами тесты.В процессе автоматизации тестирования рано или поздно встает вопрос: тестирования на реальных устройствах или использовать эмуляторы. Как показывает практика и безжалостная статистика, эмуляторы — не панацея. Очень часты ситуации, когда на эмуляторах все отрабатывает идеально и все тесты пройдены. Но на реальном устройстве работа приложения блокируется системой безопасности, работой другого приложения или кастомной прошивкой (привет Android!).
Моя рекомендация — комбинировать и использовать фермы устройств. Такие сервисы как BrowserStack, AWS Device Farm, Xamarin Test Cloud. Вы подключаетесь к реальным устройствам, можете интегрировать в эти сервисы свои автотесты и смотреть на получаемые результаты. Но всегда стоит иметь в парке девайсов целевые устройства, а так же устройства из верхней и нижней планки (минимально допустимые и флагманские).
Неплохая альтернатива Appium — codecept.io
Если вам предпочтителен JS в качестве языка для разработки автотестов — warmly welcome to CodeceptJS. Подробнейшая документация, тесты не занимают много экранного места (вы поймете о чем я) и активная поддержка всех современных операционных мобильных систем заставят задуматься в пользу этого инструмента.
После того как ваш проект оброс значительным количество автотестов было бы неплохо автоматизировать их запуск при каждой сборке нового билда. Кастомизировать и настроить это вам помогут современные системы CI\CD. Лично я предпочитаю Jenkins или Teamcity, но здесь уж дело вкуса.
Еще одним инструментом, позволяющим сократить и оптимизировать регрессионное тестирование является матрица зависимостей (она же матрица трассировки). Если коротко — это таблица, в которой проставляются зависимости элементов системы друг от друга. Для составления такой матрицы требуется разбираться в коде приложения, а также очень поможет проконсультироваться с архитектором проекта. Но в итоге такой инструмент позволит существенно (на моей памяти — до 40%) сократить время регрессионного тестирования. Более подробно о матрице можно прочитать здесь.
Hint’ы
Вот мой набор полезных хинтов для того, позволяющих найти максимальное количество ошибок, учитывая специфику мобильных приложений.
- Всегда проверяйте кейсы на сворот/разворот, выход из спящего режима и включение/выключение. Для Android есть настройка — Do not keep activities (DNKA). При тестировании с этой настройкой обязательно указывайте в багах эту аббревиатуру, чтобы разработчику было проще это воспроизвести.
- Нотификации/уведомления — бывают локальные, так и серверные (т.е. завязанные на подключении к сети). Всегда стоит помнить о них и проверять их правильную работу. Они всегда должны вести на целевой экран. Либо стоит отказаться от них, пока разработчики не нашли правильный способ навигации.
- Используйте Charles и аналоги для воспроизведения всех возможных кейсов с сетью. Пользователи всегда в движении и поэтому в вашем приложении на каждом экране должна быть обработка ситуаций с потерей сигнала.
- Приложения используют многие сервисы мобильного устройства, такие как камера, галерея. микрофон и прочее. Всегда проверяйте кейсы на доступ к этим сервисам и особенно кейсы, когда доступ к ним запрещен.
- Помните об особенностях операционных систем и платформ. Например требования к iOS: все ipa-файлы должны быть подписаны разработчиками. В Android же, например, очень часто можно найти баги при быстром переключении между экранами. Данные не успевают прогрузиться и приложение крашится.
- Во время тестирования у приложений стоит тестовый сертификат, чтобы QA мог беспрепятственно смотреть трафик с использованием сниффера. В фазе предпродакшена всегда стоит проверять на боевых сертификатах свое приложение.
- Держите руку на пульсе проекта. Для этого общайтесь с разработчиком фичи, которую тестируете. Он может знать больше нюансов, чем указано в документации. Общайтесь с проектным менеджером чтобы лучше понимать приоритетность задач и сроков. Обшайтесь с дизайнерами и не поленитесь после прохождения регрессионного тестирования показать им итогвый вид новой функциональности. Такая практика называется “авторский контроль” и она не раз помогала найти совершенно неочевидные расхождения с идеей и реализацией.
- Всегда закладывайте правильное время на тестирование. Помните о форс мажорных ситуациях, которые всегда могут возникнуть. Закладывайте примерно 20% времени от тестирования на такие случаи. Лучше закончить тестирование раньше отмеченного срока, чем непредсказуемо выйти за пределы дедлайнов. Ведь, как мы помним, в багах на проде всегда “виноваты QA”.
- Проверьте что в вашем приложении есть форма обратной связи и она удобна для пользователя. Большое количество багов девайсозависимы и именно пользователь со своим уникальным устройством и его конфигурацией может помочь вам в расследовании бага.
Заключение
В этой записке я хотел пробежаться по основным инструментам и хинтам, что использую в своей повседневной работе. Более подробно о всех современных инструментах вы можете познакомиться на нашем курсе по мобильному тестированию на обучающей платформе OTUS. Также приглашаю вас на бесплатный урок, в рамках которого мы подробнее обсудим современные практики тестирования мобильных Android/iOS-приложений, поговорим про необходимый набор тестировщика в 2020-м году и рассмотрим тему автоматизации своей работы и тестов.
irishaspir
Спасибо за статью, мне нравится! Обзор широкий и подробный.
Вопрос от меня такой, при использовании приложения окна нотификаций переодически зависают, например iOS. Это баг активного приложения или баг системы?
isakura3131
здесь слишком большое количество условий, от которых это может зависеть, и все равно сказать можно будет точно при ручном тестировании. Модель телефона, версия прошивки, срок использования, данные приложения, другие сторонние приложения, запущенные в данный момент, заполненность памяти — все может оказывать влияние. Но скорее всего вопрос стоит в работе операционной системы/производительности, мне кажется