В командной разработке тесты – это, как правило, задача QA- и SDET-специалистов. Вместе с тем навыки тестирования полезны и разработчикам, позволяя им проверить свои приложения и повысить стабильность их работы.
Эта статья предназначена в первую очередь начинающим мобильным разработчикам, которые хотят изучить процессы тестирования и свое участие в них.
На примере Android-разработки обсудим подходящие инструменты тестирования – от JUnit до Kaspresso, а также немного познакомимся с методологиями Test Driven Development (TDD) и Behaviour Driven Development (BDD). Наконец, рассмотрим их отличия на примере кейса.
Тестирование IT-системы охватывает множество проверок архитектуры, UI, кода и взаимодействия его частей, соответствия требованиям. По мере усложнения систем в отрасли растут потребности как в обеспечении качества (QA), так и в автоматизации тестирования (SDET), которая позволяет проводить некоторые тесты быстро и с минимальным участием людей.
Как подключить Android-устройство к Chrome DevTools
Уровни тестирования
С появлением тестов для различных уровней программы возникла их абстрактная иерархия – Пирамида автотестов, в которую входят:
- Модульные тесты. Проверяют взаимодействие кода внутри одного или нескольких классов со связанной функциональностью. Unit-тесты создают до, во время или после написания проверяемого кода, их должно быть много, они должны запускаться часто, работать быстро, быть легко поддерживаемыми.
- Интеграционные тесты. Проверяют логику взаимодействия различных компонентов, подсистем без использования UI. В контексте Android сюда входят тесты БД (миграции, выборки, CRUD операции), тесты api-сервисов с моковыми данными и т.д.
- UI-тесты. В контексте Android это полноценное автоматизированное тестирование экрана или набора экранов, проверка корректной работы пользовательского интерфейса. Вся логика при этом должна быть протестирована на нижних уровнях.
При выборе необходимых проверок, помимо пирамиды, можно использовать колесо автоматизации – подробнее об этом читайте здесь.
Рассмотрим инструменты, используемые на каждом из вышеупомянутых уровней.
Unit-тесты
Unit-тесты – это самый простой инструмент для вовлечения разработчика в процесс тестирования приложения. Они фокусируются на конкретном классе или участке кода и пишутся непосредственно разработчиками. Unit-тесты должны выполняться быстро и иметь однозначные результаты: правильно написанные тесты – отличный способ немедленной проверки произведенных изменений в коде. Также функционал Android Studio позволяет выполнять не весь набор тестов, а только те, которые необходимы разработчику для проверки. Помимо этого, unit-тесты – один из вариантов документации кода для разработчиков, они помогают увидеть, какие возможные результаты имеет метод и какие граничные случаи он обрабатывает.
Как тестировать на эмуляторе (android studio)? | Основные функции эмулятора в андроид студио.
Инструменты для модульного тестирования
Unit-тесты для Android по умолчанию располагаются в папке src/test проекта или модуля, запускаются с использованием фреймворка JUnit. В идеале, один тест должен тестировать открытый интерфейс одного класса и проверять все ветвления кода и граничные случаи в нем. Зависимости должны иметь поведение, необходимое для проверки тестируемого класса.
В современных Android приложениях для unit-тестов, в основном, используются следующие библиотеки:
- JUnit. Для запуска тестов, вызова assertion’ов.
- Mockk. Позволяет мокать final классы Котлина, suspend функции, имеет удобный DSL для работы.
- kotlinx-coroutines-test. Тестирование suspend-функций внутри TestCoroutineScope, предоставляемого функцией runBlockingTest, подмены main dispatcher’а в рамках тестов.
- turbine. Небольшая, но удобная библиотека для тестирования kotlinx.coroutines.Flow.
- robolectric. Позволяет писать unit-тесты для классов, использующих Android SDK без непосредственного запуска устройства – фреймворк умеет симулировать различные части системы.
Инструменты для интеграционного тестирования
Эти тесты для Android по умолчанию располагаются в папке src/androidTest проекта или модуля и запускаются уже на устройстве, так как должны иметь доступ, например, к контексту приложения для создания БД Room. Для запуска тестов используется уже упомянутый фреймворк JUnit.
Инструменты для тестирования пользовательского интерфейса
UI-тесты служат, в основном, для прогона основных пользовательских сценариев приложения (авторизация, регистрация, добавление товара в корзину и т.п.). Они помогают отловить ошибки в базовых сценариях и исправить их до попадания сборки с багами к тестировщикам. UI-тесты также по умолчанию располагаются в папке src/androidTest и запускаются на устройстве. Помимо JUnit, основные инструменты – это:
- Espresso. Официальный фреймворк для UI-тестирования от Android. Имеет множество примеров и хорошую документацию. При этом не может взаимодействовать с другими приложениями, достаточно плохо работает с асинхронными интерфейсами и списками.
- UI Automator. В отличие от Espresso, позволяет взаимодействовать с другими приложениями: совершать звонки, отправлять сообщения, изменять настройки устройства.
- Kaspresso. Обертка над Espresso и UI Automator, которая позволяет писать стабильные, быстрые, удобочитаемые тесты.
- Для тестирования интерфейсов, реализованных с помощью Jetpack Compose, также появляются свои библиотеки, например, эта.
Также на Хабре можно прочитать больше об инструментах для UI-тестирования, например, в этой статье.
TDD и BDD
TDD и BDD – две популярные методики разработки через тестирование. Рассмотрим их отличия на примере следующего кейса:
- Пользователь вводит сумму расхода, комментарий к расходу и выбирает категорию расхода.
- Если сумма некорректна или не выбрана категория расхода, возвращается код ошибки, иначе – код успешной обработки.
- Комментарий опционален.
TDD (Test Driven Development) – это методология разработки ПО, основанная на следующих коротких циклах:
- Написать тест, проверяющий желаемое поведение.
- Запустить тест. Test failed.
- Написать программный код, реализующий требуемое поведение.
- Запустить тест. Test succeeded.
- Провести рефакторинг написанного программного кода, сопровождая прогонами теста.
Для начала создадим контракт нашей реализации.
sealed class VerificationResult < object Success : VerificationResult() object Failure : VerificationResult() >interface ExpenseController < fun verifyExpenseInfo( sum: String?, comment: String?, category: String? ): VerificationResult >class ExpenseControllerImpl: ExpenseController
Теперь напишем тест, проверяющий, что написанный код реализует указанные требования.
Запускаем тест, получаем ожидаемый результат:
kotlin.NotImplementedError: An operation is not implemented.
Теперь напишем реализацию
class ExpenseControllerImpl : ExpenseController < override fun verifyExpenseInfo( sum: String?, comment: String?, category: String? ): VerificationResult = when < sum == null ->VerificationResult.Failure category == null -> VerificationResult.Failure else -> VerificationResult.Success > >
Запустим тесты: все 4 теста проходят. Теперь настало время рефакторинга написанного кода.
class ExpenseControllerImpl : ExpenseController < override fun verifyExpenseInfo( sum: String?, comment: String?, category: String? ): VerificationResult = when < isNotValidNumber(sum) ->VerificationResult.Failure isCategoryNotSelected(category) -> VerificationResult.Failure else -> VerificationResult.Success > private fun isNotValidNumber(sum: String?): Boolean = sum == null private fun isCategoryNotSelected(category: String?): Boolean = category == null >
Снова запускаем тесты, чтобы удостовериться, что наш рефакторинг ничего не сломал – и видим, что тесты проходят успешно.
Методология TDD имеет следующие преимущества:
- Написанный код имеет более правильный и понятный дизайн, написан чище, так как должен запускаться из теста и быть идемпотентным.
- Позволяет провести рефакторинг с меньшей вероятностью возникновения ошибок, поскольку есть способ сразу же проверить правильность написанного кода.
- Позволяет локализовать ошибки быстрее.
В числе минусов можно выделить следующие:
- Фокусировка на реализации задачи.
- Код и описание тестов пишутся на одном языке.
- В процесс вовлечена только команда разработки.
Подробнее про данную методологию можно прочитать в книге Кента Бека Экстремальное программирование. Разработка через тестирование.
BDD (Behaviour driven development) – методология разработки ПО, во многом схожая с TDD. Отличается тем, что тестовые сценарии пишутся на “человеческом” языке, а не на языке программирования.
Тестовые сценарии записываются в формате given-when-then. Например, given (имея) подключение к сети, when (когда) пользователь открывает ссылку, then (тогда) контент страницы отображается.
Перепишем наши требования с использованием BDD:
Сценарий: добавление траты.
Given Корректную сумму
And Введенный комментарий
And Выбранную категорию траты
When Пользователь нажимает кнопку добавления
Then Пользователь получает успешный результат
Для данного подхода существуют свои фреймворки. Например, для Java это фреймворк JBehave.
К особенностям данного подхода можно отнести следующее:
- Тестовые сценарии на “человеческом языке” может писать как заказчик,так и аналитик, тестировщик. Это повышает уровень знаний всей команды о разрабатываемой системе.
- Тестовые сценарии легко изменяются.
- Результаты тестов также более понятны заинтересованным лицам, по сравнению с результатами выполнения кода.
Узнать подробнее о BDD можно в этой статье.
Заключение
Мало у кого возникают сомнения, что тесты необходимы для проектирования качественного ПО. Существует множество фреймворков, инструментов и методологий (DDD, FDD и другие *DD), которые помогают команде на всех этапах жизненного цикла ПО. Тесты помогают быстро найти и локализовать ошибки, а также, если они правильно спроектированы, могут служить тестовой документацией. Также благодаря тестам код реализации, скорее всего, будет написан чище и понятнее. В то же время главное – не 100% покрытие кода тестами, а его соответствие бизнес-задачам, поэтому важно избегать крайностей и не писать тесты ради тестов.
Спасибо за внимание! Надеемся, что этот материал был вам полезен.
- Блог компании SimbirSoft
- Тестирование IT-систем
- Разработка мобильных приложений
- Разработка под Android
- Тестирование веб-сервисов
Источник: habr.com
Тестирование приложений на Android: инструменты и методы
Тестировать можно что угодно. Особенно при разработке программного обеспечения.
Андрей Белоус
Автор статьи
23 ноября 2022 в 13:47
В статье рассказываем, что такое мобильное тестирование и тестирование Android-приложений. Разбираемся с инструментами, особенностями, этапами, спецификой и смотрим на реальные баги, которые встречаются даже в самых популярных продуктах.
Что такое мобильное тестирование
QA расшифровывается как Quality Assurance, или «гарантия качества». Другими словами, тестирование ПО — это когда анализируют программное средство и сопутствующую документацию, чтобы найти все ошибки (баги).
Рынок IT-продуктов динамичный и конкурентный, а мобильные телефоны — основной способ взаимодействия с сервисами. Чтобы удержать пользователей, нужно выпускать качественные продукты без багов. Здесь и начинается работа QA-инженеров. Они должны убедиться, что в программе или приложении ничего не сломалось, а новые функции (фичи) пользователи видят так, как задумывалось руководителем продукта.
Особенности QA
У тестирования мобильных приложений есть специфика. Чтобы баг пропал, нужно установить обновление. Но многие пользователи либо забывают, либо просто не обращают внимания на обновления. Поэтому так важно выпускать новые релизы без багов, а баги в мобильных приложениях бывают очень запутанные.
Что случится с функциями приложения, если во время поездки в метро пропадет интернет? А если приложением будут пользоваться в другой стране? Или пользователь выключит геолокацию, поменяет язык в телефоне?
Можно придумать много таких вопросов, и все они будут различаться в зависимости от функциональности приложения. Задача мобильного QA-инженера — сделать так, чтобы у пользователей в мобильном телефоне было приложение, которое работает стабильно и предсказуемо во всех ситуациях.
Инженер-тестировщик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT
Типы мобильных приложений
Современные мобильные операционные системы запускают разные программы. Есть приложения, которые написаны для платформы, на которой запускаются. Это нативные приложения. А есть те, которые работают через веб-браузер вне зависимости от операционной системы. Это мобильные веб-приложения.
Нативные
Они эффективнее используют ресурсы платформы и выглядят для пользователя более плавными и удобными. В некоторых случаях без нативного подхода не обойтись. Например, когда работаете с камерой или блютусом.
Веб
Если в приложении немного функций и все они не зависят от платформы, можно обойтись веб-приложением. Это позволит написать код один раз и запустить его на всех платформах.
Гибридные
Чаще всего компании выбирают гибридный подход. Большая часть приложения нативная, но некоторые части работают как веб-приложение.
Такой подход выбирают по разным причинам: например, какие-то не самые важные экраны можно сделать сразу на две платформы — или компания переписывает старые экраны нативным подходом.
Сейчас большинство приложений гибридные. Удобно совмещать сразу два подхода: можно вложить в приложение больше рабочих функций.
Способы тестирования
По степени автоматизации, или по степени непосредственной вовлеченности человека в процесс различают ручное и автоматизированное тестирование.
Ручное
Процесс, в котором участвует человек. Тестировщик вручную на устройстве проверяет, как работают функции приложения.
Сейчас не нужно постоянно обновлять приложения и дорабатывать мелочи, поэтому большую часть времени QA-инженер занимается регрессионным тестированием.
Регрессионное тестирование — это когда проверяют работу функций, которые не изменялись в текущем релизе. Еще есть new feature testing — когда тестируют только новые функции, которые добавили в приложение.
Один из главных недостатков ручного тестирования — количество времени, которое QA-инженер на него тратит. Если в приложении много функций и разных экранов, то понадобится несколько дней, чтобы провести полный цикл регрессии на разных устройствах и версиях операционной системы.
При частых релизах ручное тестирование не подойдет, поэтому компании стремятся максимально автоматизировать процесс.
Автоматизированное
Для него пишут специальные программы — тесты. Есть много разных видов тестов: какие-то из них пишут разработчики, а какие-то — QA-инженеры.
Такие тесты можно запускать когда угодно, и они занимают гораздо меньше времени в отличие от ручного тестирования.
Хорошая практика — прогонять тесты несколько раз в сутки, чтобы сразу видеть, что и где сломалось.
Что выбрать
На рынке труда больше ценятся специалисты, которые умеют автоматизировать процесс тестирования.
На курсе «Инженер по тестированию» от онлайн-университета Skypro можно разобраться с видами тестирования, научиться тестировать API, мобильные приложения и получить одну из самых востребованных IT-профессий с нуля.
Инструменты для мобильного тестирования
Главный инструмент QA-инженера — это устройство с установленным приложением. Но у этого инструмента есть недостатки: девайс работает на определенной версии ОС и поменять это сложно.
Эмуляторы
Для решения этой проблемы тестировщик использует эмуляторы. Эмулятор симулирует Android-девайсы на компьютере, чтобы тестировать приложения на различных устройствах и Android API без физического устройства.
DevTools
В настройках Android-устройства есть экран, который называется Developer options. Он скрыт для обычных пользователей. Чтобы его включить, нужно семь раз нажать на поле Build Number на экране информации о системе.
Опции разработчика позволяют включить настройки, которые помогают понять, есть ли проблемы с производительностью приложения, и протестировать «экстремальные» условия его работы.
Например, можно посмотреть частоту обновления экрана или расположение пользовательских элементов.
Источник: sky.pro
20+ инструментов для тестирования мобильных приложений
Боевой набор настоящего самурая-тестировщика, незаменимый в любой ситуации. Какие бы приложения вы ни тестировали, можете использовать один или несколько инструментов из подборки.
Автоматизированные инструменты для тестировщика
DeviceAnywhere
Инструмент для множественного кроссплатформенного тестирования устройств и приложений.
Ranorex
Для автоматизированного тестирования приложений для iOS, Android и Windows 8. Позволяет записывать проводимые тесты и их результаты.
eggPlant
Автоматическое тестирование для iOS, Android и Windows Mobile / Phone.
Silk Mobile
Инструмент автоматического тестирования веб-приложений, а также нативных приложений для iOS, Android, Blackberry и Windows Phone. Не требует джейлбрейка для устройств.
SeeTest
Позволяет записывать результаты тестирования приложений на физически существующих устройствах и может также использоваться для кроссплатформенного тестирования на основе подготовленного пакета тестов.
MonkeyTalk
Инструмент тестирования нативных, гибридных и веб-приложений на основе простых и комплексных тестов.
NativeDriver
Подходит больше для нативных приложений, чем для других. Совместим с приложениями для Android, iOS и Windows / Windows Phone.
Mобильные эмуляторы и инструменты тестирования
Дополнительная помощь тестировщику, у которого не все физические смартфоны / планшеты под руками, а тест нужно провести быстро. Большинство из инструментов в этой рубрике — веб-сервисы с интерактивным интерфейсом, работающим в практически любом современном браузере.
mobiReady
Инструмент верификации и оценки готовности сайтов и прототипов для мобильных устройств. Есть подсказки и рекомендации по тестированию и оптимизации сайтов и приложений под различные мобильные гаджеты.
BrowserStack
Веб-инструмент для сайтов и веб-приложений с использованием различных браузеров и полнофункциональной интерактивностью.
CrossBrowserTesting
Кроссбраузерное тестирование для iOS, Android и Blackberry.
Screenfly
Инструмент-эмулятор для готовых приложений, сайтов и интерактивных прототипов. Есть поддержка разных диагоналей экрана и устройств.
Mobile phone emulator
Эмулятор различных мобильных телефонов для проверки совместимости приложения.
Responsive
Инструмент тестирования приложений на предмет полноценной функциональности адаптивного дизайна.
ProtoFluid
Инструмент для тестирования адаптивного дизайна и «жидких» текстур.
Тестирование мобильных приложений для Android
Отдельная подборка инструментов для тех, кто тестирует приложения для мобильной ОС Android.
Testdroid
Автоматизация тестов и записть пользовательских действий.
robotium
Фреймворк для тестирования нативных и гибридных приложений. Позволяет записывать тесты, проводимые в режиме black-box.
scirocco
Инструмент для тестирования пользовательского интерфейса с возможностью составления отчетов со скриншотами.
Monkey
Эмулятор псевдорендомных потоков событий (клики, жесты, касания, события на уровне работы системы и т.д.)
Тестирование приложений для iPhone и iPad
iPhone Tester
Веб-инструмент для тестирования веб-интерфейсов на iPhone. Для использования рекомендован браузер Safari или иной браузер на базе Webkit.
iPad Peek
Тестирование приложений для iPad (приложения, сайты, интерактивные прототипы).
Appium
Автоматический инструмент тестирования гибридных и нативных приложений для iOS.
TestStudio
Позволяет записывать, строить и выполнять автоматизированные тесты для приложений под iPhone и iPad. Использует запись по объектам.
Онлайн-инструменты для тестирования
Помимо некоммерческих инструментов, перечисленных выше, есть и коммерческие решения для автоматизации тестирования приложений. Их рекомендуют использовать для проверки в интерактивных тестах большого количества приложений или сайтов.
Perfecto Mobile | Тестирование приложений | От $25 / час |
UserTesting.com | Проверка юзабилити | От $250 / 10 часов |
AppThwack | Комплексная платформа | От $20 / месяц |
Xamarin Test Cloud | Комплексная платформа | От $25 / месяц |
(Источник)
Источник: spark.ru