- 11 инструментов для тестирования мобильных приложений
- Авторизуйтесь
- 11 инструментов для тестирования мобильных приложений
- Calabash
- Appium
- Robotium
- Espresso
- iOS UI automation
- UI Automator
- KeepItFunctional
- MonkeyRunner
- Ranorex
- SeeTest
- TestFairy
- Фреймворк для тестирования андроид
- Что пишут в блогах
- Онлайн-тренинги
- Что пишут в блогах (EN)
- Blogposts:
- Разделы портала
- Про инструменты
- Содержание
- Приложение и тесты
- Классификация инструментов
- Драйвер
- Надстройка
- Фреймворк
- Комбайны
- Опрос
- Сравнение инструментов
- Драйверы
- UIAutomator
- Espresso
- Selendroid и Robotium
- XCUITest
- Надстройки
- Appium
11 инструментов для тестирования мобильных приложений
Авторизуйтесь
11 инструментов для тестирования мобильных приложений
На дворе 2016 год, и для тестирования разнородных проектов существует уже немало автоматизирующих библиотек, с помощью которых можно проверить поведение даже самых незначительных частей программы. Собрали для вас самые популярные из таких инструментов, предназначенных для мобильной разработки.
Calabash
Это фреймворк для автоматизации функционального тестирования, который является своего рода драйвером, управляющим работой приложения на девайсе или симуляторе. Подходит как для Android-приложений, так и для приложений для iOS. Разработкой и поддержкой занимается компания Xamarin. Также компания Xamarin предоставляет платную услугу тестирования в «облаке». С тем, как это работает, можно ознакомиться тут.
Appium
Это open source фреймворк, который помогает автоматизировать тестирование мобильных приложений. В последнее время Appium часто упоминают на конференциях, а используется он даже Яндексом. Про его установку и настройку можно прочитать здесь.
Robotium
А Robotium предназначен для Android-приложений. С помощью него разработчики могут писать функциональные тесты, охватывающие несколько Android активити. Рекомендуем вот этот вебинар для освоения Robotium.
Espresso
Espresso — это инструмент для тестирования пользовательских интерфейсов Android-приложений. Основной API невелик и прост, но поскольку исходный код инструмента открыт, вы можете расширить его для своих нужд.
iOS UI automation
Это родной инструмент от Apple. Не упомянуть его было нельзя, но сразу стоит оговориться о нескольких минусах:
- Тесты нужно писать на JavaScript.
- Для запуска тестов нужно открывать отдельное приложение, что не слишком удобно, особенно если использовать CI (continuous integration).
- Приложение должно быть подписано. Подписать приложение, может, и не проблема, но делать это, просто чтобы научиться использовать инструмент, мало кому хочется.
UI Automator
Аналог UIAutomation для тестирования Android-приложений. Разрабатывается корпорацией Google и поставляется вместе с Android SDK.
KeepItFunctional
KIF позволит вам проверить то, как ваше iOS приложение воспринимают люди с плохим зрением.
MonkeyRunner
Инструмент monkeyrunner предоставляет API для написания программ, которые управляют Android-устройством или эмулятором извне Android-кода. Вы можете написать программу на Python, которая установит приложение или тестовый пакет, запустит его, отправит нажатия, сделает скриншоты интерфейса и сохранит их.
Ranorex
Ranorex — это GUI-фреймворк для автоматизации тестирования настольных, веб- и мобильных приложений. У него нет своего языка — вместо этого он использует C# и VB.NET.
SeeTest
Ещё один фреймворк для автоматизации тестирования. Код можно расширить с помощью встраиваемых инструментов, а скрипты можно запускать на разных устройствах без изменений. SeeTest также можно использовать для тестирования отзывчивых веб-сайтов и пользовательских интерфейсов.
TestFairy
При публичном тестировании мобильных приложений очень сложно узнать, из-за чего конкретно у пользователя возникла та или иная проблема. TestFairy решает эту проблему, записывая все тесты на видео, а также запоминая технические характеристики устройства.
Источник
Фреймворк для тестирования андроид
Что пишут в блогах
Стоимость в цвете — 2500 рублей самовывозом (доставка еще 500-600 рублей, информация по ней будет чуть позже)
Заказать — https://shop.testbase.ru/buy/book. Пока самовывоз (см ниже где и когда!!). С почтой разберемся чуть позже.
Где: Кострома / онлайн
2 декабря буду выступать в Костроме. Приходите увидеться очно, или подключайтесь онлайн.
Онлайн-тренинги
Что пишут в блогах (EN)
- You are brought into a project that is sort of a dream project. It may be a contract, it might be a new job, or. » target=»_blank» rel=»nofollow»>A Followership Hack
- Playwright is an awesome new browser automation library. With Playwright, you can automate web UI interactions for testing or for web scraping with a. » target=»_blank» rel=»nofollow»>Want to learn Playwright with Python? Take this workshop!
- Reading Time: minute “Attack ships on fire off the shoulder of Orion. I watched C-beams glitter in the dark near the Tannhäuser. » target=»_blank» rel=»nofollow»>Testival Community Ending Scene
- Dark Patterns For Disabled People
- I haven’t made time to blog here much this year because of pair blogging with Janet Gregory on AgileTestingFellow.com, along with other writing. » target=»_blank» rel=»nofollow»>Agile Testing Days 2021 – 1 of ? – Asking new questions
- Since 9 years, PractiTest and TeaTimeWithTesters are now running the annual State of Testing survey. Over the last years the survey provided. » target=»_blank» rel=»nofollow»>State of Testing Survey 2022 is live
- Making progress in removing Robot Framework from my world. Why, you might ask, especially when so many managers in Finland have been taught to expect. » target=»_blank» rel=»nofollow»>Removing Robot Framework From My World
- It’s Thanksgiving in the US – well, yesterday was. Instead of links this week, I’d like to share 5 things I’m thankful for.
Blogposts:
Разделы портала
Про инструменты
Меня зовут Арсений Батыров, я работаю в отделе QA Badoo и занимаюсь в основном ручным тестированием веб-приложений. А ещё я веду курсы по ручному и автоматическому тестированию мобильных приложений.
Перед запуском нового курса я задумался, о каких инструментах стоит рассказать ученикам. Прошерстил Рунет и англоязычный Интернет в поисках сравнительных статей, но, как ни странно, не нашёл подходящего источника информации. И тогда я решил создать его сам.
Я преследовал три цели:
- Классифицировать инструменты в стеке автотестирования, чтобы стали понятны их иерархия и сочетаемость.
- Показать, какие инструменты популярны сегодня на рынке.
- Рассказать про самые популярные инструменты каждого типа и сравнить их по нескольким параметрам.
Результатом моих трудов стал этот путеводитель по наиболее популярным и простым в освоении инструментам автотестирования мобильных приложений.
- Выбираете инструмент — посмотрите сравнение.
- Хотите узнать, как устроена автоматизация на мобильных устройствах — загляните в классификацию.
- Хотите добиться повышения зарплаты — освойте популярный инструмент.
Содержание
Дисклеймер: я не гуру тестирования, а эта статья — не исчерпывающий список. Если найдёте ошибку или захотите дополнить путеводитель, добро пожаловать в комментарии — я обязательно вынесу всю полезную информацию оттуда апдейтом.
Приложение и тесты
Для начала давайте поймём, с чем будут работать наши инструменты.
Есть две важные для нас сущности, не входящие в стек автоматизации: это приложение и тесты. К приложению обращаются все инструменты автоматизации. Оно взаимодействует с пользователем и другими приложениями через один или несколько интерфейсов: GUI, API, сетевой интерфейс, CLI и некоторые другие.
API(application programming interface) — основной интерфейс для взаимодействия с другими программами.
GUI (graphic user interface) — графический интерфейс, используется для взаимодействия с пользователем.
Net (networking interface) — работает через сеть и используется как продвинутыми пользователями, так и программами.
Тесты могут использовать все эти интерфейсы для взаимодействия с приложением. При ручном тестировании посредником между тестами и приложением является тестировщик: он преобразует текст тест-кейсов в действия с одним из интерфейсов приложения.
Для автоматизации нужно заменить тестировщика на инструменты, которые умеют взаимодействовать с одним или несколькими интерфейсами приложения. Также потребуются утилиты для запуска и формирования набора тестов.
Вместе все эти инструменты называются стеком автотестирования. Чтобы понять, как они взаимодействуют в стеке, необходимо их классифицировать. Представленная классификация условна и необходима в первую очередь для понимания инструментов и их сочетаемости.
Всего существует четыре группы инструментов: драйверы, надстройки, фреймворки и комбайны. Рассмотрим их подробнее.
Классификация инструментов
Драйвер
Утилиты автотестирования, как и другие программы, могут взаимодействовать с приложением только через программный интерфейс — по-другому они не умеют. Для работы через другие интерфейсы существуют специальные программы — драйверы.
Драйвер — программа, которая предоставляет API для одного из интерфейсов приложения.
Для каждого интерфейса, кроме, собственно, API, необходим свой драйвер. Например, когда вы даёте драйверу для GUI команду “Нажать на кнопку Menu”, он воспринимает её через API и отсылает в тестируемое приложение, где эта команда превращается в клик по графической кнопке Menu. Для взаимодействия с API приложения драйверы не нужны или почти не нужны — взаимодействие программное. А вот при работе с остальными интерфейсами без них не обойтись.
Наиболее сложными обычно являются драйверы для GUI, так как этот интерфейс сильно отличается от обычного для программы общения кодом. При этом в автоматизированном тестировании мобильных приложений GUI наиболее актуален, так как в интеграционном тестировании использовать чаще всего приходится именно его. Наиболее популярные драйвера для GUI в мобильном тестировании — UIAutomator и Espresso для Android, XCUITest — для iOS.
Надстройка
Когда функционала драйвера не хватает или он неудобен и сложен, над нимпоявляется ещё один уровень, который я буду называть надстройкой.
Надстройка — программа, которая взаимодействует с приложением через один или несколько драйверов, повышая удобство их использования или расширяя их возможности.
У надстройки могут быть следующие функции:
- Модификация поведения (без изменения API).
Например:- дополнительное протоколирование,
- валидация данных,
- ожидание выполнения действия в течение определённого времени.
- Повышение удобства и/ или уровня абстракции API через:
- использование синтаксического сахара — удобных названий функций, более коротких обращений к ним, унифицированного стиля написания тестов;
- неявное управление драйвером, когда, например, он инициализируется автоматически, без необходимости прописывать каждое такое действие вручную;
- упрощение сложных команд вроде выбора события из календаря или работы с прокручивающимися списками;
- реализацию альтернативных стилей программирования, таких как процедурный стиль или fluent.
- Унификация API драйверов.
Здесь надстройка предоставляет единый интерфейс для работы сразу с несколькими драйверами. Это позволяет, например, использовать один и тот же код для тестов на iOS и Android, как в популярной надстройке Appium.
Фреймворк
С другой стороны тестов находится фреймворк запуска. В рамках данной статьи я буду коротко называть его “фреймворк”.
Фреймворк — это программа для формирования, запуска и сбора результатов запуска набора тестов.
В задачи фреймворка входят:
Можно заметить, что эти функции не связаны с тестированием только мобильных приложений — их можно успешно применять и в тестировании десктоп- и веб-приложений. Дело в том, что фреймворк не должен обеспечивать взаимодействие тестов и приложения — он работает только с тестами, и тип приложения не имеет значения.
Если драйверы и надстройки находятся между тестами и приложением, то фреймворк находится над тестами, организуя их запуск. Поэтому важно не путать понятия “драйвер” и “фреймворк”. Конечно, в некоторых фреймворках есть собственные драйверы для работы с приложениями, но это вовсе не обязательное условие. Самые заметные фреймворки в мобильном тестировании — xUnit и Cucumber.
Комбайны
Наконец, ещё одна группа утилит, использующихся для автоматизации тестирования мобильных приложений, — это комбайны, объединяющие в себе и фреймворки, и драйверы (причём не только мобильные), и даже возможности разработки. Xamarin.UITest, Squish, Ranorex — все они поддерживают автоматизацию тестирования iOS-, Android-, веб-приложений, а два последних — ещё и десктоп-приложений.
Итак, инструменты мы классифицировали. Осталось определить самые популярные в каждой категории и сравнить их.
Опрос
Для выявления самых популярных и используемых утилит я провёл опросы на нескольких сайтах, сообществах и каналах для QA-инженеров, задав три простых вопроса. Количество вариантов ответа я не ограничивал, чтобы не пришлось выбирать между разными типами инструментов. Также была возможность добавить собственный вариант — так появился достаточно длинный “хвост” из различных утилит, не вписывающихся в классификацию. Результаты не претендуют на статистическую точность, но отлично иллюстрируют тренды в индустрии автоматизации тестирования мобильных приложений по состоянию на январь 2018 года.
Как видно из результатов, лидирующие позиции занимают утилиты на базе WebDriver: Appium и Selenium. Из фреймворков наиболее популярны JUnit и Cucumber, причём второй популярнее — это удивляет, ведь у них всё-таки разные “весовые категории”. Официальные драйверы популярнее неофициальных для любых платформ — видимо, из-за качественной поддержки и большего количества возможностей, чем у сторонних разработок.
Тройка самых используемых языков программирования выглядит так: Java, Python, Ruby (причём Java лидирует с большим отрывом). Попадание Ruby в тройку лидеров я связываю с популярностью Cucumber.
Наконец, распределение по платформам довольно ожидаемое — Android с серьёзным отрывом опережает iOS, дальше идёт Mobile Web. Удивили разве что ответы про десктоп-приложения для Windows в последнем опросе, но некоторые комбайны позволяют тестировать мобильные и десктопные приложения одновременно.
Разобравшись с популярностью инструментов, переходим к сравнению наиболее значимых. Для каждого типа сначала приведена сравнительная таблица возможностей инструментов, которые к нему относятся. Я постарался собрать самую актуальную и достоверную информацию о каждом инструменте, но мог что-то упустить. Так что если вдруг найдёте ошибку в описании, обязательно напишите об этом в комментариях.
Сравнение инструментов
Драйверы
В мобильном тестировании драйверов немного, и зачастую они разрабатываются теми же компаниями, что и операционные системы. Для Android есть два официальных драйвера: UIAutomator, который на сегодняшний день имеет версию 2.0, и Espresso. Оба они входят в Android Testing Support Library, разрабатываются компанией Google и хорошо документированы. Помимо них, существуют проекты Robotium и Selendroid, которые разрабатываются сторонними компаниями. Все четыре продукта так или иначе работают на Android Instrumentation Framework — базовом API, который Android предоставляет для взаимодействия с системой.
Сначала давайте рассмотрим драйверы от Google. Оба инструмента умеют работать с WebView и гибридными приложениями, оба поддерживают разработку на Java и Kotlin и работают как с эмуляторами, так и с реальными устройствами.
UIAutomator
UIAutomator поддерживает версии Android начиная с API level 18 (Android 4.3). Он не требует внедрения своего кода в проект, то есть может взаимодействовать с уже скомпилированными приложениями. Более того, при работе с UIAutomator можно использовать возможности системы Android полностью: например, включить геолокацию, вызвать системное приложение, повернуть устройство, нажать на кнопку Home или сделать скриншот. Поэтому этот инструмент часто используют для функционального end-to-end-тестирования, самостоятельно или с надстройками.
У UIAutomator нет собственного рекордера для тестов, но зато есть утилита UI Automator Viewer, которая позволяет получать данные об элементах запущенного на эмуляторе или реальном устройстве приложения и показывает локаторы этих элементов. Тут же отображается иерархическая структура всех элементов, что очень удобно для использования их в тестах.
Espresso
Espresso, в свою очередь, предназначен скорее для white-box-тестирования и создавался как инструмент для разработчиков. Он поддерживает более старые API начиная с API level 10 (Android 2.3.3), однако требует доступа к исходному коду для запуска. Соответственно, Espresso не может самостоятельно работать с другими приложениями и системой Android. Зато у этого инструмента есть рекордер, с помощью которого можно записывать простые сценарии и использовать их на начальном этапе автоматизации.
В целом, если нужно тестировать только приложение, без учёта его взаимодействия с системой, и есть желание и возможность работать с исходниками, лучше использовать Espresso. К тому же в нём реализованы полезные функции вроде автоматической синхронизации тестов с UI приложения, и можно не писать различные wait-команды.
Если же вам нужно протестировать приложение в связке с другими или с функциями системы, а доступ есть только к .apk, выбирайте UIAutomator.
Кстати, эти инструменты можно использовать и вместе, потому что они — части одной библиотеки. Даже в одном тесте можно сочетать команды обоих инструментов.
Selendroid и Robotium
И Selendroid, и Robotium были выпущены ещё до появления официальных драйверов и существуют до сих пор.
Robotium поддерживает версии Android API начиная с API level 8 и умеет работать с WebView начиная с API level 15. Selendroid же работает c ограниченным списком версий API — от 10 до 19. Оба инструмента могут обращаться только к одному приложению, не требуют доступа к исходному коду и поддерживают работу на эмуляторах и реальных устройствах. Для Robotium тесты нужно писать на Java, а Selendroid поддерживает протокол WebDriver, что даёт возможность использовать практически любой популярный язык программирования.
У Selendroid есть утилита Inspector, с помощью которой можно просматривать иерархию элементов и записывать простые record-and-playback-тесты. А Robotium предоставляет плагин Robotium Recorder для IntelliJ IDEA и Android Studio со схожим функционалом.
В целом эти инструменты развиваются гораздо менее активно, чем драйверы от Google, и их аудитория значительно у́же. Тем не менее из результатов опроса видно, что некоторые компании до сих пор их используют.
XCUITest
В iOS для взаимодействия с приложением долгое время использовался драйвер UIAutomation (что, помимо прочего, вызывало путаницу из-за схожести с названием драйвера Android), но начиная с iOS 10 Apple прекратила поддержку этого драйвера, и вместо него появился драйвер XCUITest из пакета XCTest.
Он поддерживает iOS начиная с версии 9.0, а тесты для него пишутся на языках Objective-C и Swift, как и сами приложения. Для тестирования приложения не нужен доступ к его коду, а начиная с Xcode 9 драйвер умеет тестировать несколько приложений, в том числе и системных, одновременно. “Из коробки” XCUITest позволяет запускать тесты только на симуляторах, однако при помощи некоторых сторонних утилит можно заставить его работать и с реальными устройствами.
XCUITest имеет свой рекордер, встроенный прямо в интерфейс Xсode. С его помощью можно записывать простые UI-тесты, а также находить элементы UI и их свойства.
Надстройки
Appium
Appium — наиболее известная сегодня надстройка. Она позволяет тестировать приложения практически вне зависимости от платформы, типа и версии системы. Конечно, такой подход имеет несколько значительных достоинств и недостатков.
Appium поддерживает множество драйверов, не только мобильные:
- iOS
- XCUITest
- (deprecated) UIAutomation
- Android
- (beta) Espresso
- UIAutomator 2.0
- (deprecated) UIAutomator
- (deprecated) Selendroid
- Windows Driver (для десктопных Windows-приложений)
- Mac Driver (для десктопных Mac-приложений)
Поддержка такого разнообразия драйверов реализуется довольно интересным образом: Appium использует версию интерфейса WebDriver, известную всем по Selenium WebDriver. И, помимо большого количества поддерживаемых платформ, у такого подхода есть и другие преимущества:
- возможность писать тесты на любом языке, который поддерживает WebDriver (а в этот список входят практически все популярные языки программирования). Более того, это позволяет “отвязать” тесты от использования “родных” для приложения языков. Наиболее актуально это для iOS, ведь тесты на XCUITest можно писать только в Xcode. С Appium же в данном случае можно использовать любой язык и любую удобную среду разработки;
- лёгкий переход к тестированию гибридных и веб-приложений: протокол WebDriver уже (почти) стал стандартом для автоматизации веба;
- использование любого тестового фреймворка — почти все они умеют так или иначе работать с протоколом WebDriver, а значит, у них не возникнет проблем с подключением к Appium;
- отсутствие необходимости добавлять что-то в код приложения — для каждой платформы используются драйверы, которым не нужен доступ к коду. Помимо удобства в развёртывании, это означает возможность тестировать именно тот билд приложения, который увидят пользователи, а не специальную тестовую сборку.
Нас в большей степени интересует поддержка мобильных приложений, поэтому остановимся подробнее на реализациях драйверов UIAutomator 2.0, Selendroid и XCUITest.
Самый простой из них — UIAutomator 2.0, с которым Appium взаимодействует напрямую, передавая ему необходимые команды. Он работает с версиями Android 4.2 и выше. Взаимодействие с более старыми версиями обеспечивает уже известный нам драйвер Selendroid. Для взаимодействия с XCUITest и обхода некоторых ограничений используется WebDriverAgent (WDA) от Facebook. WDA запускается в контексте симулятора или реального устройства и передаёт команды через API XCUITest.
Недостатки Appium вытекают из его достоинств:
Источник