-
Notifications
You must be signed in to change notification settings - Fork 6
Home
Вся система состоит из 3 частей:
-
Мак у меня на столе - подключен как нода в дженкинсе (naboo). Для того, чтобы все работало, необходимо запустить на нем jenkins-agent (перейти в naboo и там будет написано как это сделать)
-
К нему необходимо подключить usb-хаб для Android девайсов. iOS девайсы можно подключать напрямую через type-c выходы.
На маке должны быть установлены:
- python 3 (сейчас стоит 3.7)
- appium (сейчас стоит 1.18.3, обновлять нужно хотя бы пару раз в год, но осторожно. Обычно когда выходит новая iOS (подождать месяц-полтора, пока добавят поддержку и починят баги), и когда выходит новый android (также, подождать пока добавят поддержку и починят баги). Инструкции по установке тут
- appium также требует nodejs и npm
- android sdk
- xcode (нужно обновлять раз в год после выхода новой ios)
- библиотека libimobiledevice - по идее ее с собой тянет appium, но иногда что-то идет не так и ее нужно ставить вручную
Состоит из нескольких проектов:
Это ситема отчетов, представляющая собой веб приложение (бэк - django, фронт - webix, бд - postgres)
Собрать и поднять: cd infrasrtucture/front npm install npm run build
cd infrasrtucture/backend pip3 install -r requirements.txt python3 manage.py runserver localhost:порт
Взять дамп базы можно взять в дженкинсе либо поднять на пустой: python3 manage.py makemigrations python3 manage.py migrate
Внимание, если база пустая, нужно добавить туда девайсы и заимпортить тесты
Содержит сами тесты и некий фреймворк для работы с ними: обвязка для настройки аппиума, фикстуры, шаги, локаторы.
Тесты состоят из фикстур и шагов. Фикстуры - это такие функции, которые запускаются до и после теста в зависимости от скоупа (раз в тестовую сессию, перед каждый тестом, и тд). помечаются декоратором @pytest.fixture. В фикстуры обернуты всякие костыли для того чтобы работать с падением тестов, например если тест закончился (или упал) на экране букмарок, вне зависимости от результата, перед следующим тестом запустится фикстура, которая вернет нас на основной экран с картой. Тело тестов состоит из шагов, шаги лежат в mapsme-appium/steps.
Запуск тестов из командной строки
python3 -m venv ./autotest_env source ./autotest_env/bin/activate pip3 install -r requirements.txt python3 general-ui-autotests/mapsme_appium/setup.py bdist_wheel pip3 install general-ui-autotests/mapsme_appium/dist/mapsme_appium-0.1-py3-none-any.whl
pytest general-ui-autotests/mapsme --rootdir general-ui-autotests/mapsme --html=report.html --log-cli-level=INFO [здесь идут остальные параметры]
Ссписок параметров:
- обязательные
--device-id - указывается id девайса, на котором запускается тест. --apk-name - если запускается на конкретной apk/ipa, то указывать имя файла, например "mapsme.apk" или "mapsme.ipa", если на уже установленном приложении - "release" -k ключ для выборки тестов. это может быть название одного теста, или класса, или файла с тестами. Например "test_bookmark" запустит все тесты в файле test_bookmark.py а "routing" запустит все тесты, в названии которых есть слово routing. Подробности можно почитать в документации к pytest. -m метка. обязательна ТОЛЬКО если параметр -k не задан. тесты помечены всякими разными метками, например bookmark, routing, webview, build_check
- необязательные:
--report-host - урл системы отчетов --refresh-tests - по умолчанию false. при значении true вместо запуска тестов импортит инфу о них в систему отчетов --skip-webview - по умолчанию False, при включенном параметре тесты с использованием webview не запускаются (например тесты где проверяется что-то про каталог маршрутов). нужен потому что в 70% случаев оно не работает спасибо appium))0) --clean-device - удалять ли все установленные мэпсми с телефона. По умолчанию false. Не стоит включать, если тесты запускаются на предустановленном вручную приложении, это его удалит)) --clean-data - дропать ли данные перед запуском тестов (aka удаление папки MapsWithMe), работает очевидно только на андроиде --simulator, по умолчанию false. используется только при локальной отладке на симуляторах/эмуляторах
- необязательные, нужны для дженкинса:
--build-number - номер сборки, по умолчанию 0, в дженкинсе номер берется из сборки на которой идет запуск --session-info - опять же некоторая инфа про дженкинс, по умолчанию вот такая строка, в дженкинсе она собирается скриптом '{"name":"","build_number":"","url":"","started_by":""}'
Помимо ui есть еще monkey тесты на андроид - хаотично тыкают в приложении все подряд и собирают крэши. Для них есть доп параметр --monkey-time - время теста (в секундах, по умолчанию 3600)
По сути то-же самое, что general-ui, только содержит специфичные тесты и настройки для hardware тестов. Там же лежит скрипт для снятия показаний c um24c, написанный на node js
Доп параметры pytest: --is-power, default=False, при включенном параметре перед тестом запустится скрипт для um24c и начет передавать данные в то место, которое указано в --report-host --is-memory, default=False, можно использовать только на андроидах. Помимо красивого графика об энергопотреблении нарисует красивый график о потреблении памяти --is-standart, default=False, нужен для записывания "эталона" показаний --time, default=10, время теста в минутах
Принцип работы: тест представляет из себя ведение по маршруту Москва-Воронеж с подкладыванием координат для эмуляции движения. Время теста определяется параметром. На ios координаты подкладываются напрямую, с андроидом все сложнее, там запускается lockito, так что перед тестом убедиться, что на девайсе установлен локито и там есть сохраненный маршрут Москва-Воронеж
Тут лежат пайплайны, написанные на groovy, позволяющие запускать тесты в дженкинсе. В общем и целом там есть все инфраструктурные джобы, например те, которые мониторят девайсы, и те которые запускают тесты. названия у них совпадают с джобами в дженкинсе
Библиотечка с некоторыми скриптами для дженкинса, к сожалению она должна лежать в корне репозитория и называться именно так