Автоматизация тестирования ios и android приложений
TRANSCRIPT
Автоматизация тестирования 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/AutomationInstrument.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/UsingtheAut
omationInstrument.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 работает?
Настройка
Пример
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 ресурсов;
Спасибо за внимание!