2. Обо мне
• 6+ лет в тестировании мобильных
приложений
• iOS, Android, Android IoT, Backend
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
3. О докладе
• Рутинные задачи раздражают
• Как я пришел к автоматизации
• Демо и разбор скриптов
• Примеры
• Python
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
4. Вступление
Автоматизация, да не тестирования
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
5. Рутинные задачи раздражают
• Установить билд
• Сделать скриншот
• Снять видео
• Etc.
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
6. Установить билд – a path to scripting
"A long time ago in a galaxy far, far away...."
• Android проект: телефоны + планшет
• Частое обновления билдов
• Минимум 6 девайсов для теста
• Сборки на ftp, доступ через браузер
WTF!!!
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
8. Постановка задачи
"Хочу быстро ставить билды без регистрации и смс"
Что может ADB:
• Узнать какие устройства подключены
• Удалить приложение
• Установить .apk файл
Что еще надо:
• Указать какое приложение установить
• Скачать .apk файл
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
9. Процесс
• Подключаем девайс
• Запускаем .sh скрипт
• Подключаем следующий девайс
• Запускаем .sh скрипт
• …
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
10. Что можно улучшить
• Установить на несколько девайсов без
перезапуска скрипта
• Проверить перед скачиванием что есть
новая сборка
• Проверить что сборка на девайсе устарела
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
11. Автоматизируй… сам
1. Поставить задачу
2. Придумать алгоритм
3. Реализовать каждый шаг
4. Свести в одно целое
5. ...
6. Profit
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
12. Скриншот с Android девайса
Идея:
Сделать скриншот и сохранить на машину
Решения:
• Физические кнопки + почта
• Приложение на девайсе
• Android Studio
• Сторонние приложения на компе (AndroidTool)
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
13. Автоматизируем
Что я знаю:
• ADB позволяет сделать скриншот с подключенного девайса
• Скриншот сохраняется на девайсе
Что надо сделать:
• Снять скриншот
• Скачать файл с девайса на машину
• Удалить файл с девайса
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
14. Что можно улучшить
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
15. Шаги
• Получаем имя девайса и версию ос:
""
• Получаем данные про активность:
"'"
• Выкусываем название пакета и название активности
• Получаем текущее время
• Комбинируем данные в название файла
• Делаем скриншот:
""
• Скачиваем скриншот
""
• Удаляем скриншот с девайса
""
Автоматизация рутинных задач для тестирования мобильных приложений @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
17. Разбор
Плюсы:
• Быстро вызывается, особенно с помощью
zsh + zsh-autosuggestions
• Кастомизация имени файла
• Выбор девайса из подключенных (опционально)
Минусы:
• Сбои adb
• Landscape скриншоты приходится переворачивать вручную… или не
приходится
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
18. Видео с Android девайса
Идея:
Записать видео и сохранить на машину
Решения:
• Screencast на комп + запись экрана
• Сторонние приложения на компе (AndroidTool)
• ???
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
19. Автоматизируем
Что я знаю:
• ADB позволяет записать видео с экрана подключенного девайса
• Видео сохраняется на девайсе
Что надо сделать:
• Начать запись видео
• Прервать запись видео
• Скачать файл с девайса на машину
• Удалить файл с девайса
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
20. Шаги
• Получаем имя девайса и версию ос:
""
• Данные про активность не нужны
• Выкусываем название пакета:
"'"
• Получаем текущее время
• Комбинируем данные в название файла
• Стартуем запись видео:
""
• Прерываем запись видео:
” "
• Скачиваем видео
""
• Удаляем видео с девайса
""
Автоматизация рутинных задач для тестирования мобильных приложений @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>
22. Разбор
Плюсы:
• Быстрый способ сделать запись экрана
• Работает нативно
• Кастомизация имени файла
Минусы:
• Сбои adb
• Android 4.4+
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
23. Не андроидом единым
• Сделать скриншот: "idevicescreenshot"
• Удалить апп, скачать ipa и установить: "ideviceinstaller"
• Сбилдить апп из терминала: "xcodebuild"
• Снять видео???
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
24. Скриншот с iOS девайса
Идея:
Сделать скриншот и сохранить на машину
Решения:
• Физические кнопки + почта
• Xcode
• Сторонние приложения на компе (AndroidTool)
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
25. Автоматизация
Что я знаю:
• Нет открытого API для взаимодействия с системой
• Есть libimobiledevice:
– Делает скриншот и сразу сохраняет на машину в формате tiff
– Обращение к девайсу по UDID
Что надо сделать:
• Узнать UDID подключенного девайса
• Сделать скриншот
• Сконвертировать скриншот из tiff в png
• Удалить tiff файл
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
26. Шаги
• Создаем список девайсов с именем и UDID
• Узнаем какие девайсы подключены в данный момент:
""
• Если девайса нет в списке, узнаем его имя и предлагаем добавить:
""
Узнаем версию ос:
""
• Получаем текущее время
• Комбинируем данные в название файла
• Делаем скриншот:
""
• Конвертируем файл из tiff в png
• Удаляем tiff файл
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
device_id –l
idevicename -u <udid>
ideviceinfo -u <udid> | grep 'ProductVersion'
idevicescreenshot -u <udid> <filepath>.tiff
28. Разбор
Плюсы:
• Быстро вызывается
• Кастомизация имени файла
• Выбор девайса из подключенных
Минусы:
• Landscape скриншоты приходится переворачивать вручную
• Developer disk image
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
29. Python
Работает из коробки (MacOS 10.11.6)
Легкий в освоении, читабельный синтаксис
PyCharm
Развитое комьюнити
Много библиотек, легкая (обычно) установка
Скрипты запускаются быстро
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
30. Python script
#!/usr/bin/python
chmod +x <filename>
Добавить путь в системную переменную PATH
(.zshrc: export PATH="/Users/oleg.nikiforov/scripts")
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
31. Python packages
• requests – http запросы
• json – работа с JSON
• pyjq – выполнение jq команд (JSON)
• subprocess – выполнение shell команд
• argparse – парсинг аргументов
• tabulate – красивый вывод данных в консоль
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
32. Бонус: Чистка DerivedData
Идея:
Хочу быстро чистить DerivedData
разбитую по проектным папкам
Решения:
• Чистить вручную папку в каждом проекте
• xclean
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
33. Автоматизация
Что я знаю:
• Через Python удобно выполнять shell команды
• Через shell легко искать папки и чистить их
Что надо сделать:
• MVP
• Итеративное усложнение функционала
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
34. Автоматизируй сам… правильно:
MVP
• Ищем все DerivedData папки
• Просим перечислить папки для чистки
• Чистим
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
35. Автоматизируй сам… правильно:
Итерации
1. Сортировка результатов поиска по размеру
2. Подтверждение чистки
3. Возможность почистить все папки
4. Возможность почистить все папки кроме
перечисленных
5. Возможность задать локацию для поиска
6. Возможность чистить без подтверждения
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
36. Шаги
• Парсинг аргументов:
– Базовая директория в которой ищем
– Флаг для удаления без подтверждения
• Делаем поиск путей содержащих директорию "DerivedData",
сортируем по размеру:
”
”
• Узнаем у пользователя какие папки чистить
• Запрашиваем подтверждения действия, если нет флага
• Для каждой папки выполняем команду на удаление файлов:
""
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
find '<directory>' -type d -name 'DerivedData’ | gxargs -d 'n'
du -sh | gsort -hr
rm -rf "<folder_path>"/*
38. Разбор
Плюсы:
• Если DerivedData хранится попроектно, то не надо
чистить папки руками
• Возможность посмотреть сколько места отжирает
DerivedData
Минусы:
• Деструктивное действие
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage
39. Что еще
• Собрать приложение из консоли
• Сгенерировать пользовательские данные
• Сгенерировать баркод
• Проверить урлы
• Проверить валидность данных
Автоматизация рутинных задач для тестирования мобильных приложений @ddr3ams #testingstage