SlideShare ist ein Scribd-Unternehmen logo
1 von 44
End-2-End UI автоматизация
в мобильном приложении.
Наша реализация.
‣ Работаю в Альфа-Лаборатории
‣ Занимаюсь автоматизацией
тестирования мобильных
приложений
Обо мне
Инструменты для автоматизации тестирования
Android iOS Cross-platform
Robotium UI Recorder Appium
Espresso Keep it Functional Calabash
Инструменты для автоматизации тестирования
Android iOS Cross-platform
Robotium UI Recorder Appium
Espresso Keep it Functional Calabash
Какие проблемы мы решали?
‣ Высокий порог входа для
функциональных тестировщиков
‣ Поддержка двух платформ: iOS,
Android внутри одного проекта
‣ Универсальность,
переиспользование компонент
внутри проекта
‣ Параллельный запуск UI - тестов
на CI
‣ Масштабирование на другие
мобильные проекты
Понижаем порог входа!
Meta:
@regressCycle
@smokeCycle
Narrative:
TESTAM-819 Успешная оплата шаблона Мобильная связь
Lifecycle:
Before:
Given вернуться на "Главный экран"
Scenario: Успешная оплата шаблона Мобильная связь
Given приложение запущено
Then загружена страница "Главный экран"
When скролл внутри "Основной список" до "Платежи и переводы"
When выполнено нажатие на "Шаблоны"
Then загружена страница "Платежи и переводы"
…
Then загружена страница "Главный экран"
Examples:
|phoneNumber |amount|
|+7 916 666-66-66|10.00 |
Пример сценария, написанного с использованием JBehave
Элементы на странице
‣ resourceId / accessibilityidentifier (Android / iOS)
‣ text
‣ content-desc (Android)
‣ XPath
Пример описания страницы
Как не завалить весь прогон из-за одного теста?
Scenario: Успешная оплата шаблона Мобильная связь
Given приложение запущено
Then загружена страница "Главный экран"
When скролл внутри "Основной список" до "Платежи и переводы"
When выполнено нажатие на "Шаблоны"
…
Then загружена страница "Главный экран"
Точка входа
Scenario: Успешная оплата шаблона Мобильная связь
Given приложение запущено
Then загружена страница "Главный экран"
When скролл внутри "Основной список" до "Платежи и переводы"
When выполнено нажатие на "Шаблоны"
…
Then загружена страница "Главный экран"
Шаг возврата на точку входа
Lifecycle:
Before:
Given вернуться на "Главный экран"
Scenario: Успешная оплата шаблона Мобильная связь
Given приложение запущено
Meta Info
Meta:
@regressCycle
@smokeCycle
Meta Matcher Meta Property Matched
+theme smoke testing -skip @theme smoke testing true
+theme smoke testing -skip @skip false
+theme smoke testing @theme smoke testing true
+theme smoke testing @theme testing false
-skip @theme testing true
-skip @skip false
+theme smoke testing -theme UI @theme smoke testing true
+theme smoke testing -theme UI @theme UI false
Test Cycle
Поддерживаем две
платформы внутри
одного проекта
‣ Не нужно поддерживать
два проекта
‣ Не нужно иметь экспертизу сразу
в нескольких языках
программирования
‣ Используется один инструмент
для автоматизации
‣ Переиспользуем низкоуровневую
логику
‣ Переиспользуем тестовые
данные
Плюсы
‣ Не все компоненты удается
переиспользовать
‣ Различное поведение iOS и Android
драйвера
‣ Релиз Appium может что-то сломать
для Anroid или iOS и наоборот
Минусы
Пример шага для двух платформ
@Step
@When("выполнено нажатие на "$button"")
public void buttonClick(@Named("$button") String button) {
getWebElementByName(button).click();
}
protected WebElement getWebElementByName(String elementName) {
IElement element = getCurrentPage().getElementByName(elementName);
return finder.findWebElement(element);
}
Пример шага только для Android
@Step
@When("выполнено нажатие на Назад")
public void systemBackClick() {
((AndroidDriver) driver).pressKeyCode(AndroidKeyCode.BACK);
}
Cтруктура проекта am-ui-tests 1.0
Запускаемся
параллельно!
Инструменты для параллельного запуска
+
Appium Node для Nexus 5X
{
"capabilities": [
{
"browserName": "",
"udid": "00d1ce8f827cceab",
"deviceName": "Nexus5X",
"version": "6.0.1",
"maxInstances": 5,
"platform": "ANDROID"
}
],
"configuration": {
"cleanUpCycle": 2000,
"timeout": 30000,
"hub": "http://localhost:5566/grid/register/",
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url": "http://127.0.0.1:4719/wd/hub",
"remoteHost": "http://127.0.0.1:4719",
"host": "localhost",
"port": 4719,
"maxSession": 5,
"register": true,
"registerCycle": 5000,
"hubPort": 5566,
"hubHost": "localhost",
"role": "node"
}
}
Web-интерфейс Selenium Server
Запуск проекта
./gradlew --info clean test --tests "*AndroidStories*" -Pplatform=android6
-Puser=5773935 -PtestType=smokeNewReg -PbuildVersion=8.5.0.3,development
./gradlew --info clean test --tests "*IOSStories*" -Pplatform=ios10 -Puser=1907306
-PtestType=smokeNewReg -PbuildVersion=8.5_7727
iOS
Android
Запуск job на jenkins
Отчет о тестировании
Отчет о тестировании
Масштабируемся!
‣ Упаковываем всю низкоуровневую
логику в библиотеку
‣ Упаковываем универсальные шаги
‣ Снижаем связанность проекта,
внедряем Spring
colibri-ui
Cтруктура проекта am-ui-tests 2.0
Сравнение am-ui-test 1.0 / am-ui-tests 2.0
Внедряем Spring, формируем Uber-шаги
@Autowired
private PagesSteps pagesSteps;
@Autowired
@Qualifier("android")
private ISystemButtonsClick systemButtonsClick;
Внедряем Spring, формируем Uber-шаги
@Step
@Given("вернуться на "$screenName"")
public void goToScreen(@org.jbehave.core.annotations.Named("$screenName") String screenName) {
goToMain(screenName);
}
protected void returnCycle(String screenName) {
boolean up = true;
int countStepsToFailure = 7;
do {
try {
//обрабатываем аллерт
finder.findWebElement(By.xpath(getAlertLocator())).click();
} catch (Exception ignored) {
}
try {
//проверяем что загружена главная
pagesSteps.pageLoaded(screenName);
up = false;
} catch (Exception e) {
try {
//если не загружена, пытаемся нажать кнопку "Назад"
getISystemButtonsClickBean().systemBackClick();
} catch (Exception ignored) {
}
}
countStepsToFailure--;
} while (up && countStepsToFailure > 0);
}
Внедряем Spring, формируем Uber-шаги
@Step
@Given("вернуться на "$screenName"")
public void goToScreen(@org.jbehave.core.annotations.Named("$screenName") String screenName) {
goToMain(screenName);
}
protected void returnCycle(String screenName) {
boolean up = true;
int countStepsToFailure = 7;
do {
try {
//обрабатываем аллерт
finder.findWebElement(By.xpath(getAlertLocator())).click();
} catch (Exception ignored) {
}
try {
//проверяем что загружена главная
pagesSteps.pageLoaded(screenName);
up = false;
} catch (Exception e) {
try {
//если не загружена, пытаемся нажать кнопку "Назад"
getISystemButtonsClickBean().systemBackClick();
} catch (Exception ignored) {
}
}
countStepsToFailure--;
} while (up && countStepsToFailure > 0);
}
Проблемы Appium:-(
Проблемы Appium
‣ Ждем обновлений Appium после выхода новых платформ
‣ XCUIElementType на версии iOS 9.3
‣ Собираем различные дефекты appium (1.6.1 долгий поиск элементов на iOS и т.д.)
‣ Проблемы в работе с web-view
‣ Проблема с доступами на iOS
‣ …
Результат!
Что мы получили!
‣ Универсальную, масштабируемую библиотеку
‣ Два мобильных проекта уже запускают e2e ui-автотесты с использованием
нашего фреймфорка
‣ Функциональные тестировщики избавляются от части ручного тестирования
‣ Регрессионное тестирование на обратную совместимость с backend
прогоняется автоматизированно
open-source
https://github.com/alfa-laboratory/colibri-ui
colibri-ui уже стала open-source! Все на GitHub!
Хватит тестировать руками:-)
https://github.com/alfa-laboratory/colibri-ui-template
mail: pvivanov@alfabank.ru
telegram: @Pash_Ivanov
facebook: pavel.ivanov.92560
Контакты
Павел Иванов
End-2-End UI автоматизация в мобильном приложении. Наша реализация

Weitere ähnliche Inhalte

Was ist angesagt?

Концепция QaAPI: взгляд на тестирование с другой стороны баррикад
Концепция QaAPI: взгляд на тестирование с другой стороны баррикадКонцепция QaAPI: взгляд на тестирование с другой стороны баррикад
Концепция QaAPI: взгляд на тестирование с другой стороны баррикадSQALab
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demandSQALab
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел СташевскийDevDay
 
GUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioGUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioSQALab
 
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестированияCodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестированияCodeFest
 
Winium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsWinium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsSQALab
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgIT61
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовSQALab
 
Автоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегийАвтоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегийSQALab
 
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...Ontico
 
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...Badoo Development
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIPavel Asanov
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаSQALab
 
"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik HimiranovFwdays
 
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникПодводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникSQALab
 
Оценка качества автотестов
Оценка качества автотестовОценка качества автотестов
Оценка качества автотестовSQALab
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQAFest
 
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщикаQA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщикаQAFest
 
Apache JMeter vs LoadRunner: на заре справедливости, сравнение инструментов н...
Apache JMeter vs LoadRunner: на заре справедливости, сравнение инструментов н...Apache JMeter vs LoadRunner: на заре справедливости, сравнение инструментов н...
Apache JMeter vs LoadRunner: на заре справедливости, сравнение инструментов н...SQALab
 

Was ist angesagt? (20)

Концепция QaAPI: взгляд на тестирование с другой стороны баррикад
Концепция QaAPI: взгляд на тестирование с другой стороны баррикадКонцепция QaAPI: взгляд на тестирование с другой стороны баррикад
Концепция QaAPI: взгляд на тестирование с другой стороны баррикад
 
Selenium grid on-demand
Selenium grid on-demandSelenium grid on-demand
Selenium grid on-demand
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский
 
GUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test StudioGUI-автоматизация в Telerik Test Studio
GUI-автоматизация в Telerik Test Studio
 
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестированияCodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
 
Automation testing desktop applications
Automation testing desktop applicationsAutomation testing desktop applications
Automation testing desktop applications
 
Winium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsWinium — это как Selenium, только под Windows
Winium — это как Selenium, только под Windows
 
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgДело тестера боится: как в опытных руках могут заиграть Java и TestNg
Дело тестера боится: как в опытных руках могут заиграть Java и TestNg
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
 
Автоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегийАвтоматизация тестирования ролей и привилегий
Автоматизация тестирования ролей и привилегий
 
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
Автоматизация тестирования в iOS-проекте на примере ICQ / Д.Куркин, М.Манаев ...
 
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
QaAPI. Взгляд на тестирование с другой стороны баррикад. Доклад Дмитрия Марущ...
 
Автоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST APIАвтоматизация функционального тестирования REST API
Автоматизация функционального тестирования REST API
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov
 
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в ТитаникПодводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
Подводная часть айсберга: что делать, чтобы автотесты не превратились в Титаник
 
Оценка качества автотестов
Оценка качества автотестовОценка качества автотестов
Оценка качества автотестов
 
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в DevopsQA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
QA Fes 2016. Анастасия Асеева. Роль тестирования в Devops
 
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщикаQA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
QA Fest 2016. Александр Неделяев. Браузерные помощники тестировщика
 
Apache JMeter vs LoadRunner: на заре справедливости, сравнение инструментов н...
Apache JMeter vs LoadRunner: на заре справедливости, сравнение инструментов н...Apache JMeter vs LoadRunner: на заре справедливости, сравнение инструментов н...
Apache JMeter vs LoadRunner: на заре справедливости, сравнение инструментов н...
 

Andere mochten auch

Testing is magic!
Testing is magic!Testing is magic!
Testing is magic!SQALab
 
Соль мобильного тестирования
Соль мобильного тестированияСоль мобильного тестирования
Соль мобильного тестированияSQALab
 
Ядро автоматизации под микро-сервисную архитектуру
Ядро автоматизации под микро-сервисную архитектуруЯдро автоматизации под микро-сервисную архитектуру
Ядро автоматизации под микро-сервисную архитектуруSQALab
 
Супер быстрая автоматизация тестирования на iOS
Супер быстрая автоматизация тестирования на iOSСупер быстрая автоматизация тестирования на iOS
Супер быстрая автоматизация тестирования на iOSSQALab
 
Автоматизация тестирования приёмников цифрового телевидения
Автоматизация тестирования приёмников цифрового телевиденияАвтоматизация тестирования приёмников цифрового телевидения
Автоматизация тестирования приёмников цифрового телевиденияSQALab
 
Скандалы, расследования, тестирование
Скандалы, расследования, тестированиеСкандалы, расследования, тестирование
Скандалы, расследования, тестированиеSQALab
 
Использование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложенийИспользование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложенийSQALab
 
Как мы добавляли UX-исследования в мобильные приложения Aviasales и что из эт...
Как мы добавляли UX-исследования в мобильные приложения Aviasales и что из эт...Как мы добавляли UX-исследования в мобильные приложения Aviasales и что из эт...
Как мы добавляли UX-исследования в мобильные приложения Aviasales и что из эт...SQALab
 
50 оттенков тестирования
50 оттенков тестирования50 оттенков тестирования
50 оттенков тестированияSQALab
 

Andere mochten auch (9)

Testing is magic!
Testing is magic!Testing is magic!
Testing is magic!
 
Соль мобильного тестирования
Соль мобильного тестированияСоль мобильного тестирования
Соль мобильного тестирования
 
Ядро автоматизации под микро-сервисную архитектуру
Ядро автоматизации под микро-сервисную архитектуруЯдро автоматизации под микро-сервисную архитектуру
Ядро автоматизации под микро-сервисную архитектуру
 
Супер быстрая автоматизация тестирования на iOS
Супер быстрая автоматизация тестирования на iOSСупер быстрая автоматизация тестирования на iOS
Супер быстрая автоматизация тестирования на iOS
 
Автоматизация тестирования приёмников цифрового телевидения
Автоматизация тестирования приёмников цифрового телевиденияАвтоматизация тестирования приёмников цифрового телевидения
Автоматизация тестирования приёмников цифрового телевидения
 
Скандалы, расследования, тестирование
Скандалы, расследования, тестированиеСкандалы, расследования, тестирование
Скандалы, расследования, тестирование
 
Использование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложенийИспользование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложений
 
Как мы добавляли UX-исследования в мобильные приложения Aviasales и что из эт...
Как мы добавляли UX-исследования в мобильные приложения Aviasales и что из эт...Как мы добавляли UX-исследования в мобильные приложения Aviasales и что из эт...
Как мы добавляли UX-исследования в мобильные приложения Aviasales и что из эт...
 
50 оттенков тестирования
50 оттенков тестирования50 оттенков тестирования
50 оттенков тестирования
 

Ähnlich wie End-2-End UI автоматизация в мобильном приложении. Наша реализация

Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
Appium для народа
Appium для народаAppium для народа
Appium для народаSQALab
 
Автоматизация тестирования iOS и Android приложений
Автоматизация тестирования iOS и Android приложенийАвтоматизация тестирования iOS и Android приложений
Автоматизация тестирования iOS и Android приложенийAndrei Pugachev
 
Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Эльвина Сакаева
 
Mobile automation with Appium
Mobile automation with AppiumMobile automation with Appium
Mobile automation with AppiumOksanaBisyuk
 
Автоматизация тестирования iOS приложений: от идеи к готовому решению
Автоматизация тестирования iOS приложений: от идеи к готовому решениюАвтоматизация тестирования iOS приложений: от идеи к готовому решению
Автоматизация тестирования iOS приложений: от идеи к готовому решениюSQALab
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеГлеб Тарасов
 
Appium confet qa
Appium confet qaAppium confet qa
Appium confet qaISsoft
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 
PhoneGap + Sencha
PhoneGap + SenchaPhoneGap + Sencha
PhoneGap + Senchaobservleer
 
Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...
Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...
Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...solit
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.Igor Shkulipa
 
Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Eugene Zharkov
 
Тестирование мобильных приложений
Тестирование мобильных приложенийТестирование мобильных приложений
Тестирование мобильных приложенийAlexander Khozya
 
DevCon 2016 - Xamarin
DevCon 2016 - XamarinDevCon 2016 - Xamarin
DevCon 2016 - XamarinAnton Shunkov
 
Java осень 2012 лекция 5
Java осень 2012 лекция 5Java осень 2012 лекция 5
Java осень 2012 лекция 5Technopark
 
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...JSFestUA
 
Автоматизированное тестирование UI в мобильных OC
Автоматизированное тестирование UI в мобильных OCАвтоматизированное тестирование UI в мобильных OC
Автоматизированное тестирование UI в мобильных OCIT61
 

Ähnlich wie End-2-End UI автоматизация в мобильном приложении. Наша реализация (20)

Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
Appium для народа
Appium для народаAppium для народа
Appium для народа
 
Автоматизация тестирования iOS и Android приложений
Автоматизация тестирования iOS и Android приложенийАвтоматизация тестирования iOS и Android приложений
Автоматизация тестирования iOS и Android приложений
 
Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)
 
Mobile automation with Appium
Mobile automation with AppiumMobile automation with Appium
Mobile automation with Appium
 
Автоматизация тестирования iOS приложений: от идеи к готовому решению
Автоматизация тестирования iOS приложений: от идеи к готовому решениюАвтоматизация тестирования iOS приложений: от идеи к готовому решению
Автоматизация тестирования iOS приложений: от идеи к готовому решению
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
 
Appium confet qa
Appium confet qaAppium confet qa
Appium confet qa
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
PhoneGap + Sencha
PhoneGap + SenchaPhoneGap + Sencha
PhoneGap + Sencha
 
Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...
Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...
Solit 2014, Appium. Тестируем гибридные мобильные прирложения в стиле webdriv...
 
Load testing with Tsung
Load testing with TsungLoad testing with Tsung
Load testing with Tsung
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?Silverlight 4, есть ли жизнь на десктопе?
Silverlight 4, есть ли жизнь на десктопе?
 
Тестирование мобильных приложений
Тестирование мобильных приложенийТестирование мобильных приложений
Тестирование мобильных приложений
 
DevCon 2016 - Xamarin
DevCon 2016 - XamarinDevCon 2016 - Xamarin
DevCon 2016 - Xamarin
 
Java осень 2012 лекция 5
Java осень 2012 лекция 5Java осень 2012 лекция 5
Java осень 2012 лекция 5
 
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
JS Fest 2018. Лилия Карпенко. Особенности создания IOS / Android Mobile Apps ...
 
Автоматизированное тестирование UI в мобильных OC
Автоматизированное тестирование UI в мобильных OCАвтоматизированное тестирование UI в мобильных OC
Автоматизированное тестирование UI в мобильных OC
 
Лекция Android
Лекция AndroidЛекция Android
Лекция Android
 

Mehr von SQALab

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировкуSQALab
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаSQALab
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиSQALab
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияSQALab
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...SQALab
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testingSQALab
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженSQALab
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииSQALab
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовSQALab
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовSQALab
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsSQALab
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеSQALab
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииSQALab
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестированиеSQALab
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"SQALab
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовSQALab
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных системSQALab
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросSQALab
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...SQALab
 

Mehr von SQALab (20)

Готовим стажировку
Готовим стажировкуГотовим стажировку
Готовим стажировку
 
Куда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщикаКуда приводят мечты? или Искусство развития тестировщика
Куда приводят мечты? или Искусство развития тестировщика
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
 
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программированияАвтоматизация 0.0: 0 - бюджет, 0 - опыт программирования
Автоматизация 0.0: 0 - бюджет, 0 - опыт программирования
 
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
Нагрузочное тестирование нестандартных протоколов с использованием Citrix и J...
 
Continuous performance testing
Continuous performance testingContinuous performance testing
Continuous performance testing
 
Конфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нуженКонфиги вместо костылей. Pytestconfig и зачем он нужен
Конфиги вместо костылей. Pytestconfig и зачем он нужен
 
Команда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихииКоманда чемпионов в ИТ стихии
Команда чемпионов в ИТ стихии
 
API. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советовAPI. Серебряная пуля в магазине советов
API. Серебряная пуля в магазине советов
 
Добиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестовДобиваемся эффективности каждого из 9000+ UI-тестов
Добиваемся эффективности каждого из 9000+ UI-тестов
 
Делаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIsДелаем автоматизацию проектных KPIs
Делаем автоматизацию проектных KPIs
 
Вредные привычки в тест-менеджменте
Вредные привычки в тест-менеджментеВредные привычки в тест-менеджменте
Вредные привычки в тест-менеджменте
 
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизацииМощь переполняет с JDI 2.0 - новая эра UI автоматизации
Мощь переполняет с JDI 2.0 - новая эра UI автоматизации
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Стили лидерства и тестирование
Стили лидерства и тестированиеСтили лидерства и тестирование
Стили лидерства и тестирование
 
"Давайте не будем про качество"
"Давайте не будем про качество""Давайте не будем про качество"
"Давайте не будем про качество"
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектов
 
Тестирование геолокационных систем
Тестирование геолокационных системТестирование геолокационных систем
Тестирование геолокационных систем
 
Лидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопросЛидер или босс? Вот в чем вопрос
Лидер или босс? Вот в чем вопрос
 
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
 

End-2-End UI автоматизация в мобильном приложении. Наша реализация

  • 1. End-2-End UI автоматизация в мобильном приложении. Наша реализация.
  • 2. ‣ Работаю в Альфа-Лаборатории ‣ Занимаюсь автоматизацией тестирования мобильных приложений Обо мне
  • 3.
  • 4. Инструменты для автоматизации тестирования Android iOS Cross-platform Robotium UI Recorder Appium Espresso Keep it Functional Calabash
  • 5. Инструменты для автоматизации тестирования Android iOS Cross-platform Robotium UI Recorder Appium Espresso Keep it Functional Calabash
  • 6. Какие проблемы мы решали? ‣ Высокий порог входа для функциональных тестировщиков ‣ Поддержка двух платформ: iOS, Android внутри одного проекта ‣ Универсальность, переиспользование компонент внутри проекта ‣ Параллельный запуск UI - тестов на CI ‣ Масштабирование на другие мобильные проекты
  • 8. Meta: @regressCycle @smokeCycle Narrative: TESTAM-819 Успешная оплата шаблона Мобильная связь Lifecycle: Before: Given вернуться на "Главный экран" Scenario: Успешная оплата шаблона Мобильная связь Given приложение запущено Then загружена страница "Главный экран" When скролл внутри "Основной список" до "Платежи и переводы" When выполнено нажатие на "Шаблоны" Then загружена страница "Платежи и переводы" … Then загружена страница "Главный экран" Examples: |phoneNumber |amount| |+7 916 666-66-66|10.00 | Пример сценария, написанного с использованием JBehave
  • 9. Элементы на странице ‣ resourceId / accessibilityidentifier (Android / iOS) ‣ text ‣ content-desc (Android) ‣ XPath
  • 11. Как не завалить весь прогон из-за одного теста? Scenario: Успешная оплата шаблона Мобильная связь Given приложение запущено Then загружена страница "Главный экран" When скролл внутри "Основной список" до "Платежи и переводы" When выполнено нажатие на "Шаблоны" … Then загружена страница "Главный экран"
  • 12. Точка входа Scenario: Успешная оплата шаблона Мобильная связь Given приложение запущено Then загружена страница "Главный экран" When скролл внутри "Основной список" до "Платежи и переводы" When выполнено нажатие на "Шаблоны" … Then загружена страница "Главный экран"
  • 13. Шаг возврата на точку входа Lifecycle: Before: Given вернуться на "Главный экран" Scenario: Успешная оплата шаблона Мобильная связь Given приложение запущено
  • 14. Meta Info Meta: @regressCycle @smokeCycle Meta Matcher Meta Property Matched +theme smoke testing -skip @theme smoke testing true +theme smoke testing -skip @skip false +theme smoke testing @theme smoke testing true +theme smoke testing @theme testing false -skip @theme testing true -skip @skip false +theme smoke testing -theme UI @theme smoke testing true +theme smoke testing -theme UI @theme UI false
  • 17. ‣ Не нужно поддерживать два проекта ‣ Не нужно иметь экспертизу сразу в нескольких языках программирования ‣ Используется один инструмент для автоматизации ‣ Переиспользуем низкоуровневую логику ‣ Переиспользуем тестовые данные Плюсы
  • 18. ‣ Не все компоненты удается переиспользовать ‣ Различное поведение iOS и Android драйвера ‣ Релиз Appium может что-то сломать для Anroid или iOS и наоборот Минусы
  • 19. Пример шага для двух платформ @Step @When("выполнено нажатие на "$button"") public void buttonClick(@Named("$button") String button) { getWebElementByName(button).click(); } protected WebElement getWebElementByName(String elementName) { IElement element = getCurrentPage().getElementByName(elementName); return finder.findWebElement(element); }
  • 20. Пример шага только для Android @Step @When("выполнено нажатие на Назад") public void systemBackClick() { ((AndroidDriver) driver).pressKeyCode(AndroidKeyCode.BACK); }
  • 24. Appium Node для Nexus 5X { "capabilities": [ { "browserName": "", "udid": "00d1ce8f827cceab", "deviceName": "Nexus5X", "version": "6.0.1", "maxInstances": 5, "platform": "ANDROID" } ], "configuration": { "cleanUpCycle": 2000, "timeout": 30000, "hub": "http://localhost:5566/grid/register/", "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", "url": "http://127.0.0.1:4719/wd/hub", "remoteHost": "http://127.0.0.1:4719", "host": "localhost", "port": 4719, "maxSession": 5, "register": true, "registerCycle": 5000, "hubPort": 5566, "hubHost": "localhost", "role": "node" } }
  • 26. Запуск проекта ./gradlew --info clean test --tests "*AndroidStories*" -Pplatform=android6 -Puser=5773935 -PtestType=smokeNewReg -PbuildVersion=8.5.0.3,development ./gradlew --info clean test --tests "*IOSStories*" -Pplatform=ios10 -Puser=1907306 -PtestType=smokeNewReg -PbuildVersion=8.5_7727 iOS Android
  • 28.
  • 32. ‣ Упаковываем всю низкоуровневую логику в библиотеку ‣ Упаковываем универсальные шаги ‣ Снижаем связанность проекта, внедряем Spring colibri-ui
  • 35. Внедряем Spring, формируем Uber-шаги @Autowired private PagesSteps pagesSteps; @Autowired @Qualifier("android") private ISystemButtonsClick systemButtonsClick;
  • 36. Внедряем Spring, формируем Uber-шаги @Step @Given("вернуться на "$screenName"") public void goToScreen(@org.jbehave.core.annotations.Named("$screenName") String screenName) { goToMain(screenName); } protected void returnCycle(String screenName) { boolean up = true; int countStepsToFailure = 7; do { try { //обрабатываем аллерт finder.findWebElement(By.xpath(getAlertLocator())).click(); } catch (Exception ignored) { } try { //проверяем что загружена главная pagesSteps.pageLoaded(screenName); up = false; } catch (Exception e) { try { //если не загружена, пытаемся нажать кнопку "Назад" getISystemButtonsClickBean().systemBackClick(); } catch (Exception ignored) { } } countStepsToFailure--; } while (up && countStepsToFailure > 0); }
  • 37. Внедряем Spring, формируем Uber-шаги @Step @Given("вернуться на "$screenName"") public void goToScreen(@org.jbehave.core.annotations.Named("$screenName") String screenName) { goToMain(screenName); } protected void returnCycle(String screenName) { boolean up = true; int countStepsToFailure = 7; do { try { //обрабатываем аллерт finder.findWebElement(By.xpath(getAlertLocator())).click(); } catch (Exception ignored) { } try { //проверяем что загружена главная pagesSteps.pageLoaded(screenName); up = false; } catch (Exception e) { try { //если не загружена, пытаемся нажать кнопку "Назад" getISystemButtonsClickBean().systemBackClick(); } catch (Exception ignored) { } } countStepsToFailure--; } while (up && countStepsToFailure > 0); }
  • 39. Проблемы Appium ‣ Ждем обновлений Appium после выхода новых платформ ‣ XCUIElementType на версии iOS 9.3 ‣ Собираем различные дефекты appium (1.6.1 долгий поиск элементов на iOS и т.д.) ‣ Проблемы в работе с web-view ‣ Проблема с доступами на iOS ‣ …
  • 41. Что мы получили! ‣ Универсальную, масштабируемую библиотеку ‣ Два мобильных проекта уже запускают e2e ui-автотесты с использованием нашего фреймфорка ‣ Функциональные тестировщики избавляются от части ручного тестирования ‣ Регрессионное тестирование на обратную совместимость с backend прогоняется автоматизированно
  • 42. open-source https://github.com/alfa-laboratory/colibri-ui colibri-ui уже стала open-source! Все на GitHub! Хватит тестировать руками:-) https://github.com/alfa-laboratory/colibri-ui-template
  • 43. mail: pvivanov@alfabank.ru telegram: @Pash_Ivanov facebook: pavel.ivanov.92560 Контакты Павел Иванов