CodeFest 2018. Глеб Головин (2ГИС) — Ферма iOS девайсов. Наш опыт без прикрас

CodeFest 2018. Глеб Головин (2ГИС) — Ферма iOS девайсов. Наш опыт без прикрас

Посмотрите выступление Глеба:
https://2018.codefest.ru/lecture/1317/

Когда твоя команда поддерживает ферму Android-девайсов под прогон UI/Unit/Benchmark тестов, рано или поздно приходит начальника и говорит — «а давайте так же, только под iOS». В докладе расскажу с какими проблемами столкнулись, какие смогли починить, а какие нет и чем всё закончилось.

Уровень
Тестировщики, разработчики и devOps — все, кто связан с разработкой и тестированием мобильных приложений под iOS.

16b6c87229eaf58768d25ed7b2bbbf52?s=128

CodeFest

April 09, 2018
Tweet

Transcript

  1. Ферма iOS девайсов. Наш опыт без прикрас Глеб Головин 2ГИС

  2. None
  3. None
  4. Как мы ферму для тестирования под Android построили Глеб Головин

    2ГИС Игорь Павлов
  5. None
  6. Что такое ферма?

  7. Запуск тестов 24/7/365 → стабильно → отказоустойчиво Ферма девайсов

  8. iOS ферма. Начало

  9. Начинаем с одного девайса. Что имеем? v1.5

  10. Начинаем с одного девайса. Что хотим? v1.5 appium tests для

  11. Заканчиваем с одним девайсом v1.6-beta

  12. Appium 1.6

  13. Рабочая схема appium tests

  14. Ошибки в тестах appium tests

  15. Ошибки mac mini

  16. MacOS и файлы подкачки (swap) 1. Отключать swap нельзя

  17. MacOS и файлы подкачки (swap) 1. Отключать swap нельзя 2.

    Количество файлов подкачки не ограничено
  18. MacOS и файлы подкачки (swap) 1. Отключать swap нельзя 2.

    Количество файлов подкачки не ограничено 3. Перезагрузка - способ очистить swap
  19. Ошибки в iOS-инструментах

  20. Ошибка в xcrun [debug] Error: Command failed: /bin/sh -c xcrun

    --sdk iphonesimulator --show-sdk-version
  21. Ошибка в xcrun. Решение Добавить флаг в Appium: либо: --backend-retries

    3 --native-instruments-lib
  22. Ошибка в ios-deploy Original error: Could not install app: 'Command

    'ios-deploy --id <UDID> --uninstall --bundle <TEMP_APP_PATH>' exited with code 253'
  23. Ошибка в ios-deploy. Решение Делаем перепопытки старта сессии на стороне

    запуска тестов: [session] session_start_attempts: 1
  24. None
  25. Appium и куча мусора

  26. Удаляем и стопаем под рутом sudo killall -SIGKILL node ||

    true sudo killall -SIGKILL tail || true sudo rm -rf /var/folders/* 2> /dev/null || true
  27. iPhone приболел

  28. iPhone приболел — Выражается в ругательстве Appium на любые действия.

  29. Диагностика и лечение Есть план: • выявить команду обнаружения проблемы

  30. Диагностика и лечение Есть план: • выявить команду обнаружения проблемы

    • найти лечение
  31. Диагностика и лечение Есть план: • выявить команду обнаружения проблемы

    • найти лечение • автоматизировать
  32. DOCUMENTED

  33. Систематическое заболевание iPhone

  34. Написали prepare_device Запускается в начале каждой сборки: 1. ждет ответ

    с таймаутом ideviceinstaller --udid ${UDID} --list-apps -o list_all
  35. Написали prepare_device Запускается в начале каждой сборки: 1. ждет ответ

    с таймаутом ideviceinstaller --udid ${UDID} --list-apps -o list_all 2. если ответа нет или пустой, значит девайс требует починки
  36. Написали prepare_device Запускается в начале каждой сборки: 1. ждет ответ

    с таймаутом ideviceinstaller --udid ${UDID} --list-apps -o list_all 2. если ответа нет или пустой, значит девайс требует починки 3. перезагружает девайс idevicediagnostics --udid ${UDID} restart
  37. Написали prepare_device Запускается в начале каждой сборки: 1. ждет ответ

    с таймаутом ideviceinstaller --udid ${UDID} --list-apps -o list_all 2. если ответа нет или пустой, значит девайс требует починки 3. перезагружает девайс idevicediagnostics --udid ${UDID} restart 4. вновь запрос списка приложений и либо ОК либо НЕТ
  38. Подключаем несколько девайсов

  39. Новая рабочая схема appium tests х2

  40. Не хватает памяти

  41. None
  42. Почему место кончается? /var/folders/<XXX>

  43. Решение в нескольких пользователях USER1 USER2 /var/folders/<user1> /var/folders/<user2>

  44. Точечная очистка До разделения на пользователей: sudo killall -SIGKILL node

    || true sudo killall -SIGKILL tail || true sudo rm -rf /var/folders/* 2> /dev/null || true
  45. Точечная очистка После разделения на пользователей: PID=$(cat appium.pid) sudo kill

    -9 ${PID} || true sudo rm -rf /tmp/appium_${DEVICE_UDID}/* 2> /dev/null || true sudo rm -rf ${VAR_FOLDERS_DIR}/* 2> /dev/null || true
  46. Решение в нескольких пользователях

  47. Trust This Computer?

  48. Потеря доверия

  49. Потеря доверия Возможные причины: 1. Старое ПО

  50. Потеря доверия Возможные причины: 1. Старое ПО 2. Плохой провод

  51. Потеря доверия Возможные причины: 1. Старое ПО 2. Плохой провод

    3. Запрос в телефон «не вовремя»
  52. Потеря доверия (iOS 9) restart t 0 t 1

  53. Перезагрузка телефона v1 restart iCheck iCheck 5s 0.5s iCheck

  54. Перезагрузка телефона v2 restart iCheck iCheck 30s 0.5s iCheck

  55. Перезагрузка телефона v3 restart iCheck iCheck iCheck 0.5s usbCheck

  56. Перезагрузка телефона v4 restart iCheck iCheck iCheck 5s usbCheck

  57. Потеря доверия (iOS 9) restart t 0 t 1

  58. popup`s

  59. Флаг autoAcceptAlerts не работает Взаимодействие через Appium

  60. Нет симки

  61. Обновление настроек оператора

  62. Всплывашка про обновление

  63. Работает, но можно ли?

  64. Мониторинг фермы

  65. Вспухание аккумулятора

  66. None
  67. Выводы

  68. Вопросы? g.golovin@2gis.ru Глеб Головин 2ГИС

  69. БОНУС

  70. None