Автоматизация
тестирования iOS и
Android приложений
Автоматизация тестирования - процесс
написания скриптов или программ,
выполняющих тесты.
Какие решает проблемы:
● экономия время
● возможность проверки работы
приложений на различных версиях
устройствах и ОС
● получение текущего состояния
приложения (CI)
Проблемы при автоматизации:
● Время на реализацию тестовых скриптов;
● Поддержка тестовых скриптов;
● Высокая стоимость.
Общие подходы при проектировании
автоматизированных тестов:
● Record and Play
● Screen Object
Record and Play
Для создания скрипта используется любой
инструмент, позволяющий сделать запись
действий пользователя в приложении с
генерацией кода.
Итог
Плюсы:
● Не надо писать код
● Скорость
● Можно рассмотреть как часть обучения
Минусы:
● Только простые приложения
● Сложно поддерживать
Пример скрипта
……..
UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0];
UIATarget.localTarget().frontMostApp().mainWindow().textFields()[7];
UIATarget.localTarget().frontMostApp().mainWindow().tabBar().buttons()[5].tap();
UIATarget.localTarget().frontMostApp().mainWindow().buttons()[3].tap();
……..
Screen Object
Screen Object - паттерн для организации
архитектуры тестов в виде взаимодействия
экранов приложения.
Переходы между экранами
Пример теста
public void testAddNote() throws Exception {
NotesListScreennoteListScreen = new NotesListScreen(solo);
assertTrue(noteListScreen.isCurrentActivityOpened());
AddNoteScreenaddNoteScreen =
noteListScreen.clickAddNote();
addNoteScreen.assertCurrentActivity();
addNoteScreen.typeNote(NOTE_NAME);
noteListScreen = addNoteScreen.goBack();
noteListScreen.assertCurrentActivity();
assertTrue(NOTE_NAME + " is not found",
noteListScreen.isNotePresent(NOTE_NAME));
}
Пример реализации
…………..
publicAddNoteScreenclickAddNote() {
getSolo().clickOnMenuItem(getSolo().getString(R.string.menu_insert));
returnnewAddNoteScreen(getSolo());
}
…………..
Итог
Плюсы:
● Простота в поддержке
● Читабельность тестов
● DSL
● Простота написания тестов
● Повторное использование кода
Минусы:
● ???
Инструменты
UIAutomation
UIAutomation - фреймворк от компании
Apple для тестирования UI iOS-приложений.
Достоинства
● Имеет внутренний рекордер
● Запуск через Instruments и Terminal
● Тестирование на симуляторах и реальных
устройствах
● Не требует изменения кода самого
приложения
● Поддержка всех нативных элементов
интерфейса
Недостатки UIAutomation
● Неудобная среда разработки сценариев
● Отсутствие поддержки систем контроля
версий
● Сложность в написании тестовых
сценариев
UIAutomation
Примеры тествого сценария
var target = UIATarget.localTarget();
var appWindow = target.frontMostApp().mainWindow();
var element = target;
appWindow.tabBar().buttons()["Unit Conversion"].tap();
UIALogger.logStart("Logging element tree …");
element.logElementTree();
UIALogger.logPass();
Просмотр иерархии
Просмотр иерархии
Полезные методы
● setDeviceOrientation()
● onAlert()
● captureScreenWithName()
● pushTimeout(), popTimeout()
Tuneup JS
Tuneup JS - библиотека, с набором утилит
для написания тестовых скриптов,
используя UIAutomation.
Пример
test("Login screen", function(target, app) {
var window = app.mainWindow();
// tap the left button in the navigation bar
window.navigationBars()[0].leftButton().tap();
// now assert that the app has navigated into a sub-view controller
assertEquals("Settings", window.navigationBars()[0].value());
});
Запуск из терминала
instruments -w 839D0CAC-9F8C-45BE-8CD0-1BFAD3A2F9A0 -t
/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/A
utomationInstrument.xrplugin/Contents/Resources/Automation.tracetemplate
/Users/user/Library/Developer/Xcode/DerivedData/MyApp-
dakkwuujteevxfevfyirblyuvgfp/Build/Products/Debug-iphonesimulator/MyApp.app -e
UIASCRIPT /Users/user/Downloads/MyAppAT/Tests.js
Ссылки
● https://developer.apple.com/library/ios/documentation/DeveloperTools/Con
ceptual/InstrumentsUserGuide/UsingtheAutomationInstrument/UsingtheAu
tomationInstrument.html
● http://www.tuneupjs.org/
Appium
Appium - представляет собой open source-
фреймворк, который помогает
автоматизировать процесс тестирования
мобильных приложений.
Достоинства
● Поддержка Android и iOS устройств
● Запуск в симмуляторе и реальном
девайсе
● Множество ЯП (Java, Ruby, Python, C#,
PHP, Javascript)
● Наличие собственного инспектора
● Поддержка интеграции с различными CI
● Navite Apps, Hybrid Apps, Web Apps
Недостатки
● Инспектор не видит все элементы
● Нельзя переключаться между сессиями
● Нельзя запустить несколько симуляторов
● xpath бывает неверным
Установка Appium
> brew install node # get node.js
> npm install -g appium # get appium
> npm install wd # get appium client
> appium & # start appium
> node your-appium-test.js
Appium GUI
Appium Inspector
Как Appium работает?
Настройка
Пример
Ссылки
● http://appium.io/
● http://www.seleniumhq.org/
Android Testing Frameworks
UIAutomator Espresso Robotium
Скриптовый
язык
Java Java Java
API Level 18+ (4.3) 8+ (2.2) 8+ (2.2)
Доп.
инструменты
UIAutomator
Viewer
Robotium
Recorder
UIAutomator
UIAutomator
● часть Testing Support Library;
● предоставлят набор API для
тестирования UI Android приложения;
● хорошо подходит если во время теста
требуется открыть стороннее/системное
приложение;
UIAutomator
● API для получения доступа к состоянию
устройства;
● API для работы с UI компонентами;
● UIAutomatorViewer;
UIAutomator. API для получения
доступа к состоянию устройства
● эмуляция нажатия системных кнопок
(Home, Menu etc);
● изменение ориентации устройства;
● получение скриншота с устройства;
UIAutomator. API для работы с UI
компонентами
● получение UI элементов на устройстве;
● поддержка работы со списками;
● поиск и фильтрация UI элементов;
UIAutomator. UIAutomatorViewer
Выбранный
элемент
Соотв.
элемент в
дереве
Детали
элемента
Espresso
● также как и UIAutomator является частью
Testing Support Library;
● использует синхронизацию с Main Thread;
Espresso. API
● поиск UI элемента - onView(ViewMatcher);
● выполнение действия -
perform(ViewAction);
● проверка состояния -
check(ViewAssertion);
Espresso. Cheat Sheet
Robotium
● open-source фреймворк для UI
тестирования;
● первая версия была выпущена в 2010
году, но API постоянно обновляется;
Robotium. API
Основной класс - Solo.
● предоставляет методы для доступа к UI
элементам;
● эмуляция нажатия системных кнопок
(Home, Menu etc);
● изменение ориентации устройства;
● получение скриншота с устройства;
Robotium. Robotium Recorder
● позволяет записывать
тестовые сценарии;
● интегрирован с Android
Studio;
● автоматически получает id
ресурсов;
Спасибо за внимание!

Автоматизация тестирования iOS и Android приложений

Editor's Notes