SlideShare a Scribd company logo
Прокачиваем
WebDriverAgent
Как тестировать iOS-приложения после ядерного взрыва
1
Avito
• 35 000 000 пользователей в месяц
• 100 000 сделок в месяц
2
Avito
• 4 web-интерфейса
• 3 API
• 3 приложения Android
• 3 приложения iOS
• три портсигара отечественных, куртка замшевая…
3
4
5
Tests
6
Stages
7
PageObjects
8
9
Appium
Appium
10
JavaScript
Xcode 8
11
Appium
12
JavaScript
13
14
~ 200 000 loc
~ 400 тестов
15
16
WebDriverAgent
https://github.com/facebook/WebDriverAgent
17
18
WebDriverAgentWebDriverAgent
WebDriverAgent
+ Json Wire
19
WebDriverAgent
+ Json Wire
+ XCUITests под капотом
20
WebDriverAgent
+ Json Wire
+ XCUITests под капотом
+ ObjC
21
WebDriverAgent
+ Json Wire
+ XCUITests под капотом
+ ObjC
+ Разные стратегии локаторов
22
WebDriverAgent
+ Json Wire
+ XCUITests под капотом
+ ObjC
+ Разные стратегии локаторов
+ Работа с системой вне приложения (настройки/Safari)
23
WebDriverAgent
+ Json Wire
+ XCUITests под капотом
+ ObjC
+ Разные стратегии локаторов
+ Работа с системой вне приложения (настройки/Safari)
+ Touch ID
24
WebDriverAgent
+ Json Wire
+ XCUITests под капотом
+ ObjC
+ Разные стратегии локаторов
+ Работа с системой вне приложения (настройки/Safari)
+ Touch ID
– Инспектор
25
WebDriverAgent
+ Json Wire
+ XCUITests под капотом
+ ObjC
+ Разные стратегии локаторов
+ Работа с системой вне приложения (настройки/Safari)
+ Touch ID
– Инспектор
– Медленно
26
WebDriverAgent
+ Json Wire
+ XCUITests под капотом
+ ObjC
+ Разные стратегии локаторов
+ Работа с системой вне приложения (настройки/Safari)
+ Touch ID
– Инспектор
– Медленно (у нас)
27
28
29
30
31
WebDriverAgent
32
33
Xpath
34
• x6.5
Xpath
35
• x6.5
• 1 мин 40 сек
Xpath
36
• x6.5
• 1 мин 40 сек
• 40 сек на запрос
Xpath
37
• x6.5
• 1 мин 40 сек
• 40 сек на запрос
• + 16Mb
38
* eXtended Ui Interactor
39
Xpath
40
• x6.5
• 1 мин 40 сек
• 40 сек на запрос
• + 16Mb
• x2
XUI
Xpath
41
• x6.5
• 1 мин 40 сек
• 40 сек на запрос
• + 16Mb
• x2
• 20 сек
XUI
Xpath
42
• x6.5
• 1 мин 40 сек
• 40 сек на запрос
• + 16Mb
• x2
• 20 сек
• < 1 сек на запрос
XUI
Xpath
43
• x6.5
• 1 мин 40 сек
• 40 сек на запрос
• + 16Mb
• x2
• 20 сек
• < 1 сек на запрос
• + 1.5Mb
XUI
XCUI селекторы
• let app = XCUIApplication()
44
XCUI селекторы
• let app = XCUIApplication()
• app.staticTexts["Volley"]
45
XCUI селекторы
• let app = XCUIApplication()
• app.staticTexts["Volley"]
• app.buttons["On"]
46
XCUI селекторы
• let app = XCUIApplication()
• app.staticTexts["Volley"]
• app.buttons["On"]
• app.windows.element(boundBy: 0)
47
XCUI селекторы
• app.children(matching: .window).element(boundBy:
0).children(matching: .other).element.children(matching:
.other).element.children(matching: .other).element.children(matching:
.other).element.children(matching: .other).element.children(matching:
.other).element.children(matching: .other).element.children(matching:
.other).element(boundBy: 0).children(matching:
.other).element(boundBy: 1).children(matching:
.other).element.children(matching: .other).element(boundBy:
0).children(matching: .other).element.children(matching:
.button).element.tap()
48
XCUI селекторы
• ObjC: [parent childrenMatchingType:elementType];
• Swift: parent.children(matching: elementType)
49
XCUI селекторы
• ObjC: [parent childrenMatchingType:elementType];
• Swift: parent.children(matching: elementType)
• ObjC: [parent descendantsMatchingType:elementType];
• Swift: parent.descendants(matching: elementType)
50
XUI локаторы
• Тип элемента
• Признак прямой/непрямой потомок
51
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного взрыва - Алексей Махов (Avito)
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного взрыва - Алексей Махов (Avito)
XUI локаторы
• Тип элемента
• Признак прямой/непрямой потомок
• Может быть вложенным
54
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного взрыва - Алексей Махов (Avito)
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного взрыва - Алексей Махов (Avito)
XUI локаторы
• Тип элемента
• Признак прямой/непрямой потомок
• Может быть вложенным
57
XUI локаторы
• Тип элемента
• Признак прямой/непрямой потомок
• Может быть вложенным
• Выбор по индексу элемента
58
59
XUI локаторы
• Тип элемента
• Признак прямой/непрямой потомок
• Может быть вложенным
• Выбор по индексу элемента
• Выбор по сложным условиям
60
61
62
https://realm.io/news/nspredicate-cheatsheet/
XUI-локаторы
• xui=StaticText[1]|TextView[0]
• xui=Button(label == 'Stop')
• xui=NavigationBar[last]
• xui=Table[0]|Cell[3]|.StaticText(id=Address)
• xui=Table[0]|Cell[3]|.StaticText(id=Time)
63
Инспектор
64
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного взрыва - Алексей Махов (Avito)
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного взрыва - Алексей Махов (Avito)
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного взрыва - Алексей Махов (Avito)
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного взрыва - Алексей Махов (Avito)
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного взрыва - Алексей Махов (Avito)
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного взрыва - Алексей Махов (Avito)
Инспектор
71
Инспектор
72
Инспектор
73
Инспектор
74
Инспектор
75
Итоги
76
WebDriverAgent
+ Json Wire
+ XCUITests под капотом
+ ObjC
+ Разные стратегии локаторов
+ Работа с системой вне приложения (настройки/Safari)
+ Touch ID
– Инспектор
– Медленно (у нас)
77
Patched WebDriverAgent
+ Json Wire
+ XCUITests под капотом
+ ObjC
+ Разные стратегии локаторов
+ Работа с системой вне приложения (настройки/Safari)
+ Touch ID
+ Инспектор
+ Ну нормальная такая скорость
78
79
WebDriverAgent
80
Tests
81
Stages
82
PageObjects
83
~ 2-3 недели
84
~ 2-3 недели
vs
~ 200 000 loc
~ 400 тестов
85
Что сделали еще?
86
Что сделали еще?
• Поправили мелкие баги
87
Что сделали еще?
• Поправили мелкие баги
• /wda/:uuid/valueSlow
88
Что сделали еще?
• Поправили мелкие баги
• /wda/:uuid/valueSlow
• /setToPasteboard
89
Что сделали еще?
• Поправили мелкие баги
• /wda/:uuid/valueSlow
• /setToPasteboard
• …
90
91
92
93
jsonwire-grid
94
jsonwire-grid
• Регистрирует ноды
95
jsonwire-grid
• Регистрирует ноды
• Проксирует все вызовы на ноды
96
jsonwire-grid
• Регистрирует ноды
• Проксирует все вызовы на ноды
• Выбирает подходящую ноду с учетом Capabilities
• На POST /session
97
jsonwire-grid
• Регистрирует ноды
• Проксирует все вызовы на ноды
• Выбирает подходящую ноду с учетом Capabilities
• На POST /session
• Освобождает ноду:
• На DELETE /session
• По таймауту
98
jsonwire-grid
• Регистрирует ноды
• Проксирует все вызовы на ноды
• Выбирает подходящую ноду с учетом Capabilities
• На POST /session
• Освобождает ноду:
• На DELETE /session
• По таймауту
• Совместим c selenium-grid
99
100
101
jsonwire-grid-wda-agent
• Регистрируется в grid’е
102
jsonwire-grid-wda-agent
• Регистрируется в grid’е
• Проксирует все вызовы на WDA
103
jsonwire-grid-wda-agent
• Регистрируется в grid’е
• Проксирует все вызовы на WDA
• На POST /session:
• Выбирает/запускает запрошенный симулятор
• Удаляет приложение
• Устанавливает приложение
• Перезапускает WDA
104
jsonwire-grid-wda-agent
• Регистрируется в grid’е
• Проксирует все вызовы на WDA
• На POST /session:
• Выбирает/запускает запрошенный симулятор
• Удаляет приложение
• Устанавливает приложение
• Перезапускает WDA
• Записывает видео прохождения теста и отправляет в
хранилище
105
Github
• https://github.com/qa-dev/WebDriverAgent
• https://github.com/qa-dev/wda-inspector
• https://github.com/qa-dev/jsonwire-grid
• https://github.com/qa-dev/jsonwire-grid-wda-agent
106
И что теперь?
107
И что теперь?
108
109
И что теперь?
Facebook WebDriverAgent
110
• «Оригинальный» WebDriverAgent
• «Поддержка Facebook»
Appium WebDriverAgent
111
• «de-facto standard for automating mobile applications»
• Поддержка open-source сообщества
• Сделали свой инспектор
Avito WebDriverAgent
112
• Быстрые локаторы
• Инспектор
• Grid
• Grid-agent
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного взрыва - Алексей Махов (Avito)
Выводы
114
• Выбирайте то, что подходит вам
Выводы
115
• Выбирайте то, что подходит вам
• Не бойтесь делать велосипеды
116
2015
Боль
Страдание
117
2016
Боль
Страдание
Велосипеды
118
2017
Боль
Страдание
Велосипеды
Выводы
119
• Выбирайте то, что подходит вам
• Не бойтесь делать велосипеды
• Делайте то, что нужно
Выводы
120
• Выбирайте то, что подходит вам
• Не бойтесь делать велосипеды
• Делайте то, что нужно
• Не делайте то, что не нужно
Вопросы?
• amakhov@avito.ru
• @makhov
121

More Related Content

PPTX
Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...
PDF
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
PDF
Lift, play, akka, rails part1
PDF
Отладка производительности СУБД MySQL
PDF
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
PDF
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
PDF
Java tricks for high-load server programming
PPTX
Хватит писать инфраструктурный код
Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного ...
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Lift, play, akka, rails part1
Отладка производительности СУБД MySQL
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Java tricks for high-load server programming
Хватит писать инфраструктурный код

What's hot (20)

PPT
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
PPTX
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
PDF
Незаурядная Java как инструмент разработки высоконагруженного сервера
PDF
Выжимаем из сервера максимум (Андрей Паньгин)
PDF
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
PDF
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
PDF
Распределенные системы в Одноклассниках
PPTX
Developing highload servers with Java
PDF
Максим Дунин, Nginx, Inc.
PPTX
Bytecode
PDF
Исследовательские задачи в области блокчейна
PPTX
Zabbix 3.4 - простая непростая дружба с сообществом / Алексей Владышев (Zabbix)
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PDF
Многопоточность в браузере. Модель акторов — Константин Крамлих
PDF
Caching data outside Java Heap and using Shared Memory in Java
PDF
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
PPTX
Введение в Akka
PDF
Артём Ерошенко «Рецепт приготовления облачных тестингов»
PDF
Быстрое построение backendов c помощью реактивных потоков
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Незаурядная Java как инструмент разработки высоконагруженного сервера
Выжимаем из сервера максимум (Андрей Паньгин)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
Распределенные системы в Одноклассниках
Developing highload servers with Java
Максим Дунин, Nginx, Inc.
Bytecode
Исследовательские задачи в области блокчейна
Zabbix 3.4 - простая непростая дружба с сообществом / Алексей Владышев (Zabbix)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Многопоточность в браузере. Модель акторов — Константин Крамлих
Caching data outside Java Heap and using Shared Memory in Java
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Введение в Akka
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Быстрое построение backendов c помощью реактивных потоков
Ad

Similar to Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного взрыва - Алексей Махов (Avito) (20)

PPTX
Automation Flex Applications with Selenium rc
PDF
Автоматизация UI тестирования под Windows и Windows Phone
PDF
Павел Юрийчук - Разработка приложений под мобильные браузеры
PDF
YaC 2013 Notes
PDF
E2E-тестирование мобильных приложений
PPTX
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
PDF
Тестирование безDOMных объектов
PDF
Mobile Web Apps development essentials
PDF
Изоморфный JavaScript — будущее уже здесь
PDF
Rebrov selenium camp2013
PDF
Делаем кроссбраузерные тесты поверх Webdriver
PPTX
Automation testing desktop applications
PDF
Unit-тестирование скриншотами: преодолеваем звуковой барьер
PDF
2014 Jeeconf - Geb Spock
PPTX
Railsclub 2012
PPTX
Олександр Хотемський “Обзор архитектуры Selenium WebDriver”
PDF
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
PDF
Тестирование весна 2014 смешанное занятие 1
PPTX
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Огляд екосистеми Selenium» QADay 2019
PPTX
Построение собственного JS SDK — зачем и как?
Automation Flex Applications with Selenium rc
Автоматизация UI тестирования под Windows и Windows Phone
Павел Юрийчук - Разработка приложений под мобильные браузеры
YaC 2013 Notes
E2E-тестирование мобильных приложений
Технологии тестирования Rich Web client, Андрей Плешков, Форум Технологий Mai...
Тестирование безDOMных объектов
Mobile Web Apps development essentials
Изоморфный JavaScript — будущее уже здесь
Rebrov selenium camp2013
Делаем кроссбраузерные тесты поверх Webdriver
Automation testing desktop applications
Unit-тестирование скриншотами: преодолеваем звуковой барьер
2014 Jeeconf - Geb Spock
Railsclub 2012
Олександр Хотемський “Обзор архитектуры Selenium WebDriver”
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Тестирование весна 2014 смешанное занятие 1
ОЛЕКСАНДР ХОТЕМСЬКИЙ «Огляд екосистеми Selenium» QADay 2019
Построение собственного JS SDK — зачем и как?
Ad

More from AvitoTech (20)

PDF
Сегментация изображений на острие науки (Евгений Нижибицкий, Rambler&Co)
PPTX
Применение компьютерного зрения для анализа спортивных соревнований (Николай ...
PDF
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
PPTX
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
PDF
Yandex Tank - Арсений Фомченко
PDF
Migro - Юрий Богомолов
PDF
TableKit - Максим Соколов
PDF
Jsonwire Grid - Михаил Подцерковский (Avito)
PDF
SimplePEG - Алексей Охрименко
PDF
Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
PDF
"Анонимизация фото с помощью Vision", Хомутников Тимофей, Avito
PDF
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
PDF
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
PDF
ASO for iOS 11
PDF
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
PDF
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
PDF
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
PDF
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
PDF
Конкурс Авито-2017 - Решение 2ое место - Василий Рубцов
PDF
Конкурс Авито-2017 - Решение 3ое место
Сегментация изображений на острие науки (Евгений Нижибицкий, Rambler&Co)
Применение компьютерного зрения для анализа спортивных соревнований (Николай ...
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
Yandex Tank - Арсений Фомченко
Migro - Юрий Богомолов
TableKit - Максим Соколов
Jsonwire Grid - Михаил Подцерковский (Avito)
SimplePEG - Алексей Охрименко
Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
"Анонимизация фото с помощью Vision", Хомутников Тимофей, Avito
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
ASO for iOS 11
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
Конкурс Авито-2017 - Решение 2ое место - Василий Рубцов
Конкурс Авито-2017 - Решение 3ое место

Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного взрыва - Алексей Махов (Avito)