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

Автоматизация рутинных задач для тестирования м...

Автоматизация рутинных задач для тестирования мобильных приложений

Слайды моего доклада на Testing Stage 2018

Avatar for Oleg Nikiforov

Oleg Nikiforov

April 14, 2018
Tweet

More Decks by Oleg Nikiforov

Other Decks in Programming

Transcript

  1. Обо мне • 6+ лет в тестировании мобильных приложений •

    iOS, Android, Android IoT, Backend Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  2. О докладе • Рутинные задачи раздражают • Как я пришел

    к автоматизации • Демо и разбор скриптов • Примеры • Python Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  3. Рутинные задачи раздражают • Установить билд • Сделать скриншот •

    Снять видео • Etc. Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  4. Установить билд – a path to scripting "A long time

    ago in a galaxy far, far away...." • Android проект: телефоны + планшет • Частое обновления билдов • Минимум 6 девайсов для теста • Сборки на ftp, доступ через браузер WTF!!! Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  5. Автоматизируй 1. Поставить задачу 2. Пнуть разработчика 3. … 4.

    Profit Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  6. Постановка задачи "Хочу быстро ставить билды без регистрации и смс"

    Что может ADB: • Узнать какие устройства подключены • Удалить приложение • Установить .apk файл Что еще надо: • Указать какое приложение установить • Скачать .apk файл Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  7. Процесс • Подключаем девайс • Запускаем .sh скрипт • Подключаем

    следующий девайс • Запускаем .sh скрипт • … Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  8. Что можно улучшить • Установить на несколько девайсов без перезапуска

    скрипта • Проверить перед скачиванием что есть новая сборка • Проверить что сборка на девайсе устарела Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  9. Автоматизируй… сам 1. Поставить задачу 2. Придумать алгоритм 3. Реализовать

    каждый шаг 4. Свести в одно целое 5. ... 6. Profit Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  10. Скриншот с Android девайса Идея: Сделать скриншот и сохранить на

    машину Решения: • Физические кнопки + почта • Приложение на девайсе • Android Studio • Сторонние приложения на компе (AndroidTool) Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  11. Автоматизируем Что я знаю: • ADB позволяет сделать скриншот с

    подключенного девайса • Скриншот сохраняется на девайсе Что надо сделать: • Снять скриншот • Скачать файл с девайса на машину • Удалить файл с девайса Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  12. Что можно улучшить screen.png ??? Android_screen_n.png ??? Andoid_screen_2018-02-08_13-56-12.png ??? Задать

    имя файла: • На каком девайсе сделан скриншот • Запущенный пакет и активность • Текущее время HTC-One_5-0-2_com-my_app-dev_TaskDetailActivity_2018-02-08_13-56-12.png Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  13. Шаги • Получаем имя девайса и версию ос: "" •

    Получаем данные про активность: "'" • Выкусываем название пакета и название активности • Получаем текущее время • Комбинируем данные в название файла • Делаем скриншот: "" • Скачиваем скриншот "" • Удаляем скриншот с девайса "" Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage adb shell getprop | egrep "ro.product.model|ro.build.version.release adb shell dumpsys window windows | grep -E 'mCurrentFocus adb shell screencap -p /sdcard/screen.png adb pull /sdcard/screen.png <destination/filename> adb shell rm /sdcard/screen.png
  14. Разбор Плюсы: • Быстро вызывается, особенно с помощью zsh +

    zsh-autosuggestions • Кастомизация имени файла • Выбор девайса из подключенных (опционально) Минусы: • Сбои adb • Landscape скриншоты приходится переворачивать вручную… или не приходится Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  15. Видео с Android девайса Идея: Записать видео и сохранить на

    машину Решения: • Screencast на комп + запись экрана • Сторонние приложения на компе (AndroidTool) • ??? Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  16. Автоматизируем Что я знаю: • ADB позволяет записать видео с

    экрана подключенного девайса • Видео сохраняется на девайсе Что надо сделать: • Начать запись видео • Прервать запись видео • Скачать файл с девайса на машину • Удалить файл с девайса Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  17. Шаги • Получаем имя девайса и версию ос: "" •

    Данные про активность не нужны • Выкусываем название пакета: "'" • Получаем текущее время • Комбинируем данные в название файла • Стартуем запись видео: "" • Прерываем запись видео: ” " • Скачиваем видео "" • Удаляем видео с девайса "" Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage adb shell getprop | egrep "ro.product.model|ro.build.version.release adb shell dumpsys window windows | grep -E 'mCurrentFocus adb shell screenrecord --verbose <filepath> Ctrl + C adb pull <filepath> <destination> adb shell rm <filepath>
  18. Разбор Плюсы: • Быстрый способ сделать запись экрана • Работает

    нативно • Кастомизация имени файла Минусы: • Сбои adb • Android 4.4+ Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  19. Не андроидом единым • Сделать скриншот: "idevicescreenshot" • Удалить апп,

    скачать ipa и установить: "ideviceinstaller" • Сбилдить апп из терминала: "xcodebuild" • Снять видео??? Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  20. Скриншот с iOS девайса Идея: Сделать скриншот и сохранить на

    машину Решения: • Физические кнопки + почта • Xcode • Сторонние приложения на компе (AndroidTool) Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  21. Автоматизация Что я знаю: • Нет открытого API для взаимодействия

    с системой • Есть libimobiledevice: – Делает скриншот и сразу сохраняет на машину в формате tiff – Обращение к девайсу по UDID Что надо сделать: • Узнать UDID подключенного девайса • Сделать скриншот • Сконвертировать скриншот из tiff в png • Удалить tiff файл Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  22. Шаги • Создаем список девайсов с именем и UDID •

    Узнаем какие девайсы подключены в данный момент: "" • Если девайса нет в списке, узнаем его имя и предлагаем добавить: "" Узнаем версию ос: "" • Получаем текущее время • Комбинируем данные в название файла • Делаем скриншот: "" • Конвертируем файл из tiff в png • Удаляем tiff файл Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage device_id –l idevicename -u <udid> ideviceinfo -u <udid> | grep 'ProductVersion' idevicescreenshot -u <udid> <filepath>.tiff
  23. Разбор Плюсы: • Быстро вызывается • Кастомизация имени файла •

    Выбор девайса из подключенных Минусы: • Landscape скриншоты приходится переворачивать вручную • Developer disk image Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  24. Python Работает из коробки (MacOS 10.11.6) Легкий в освоении, читабельный

    синтаксис PyCharm Развитое комьюнити Много библиотек, легкая (обычно) установка Скрипты запускаются быстро Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  25. Python script #!/usr/bin/python chmod +x <filename> Добавить путь в системную

    переменную PATH (.zshrc: export PATH="/Users/oleg.nikiforov/scripts") Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  26. Python packages • requests – http запросы • json –

    работа с JSON • pyjq – выполнение jq команд (JSON) • subprocess – выполнение shell команд • argparse – парсинг аргументов • tabulate – красивый вывод данных в консоль Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  27. Бонус: Чистка DerivedData Идея: Хочу быстро чистить DerivedData разбитую по

    проектным папкам Решения: • Чистить вручную папку в каждом проекте • xclean Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  28. Автоматизация Что я знаю: • Через Python удобно выполнять shell

    команды • Через shell легко искать папки и чистить их Что надо сделать: • MVP • Итеративное усложнение функционала Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  29. Автоматизируй сам… правильно: MVP • Ищем все DerivedData папки •

    Просим перечислить папки для чистки • Чистим Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  30. Автоматизируй сам… правильно: Итерации 1. Сортировка результатов поиска по размеру

    2. Подтверждение чистки 3. Возможность почистить все папки 4. Возможность почистить все папки кроме перечисленных 5. Возможность задать локацию для поиска 6. Возможность чистить без подтверждения Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  31. Шаги • Парсинг аргументов: – Базовая директория в которой ищем

    – Флаг для удаления без подтверждения • Делаем поиск путей содержащих директорию "DerivedData", сортируем по размеру: ” ” • Узнаем у пользователя какие папки чистить • Запрашиваем подтверждения действия, если нет флага • Для каждой папки выполняем команду на удаление файлов: "" Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage find '<directory>' -type d -name 'DerivedData’ | gxargs -d \'\n\' du -sh | gsort -hr rm -rf "<folder_path>"/*
  32. Разбор Плюсы: • Если DerivedData хранится попроектно, то не надо

    чистить папки руками • Возможность посмотреть сколько места отжирает DerivedData Минусы: • Деструктивное действие Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  33. Что еще • Собрать приложение из консоли • Сгенерировать пользовательские

    данные • Сгенерировать баркод • Проверить урлы • Проверить валидность данных Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
  34. Q&A Контакты: • Skype: navisnobilite • Twitter: ddr3ams • Github:

    onikiforov Ссылки: • http://ohmyz.sh/ • https://github.com/zsh-users/zsh-autosuggestions • https://developer.android.com/studio/command-line/adb.html • https://github.com/mortenjust/androidtool-mac • http://www.libimobiledevice.org • https://github.com/deszip/xclean • https://github.com/onikiforov/dd_cleaner • https://github.com/onikiforov/scripts Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage