Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CodeFest 2019. Роман Иваницкий (Одноклассники) — Масштабирование андроид-тестирования в Одноклассниках

CodeFest
April 06, 2019

CodeFest 2019. Роман Иваницкий (Одноклассники) — Масштабирование андроид-тестирования в Одноклассниках

История развития селениум-инфраструктуры, масштабирование фермы для андроид-тестирования и объединение её с существующей инфраструктурой, или как мы пришли к запуску всех тестов на каждый PR.

CodeFest

April 06, 2019
Tweet

More Decks by CodeFest

Other Decks in Technology

Transcript

  1. 2012, odnoklassniki.ru • Рост пользователей • Тестирование происходит вручную •

    Регресс занимает много времени • Хочется релизить чаще 4
  2. 2012, odnoklassniki.ru • Рост пользователей • Тестирование происходит вручную •

    Регресс занимает много времени • Хочется релизить чаще 5
  3. 2012, odnoklassniki.ru • Рост пользователей • Тестирование происходит вручную •

    Регресс занимает много времени • Хочется релизить чаще 6
  4. 2012, odnoklassniki.ru • Рост пользователей • Тестирование происходит вручную •

    Регресс занимает много времени • Хочется релизить чаще 7
  5. 2015, selenium grid • Количество тестов выросло >1000 • Количество

    запусков выросло • Масштабировать стало сложно • Вспомогательные сервисы 10
  6. 2015, selenium grid Hub Node 1 VM Node 2 Node

    N N=>200 https://goo.gl/Do2SVV 13
  7. Coordinator - брокер ресурсов • Знает топологию кластера • Принимает

    заявки на ресурсы • Приоритезирует заявки • Мониторит состояние нод • Хранит информацию в БД • Объединяет ноды в сервисы/фермы 20
  8. Nodemanager - resource node • Получает задачи на координаторе •

    Запускает ресурсы по требованию 25
  9. Nodemanager - resource node • Каждый запуск изолирован • В

    качестве ответа host + ports ◦ http://srv666:4444 26
  10. Масштабирование 38 NodeManager HW NodeManager HW NodeManager HW NodeManager HW

    NodeManager HW NodeManager HW NodeManager HW NodeManager HW NodeManager HW NodeManager HW NodeManager NodeManager DC1 DC2 DC3 HW 800+ браузеров одновременно
  11. Grid Coordinator NodeManager HW NodeManager HW NodeManager HW Coordinator DNS

    failover NodeManager HW NodeManager HW NodeManager HW NodeManager HW NodeManager HW NodeManager HW NodeManager HW NodeManager NodeManager DC1 DC2 DC3 HW 40
  12. Тестовые фреймворки • WebDriver way ◦ selendroid ◦ appium •

    Native way ◦ robotium ◦ ui-automator ◦ espresso 42
  13. Native tests vs WebDriver tests + Получение девайса = получение

    браузера - install App APK + install Test APK - Нужно забирать артефакты с девайсов - Тесты бегают на самом устройстве 43
  14. Native tests vs WebDriver tests + Получение девайса = получение

    браузера - install App APK + install Test APK - Нужно забирать артефакты с девайсов - Тесты бегают на самом устройстве 44
  15. Native tests vs WebDriver tests + Получение девайса = получение

    браузера - install App APK + install Test APK - Нужно забирать артефакты с девайсов - Тесты бегают на самом устройстве 45
  16. Native tests vs WebDriver tests + Получение девайса = получение

    браузера - install App APK + install Test APK - Нужно забирать артефакты с девайсов - Тесты бегают на самом устройстве 46
  17. Native tests vs WebDriver tests + Получение девайса = получение

    браузера - install App APK + install Test APK - Нужно забирать артефакты с девайсов - Тесты бегают на самом устройстве 47
  18. Эмулятор • Хорошо масштабируются • Не умирают со временем •

    У нас нет hardware-specific фич • Легко обновлять версии • Работают достаточно быстро • Есть уже работающая инфраструктура 55
  19. Create AVD avdmanager create avd -n “test” -k "$EMULATOR_IMAGE" --abi

    "google_apis/x86" --device "$ANDROID_DEVICE" --sdcard /sdcard.img 57
  20. Nodemanager + Android emulator -avd test -verbose -ports ${CONSOLE},${ADB} -gpu

    ${TYPE} -no-window -qemu -enable-kvm One instance of a particular AVD at a time 59
  21. Nodemanager + Android emulator -avd test -verbose -read-only #since Emulator

    28.0.16 -ports ${CONSOLE},${ADB} -gpu ${TYPE} -no-window -qemu -enable-kvm 60
  22. Emulator performance • Fast x86 or x86_64 emulators with hardware

    acceleration ◦ /dev/kvm on linux ◦ Intel CPU and Intel HAXM driver for Win, Mac • GPU emulation ◦ host ◦ swiftshader_indirect • Snapshots for fast boot 61
  23. DM + Coordinator = Success? • Масштабирование устройств • Запуск

    на каждый PR • Разработчик быстро получает результаты 68
  24. DM + Coordinator = Success? • Масштабирование устройств • Запуск

    на каждый PR • Разработчик быстро получает результаты 69
  25. DM + Coordinator = Success? • Масштабирование устройств • Запуск

    на каждый PR • Разработчик быстро получает результаты 70
  26. DM + Coordinator = Success? • Масштабирование устройств • Запуск

    на каждый PR • Разработчик быстро получает результаты 71
  27. Fix flaky tests • Fast login • Deep Links •

    Test-case review • Rewrite from robotium to espresso • Use API • Use clean bots 75
  28. DM + Stable tests = Success? • Тесты и инфраструктура

    тесно связаны • CI занят • Сложно работать с параллельными запусками • ... 77
  29. DM + Stable tests = Success? • Тесты и инфраструктура

    тесно связаны • CI занят • Сложно работать с параллельными запусками 78
  30. DM + Stable tests = Success? • Тесты и инфраструктура

    тесно связаны • CI занят • Сложно работать с параллельными запусками 79
  31. DM + Stable tests = Success? • Тесты и инфраструктура

    тесно связаны • CI занят • Сложно работать с параллельными запусками 80
  32. QueueRunner - async tests DeviceManager Coordinator Test Test Test Test

    Test QR Test Test Test Test Test Test Test Test Test Test Nodemanager Nodemanager Nodemanager 81
  33. QueueRunner test flow Prepare device Get device Process test Pull

    data Clear device adb uninstall old-ok.apk adb uninstall old-test-ok.apk …. adb install new-ok.apk adb install new-test-ok.apk 83
  34. QueueRunner test flow Prepare device Get device Process test Pull

    data Clear device adb shell am instrument -w … / 84
  35. QueueRunner test flow Prepare device Get device Process test Pull

    data Clear device adb pull /path/data.1 adb pull /path/data.2 adb pull /path/data.3 …. 85
  36. QueueRunner test flow Prepare device Get device Process test Pull

    data Clear device logcat -c adb uninstall ok.apk adb uninstall test-ok.apk 86
  37. QueueRunner features • Использование всех доступных ресурсов • Управление последовательностью

    тестов • Умные/глупые ретраи • Отчеты о результатах в jira/stash 88
  38. Выводы о QR+DM • Адаптивность к кол-ву ресурсов • Масштабирование

    • Асинхронное выполнение тестов • Разделение инфраструктуры и тестов 89
  39. 93

  40. 94

  41. 95

  42. 98

  43. Простой способ сравнения фейлов • Очистить стектрейс падений ◦ избавиться

    от цифр lambda$123/23523 ◦ оставить номера строк ETestFeedAsSpam.java:80 ◦ придумать что-то свое • Посчитать хеш-сумму от всех строк стектресов • Сравнить хеши
  44. Итоги • Android - интеграция с selenium инфраструктурой ◦ масштабируемость

    эмуляторов ◦ наследование сильных сторон существующей инфраструктуры 112
  45. Итоги • DeviceManager - абстракция над девайсом ◦ удаленное взаимодействие

    с девайсами ◦ возможность работать с разными типами девайсов 113
  46. Планы • Единая платформа для selenium, android, ios • Тестирование

    на разных версиях • Тестирование производительности 118
  47. Выводы • Начинайте с готового и простого решения • Не

    бойтесь использовать эмуляторы • Полностью готового решения может не быть • При росте можно задуматься о своем решении 119
  48. See also • Managing resources for large-scale testing at Facebook

    • Automation Test as a Service at eBay • Testing Android Apps at Scale with Nitrogen 120
  49. Ссылки 1. Микросервисы для автоматизации тестирования («Одноклассники») https://goo.gl/Do2SVV 2. Управление

    авариями в большом интернет-проекте https://goo.gl/Y5wQGs 3. One-cloud: ОС уровня дата-центра в Одноклассниках https://goo.gl/onFvaS 4. Java adb wrapper https://github.com/vidstige/jadb 5. https://github.com/appium/appium-docker-android 6. https://github.com/budtmo/docker-android 7. https://github.com/agoda-com/docker-emulator-android 8. https://github.com/aerokube/selenoid-images