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

More Related Content

PDF
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
PPTX
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
PDF
Lift, play, akka, rails part1
PDF
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
PDF
Отладка производительности СУБД MySQL
PDF
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
PPT
Easy authcache 2 кеширование для pro родионов игорь
PDF
Java tricks for high-load server programming
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
Lift, play, akka, rails part1
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Отладка производительности СУБД MySQL
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
Easy authcache 2 кеширование для pro родионов игорь
Java tricks for high-load server programming

What's hot (20)

PDF
Незаурядная Java как инструмент разработки высоконагруженного сервера
PDF
How to build solid CI-CD pipeline / Илья Беда (beda.software)
PDF
Распределенные системы в Одноклассниках
PDF
Выжимаем из сервера максимум (Андрей Паньгин)
PPTX
Zabbix 3.4 - простая непростая дружба с сообществом / Алексей Владышев (Zabbix)
PDF
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
PPTX
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
PPTX
Developing highload servers with Java
PPTX
Хватит писать инфраструктурный код
PDF
Максим Дунин, Nginx, Inc.
PPTX
Bytecode
PPT
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
PDF
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
PDF
Caching data outside Java Heap and using Shared Memory in Java
PDF
Многопоточность в браузере. Модель акторов — Константин Крамлих
PPTX
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
PDF
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
PDF
Эффективная отладка репликации MySQL
PDF
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Незаурядная Java как инструмент разработки высоконагруженного сервера
How to build solid CI-CD pipeline / Илья Беда (beda.software)
Распределенные системы в Одноклассниках
Выжимаем из сервера максимум (Андрей Паньгин)
Zabbix 3.4 - простая непростая дружба с сообществом / Алексей Владышев (Zabbix)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Developing highload servers with Java
Хватит писать инфраструктурный код
Максим Дунин, Nginx, Inc.
Bytecode
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"
Caching data outside Java Heap and using Shared Memory in Java
Многопоточность в браузере. Модель акторов — Константин Крамлих
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Эффективная отладка репликации MySQL
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Ad

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

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

Прокачиваем WebDriverAgent или как тестировать iOS-приложения после ядерного взрыва

Editor's Notes

  • #32: Каждый студент на первом курсе изучения программирования узнает, что вычислять длину итерируемого массива в цикле не стоит. На втором курсе студент узнает, что об этом не стоит парится, т.к. у него есть умный компилятор, который сделает все за него. К сожалению, до третьего курса доживают не все, ну или не всем рассказывают, что реальный мир сложен и жесток. Вот эта правка ускорила наши тесты секунд на 20.
  • #85: Волт Бой одобряет
  • #86: Вроде все круто, инструмент классный, столько всего умеет. Одна проблема – не работает. Почесали репу, решили что мы можем как сделать свои локаторы, которые будут просто биндингом на нативные XCUI Elements.
  • #87: Вроде все круто, инструмент классный, столько всего умеет. Одна проблема – не работает. Почесали репу, решили что мы можем как сделать свои локаторы, которые будут просто биндингом на нативные XCUI Elements.
  • #88: Вроде все круто, инструмент классный, столько всего умеет. Одна проблема – не работает. Почесали репу, решили что мы можем как сделать свои локаторы, которые будут просто биндингом на нативные XCUI Elements.
  • #90: И это еще не все. Appium, помимо всего прочего, решал несколько проблем и, когда мы перестали его использовать, нам пришлось решать их самим
  • #91: И это еще не все. Appium, помимо всего прочего, решал несколько проблем и, когда мы перестали его использовать, нам пришлось решать их самим
  • #93: И это еще не все. Appium, помимо всего прочего, решал несколько проблем и, когда мы перестали его использовать, нам пришлось решать их самим
  • #94: Вроде все круто, инструмент классный, столько всего умеет. Одна проблема – не работает. Почесали репу, решили что мы можем как сделать свои локаторы, которые будут просто биндингом на нативные XCUI Elements.
  • #95: Вроде все круто, инструмент классный, столько всего умеет. Одна проблема – не работает. Почесали репу, решили что мы можем как сделать свои локаторы, которые будут просто биндингом на нативные XCUI Elements.
  • #96: Вроде все круто, инструмент классный, столько всего умеет. Одна проблема – не работает. Почесали репу, решили что мы можем как сделать свои локаторы, которые будут просто биндингом на нативные XCUI Elements.
  • #97: Вроде все круто, инструмент классный, столько всего умеет. Одна проблема – не работает. Почесали репу, решили что мы можем как сделать свои локаторы, которые будут просто биндингом на нативные XCUI Elements.
  • #98: Вроде все круто, инструмент классный, столько всего умеет. Одна проблема – не работает. Почесали репу, решили что мы можем как сделать свои локаторы, которые будут просто биндингом на нативные XCUI Elements.
  • #99: Вроде все круто, инструмент классный, столько всего умеет. Одна проблема – не работает. Почесали репу, решили что мы можем как сделать свои локаторы, которые будут просто биндингом на нативные XCUI Elements.
  • #100: И это еще не все. Appium, помимо всего прочего, решал несколько проблем и, когда мы перестали его использовать, нам пришлось решать их самим
  • #101: И это еще не все. Appium, помимо всего прочего, решал несколько проблем и, когда мы перестали его использовать, нам пришлось решать их самим
  • #102: Вроде все круто, инструмент классный, столько всего умеет. Одна проблема – не работает. Почесали репу, решили что мы можем как сделать свои локаторы, которые будут просто биндингом на нативные XCUI Elements.
  • #103: Вроде все круто, инструмент классный, столько всего умеет. Одна проблема – не работает. Почесали репу, решили что мы можем как сделать свои локаторы, которые будут просто биндингом на нативные XCUI Elements.
  • #104: Вроде все круто, инструмент классный, столько всего умеет. Одна проблема – не работает. Почесали репу, решили что мы можем как сделать свои локаторы, которые будут просто биндингом на нативные XCUI Elements.
  • #105: Вроде все круто, инструмент классный, столько всего умеет. Одна проблема – не работает. Почесали репу, решили что мы можем как сделать свои локаторы, которые будут просто биндингом на нативные XCUI Elements.
  • #106: Форкнули WDA Через 4 месяца после выхода Xcode 8 выпустили релиз 1.6 с поддержкой Месяц назад выпустили модный инспектор
  • #107: Форкнули WDA Через 4 месяца после выхода Xcode 8 выпустили релиз 1.6 с поддержкой Месяц назад выпустили модный инспектор
  • #108: Форкнули WDA Через 4 месяца после выхода Xcode 8 выпустили релиз 1.6 с поддержкой Месяц назад выпустили модный инспектор
  • #109: Форкнули WDA Через 4 месяца после выхода Xcode 8 выпустили релиз 1.6 с поддержкой Месяц назад выпустили модный инспектор
  • #110: Форкнули WDA Через 4 месяца после выхода Xcode 8 выпустили релиз 1.6 с поддержкой Месяц назад выпустили модный инспектор
  • #111: Форкнули WDA Через 4 месяца после выхода Xcode 8 выпустили релиз 1.6 с поддержкой Месяц назад выпустили модный инспектор
  • #113: Форкнули WDA Через 4 месяца после выхода Xcode 8 выпустили релиз 1.6 с поддержкой Месяц назад выпустили модный инспектор
  • #114: Качество кода в системах функциониального тестирования не совершенно
  • #115: Качество кода в системах функциониального тестирования не совершенно
  • #116: Качество кода в системах функциониального тестирования не совершенно
  • #117: Качество кода в системах функциониального тестирования не совершенно
  • #119: Первая мысль была сделать Xpath нормально, но если бы решили – до сих пор бы делали