Страницы

Поиск по вопросам

четверг, 11 октября 2018 г.

UI/Acceptance/Integration тестирование iOS-приложений

Здравствуйте, Я хочу узнать о том, чем на практике различаются между существующие решения для тестирования мобильных приложений. Как показывает заголовок этого топика, я имею в виду не unit-тестирование, а именно black box тестирование работы всего приложения целиком: этот вид тестирования обычно называется Acceptance или Integration Testing или еще иногда его называют просто "тестирование UI". Вот существующие решения, о которых я знаю: Apple UI Automation Frank / Calabash KIF ios-driver Appium (если интересно, я собрал все эти библиотеки здесь). Буду признателен, если кто-то поделится опытом использования любого из этих решений применительно к не-малым проектам на iOS. Попробую перечислить пункты, по которым, как я предполагаю, можно сравнить эти решения: Язык, на котором пишутся сценарии UI Automation использует Javascript (странно!). Frank/Calabash основаны на Ruby/Cucumber (ОК для тех, у кого есть Ruby/Rails бэкграунд). KIF - Objective-C (Хорошо, ибо нативно!). ios-driver - Java (WTF?). Appium (сразу несколько, но в первую очередь Ruby и Javascript). Удобство интеграции UI Automation - часть Apple Instruments, поэтому вроде как все должно быть хорошо. Frank/Calabash - встраиваются через кастомизацию основного таргета приложения, с этим вроде можно помириться. В основной таргет встраивается HTTP-сервер, который слушает инструкции от Cucumber и заставляет приложение им подчиняться (нажатия кнопок, заполнения текстовых полей, свайпы итд). KIF - через конфигурацию тестового таргета. ОК. ios-driver, Appium - ? Использование VCR Tools VCR Tools, например VCRURLConnection, позволяют записывать все сетевое взаимодействие при реальном обходе сценария вручную, а потом проигрывать записанное с JSON-кассеты при прогоне тестового сценария. Мне представляется, что, например, UI Automation будет не очень-то просто подружить с такой практикой, когда используется VCR. Буду рад услышать о таком опыте использования VCR. Хорошая поддержка доступа к view-иерархии и хорошая поддержка основных жестов (swipes и др.) Наверное, лучше всего это должно быть у UI Automation, и, наверное, и в остальных решения все это должно быть более-менее в наличии. Опять же буду рад, если кто-то опишет ограничения, с которыми пришлось столкнуться в работе с тем или иным решением. Кроссплатформенность UI Automation (хм, только Apple) Frank (вроде только iOS), Calabash (iOS, Android и скорее всего Windows, так как автор Calabash работает в Xamarin) KIF (только Objective-C/iOS) ios-driver (вроде только iOS) Appium (iOS, Android) Будет интересно, если кто-то поделиться опытом разработки сценариев сразу под две или более платформ! Настройка CI-серверов Здесь от себя ничего не напишу, так как еще ни разу этим не занимался, но подозреваю, что по этому пункту тоже могут быть значительные различия (легкость, удобство). Подчеркну, что буду признателен за развёрнутые ответы. Интересует реальный опыт использования этих решений: удобство, проблемы, достоинства/недостатки - словом, всё, что сможет мне и другим потенциальным читателям этого топика определиться с тем, какое решение предпочтительнее использовать. P.S. Я сам склоняюсь к KIF или Calabash. P.S. #2 По слухам известно, что Яндекс использует в некоторых iOS-проектах Calabash и CI. ОБНОВЛЕНО ПОЗЖЕ Я принимаю замечательный ответ Дмитрия, как верный, и это не означает, что тема закрыта: если Вам есть что рассказать, можете поделиться опытом, как это сделал Дмитрий, - прошу, обязательно пишите ваши ответы, так как эта тема интересна мне и, наверное, всем тем из из нас, кто связан с iOS-, да и вообще мобильной разработкой :)


Ответ

Привет. Делал сравнение в конце прошлого года: http://www.slideshare.net/dmitrycheremushkin/appium-sqa-days-15-2014/8 Но для меня были важны Java и поддержка WebDriver API, приоритетна кроссплатформенность. Поскольку это была интеграция мобильного решения в существующий фреймворк. На текущий момент есть опыт использования Appium и Calabash. Внесу ясность по нескольким вопросам: Язык, на котором пишутся сценарии; Удобство интеграции ios-driver - Java (WTF?). Appium (сразу несколько, но в первую очередь Ruby и Javascript). ios-driver и Appium преобразуют WebDriver API запросы (от тестов) в команды UI Automation: How Appium works How ios-driver works Серверная часть в них — это Selenium-сервер с поддержкой некоторых дополнительных команд. Отсюда поддержка такого количества языков для написания тестов. Хорошая поддержка доступа к view-иерархии и хорошая поддержка основных жестов (swipes и др.) Здесь могу сказать только про Appium — у них всё, что нужно поддерживается (Appium's gestures), при этом они достаточно часто вносят улучшения и выполняют запросы пользователей. Из примеров, недавно был добавлен direction в scrollTo. У Appium есть GUI-инспектор элементов, сейчас должен работать достаточно стабильно. Через него же можно записывать сценарий — кликаешь по элементам, генерится код. Кроссплатформенность Calabash (iOS, Android и скорее всего Windows, так как автор Calabash работает в Xamarin) Calabash — только Android и iOS, Windows Phone не поддерживается Appium (iOS, Android) Appium — iOS, Android и FirefoxOS Настройка CI-серверов Здесь важно понимать масштаб. :) Простой случай — когда нужно проверить одно приложение, пусть на нескольких версиях ОС, но когда нет сильных временных ограничений. И другое дело — если нужно делать распределённый запуск, а то и полноценный мобильный CI, для нескольких приложений с несколькими платформами, версиями, устройствами. В первом случае — по сути подойдёт любое из перечисленных решений. Нужен лишь CI, умеющий запускать shell-скрипт и в случае с iOS — работающий на Mac OS, либо включающий агенты на Mac OS. Во втором случае — либо распределять запуск с помощью нативных CI-агентов либо включать мобильные ноды в Selenium Grid (поддерживается ios-driver и Appium) либо написать свою реализацию, если позволяет инструментарий — зависит прежде всего от того, как он работает с устройствами/эмуляторами "внутри" и позволяет ли их инициализировать (знаю, что c Calabash так можно сделать) 2 и 3 — можно распределять не по сьютам, а по отдельным тестам, это преимущество + меньше нагрузки на CI Ещё мысли Не знаю, как с UI Automation, но с использованием других средств можно построить полноценный фреймворк — с аналогом Page Objects, BDD, репортингом и пр. Appium и ios-driver особенно хороши, если уже имеются веб-тесты и требуется их погонять в мобильных браузерах. Из них я для себя выбрал Appium, т.к. лучше поддержка, развивается интенсивней и кроссплатформенен. Насколько я знаю, в Яндексе в основном используют Appium (источник: http://www.slideshare.net/yandex/ss-28743339)

Комментариев нет:

Отправить комментарий