Как стать автором
Обновить

Разворачиваем стенд для UI-тестирования iOS на базе Selenoid

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров1.8K
Всего голосов 20: ↑20 и ↓0+23
Комментарии19

Комментарии 19

День добрый. Очень интересно но ничего не понятно. А почему просто через fastlane не запускать тесты на реальном девайсе (рассмотрим кейс когда одна машина как у вас на скрине один макбук чтобы не учитывать распиливание тестов на несколько машин) ?

Интересное предложение, но я не изучал и не прорабатывал решение с fastlane. Да и каких-то преимуществ по сравнению с selenoid я не вижу. Нужно также поднимать и настраивать окружение, судя по документации к fatlane. Плюс мы хотели получить единую точку подключения через ggr-router.

Просто для iOS разработки fastlane является общим стандартом по сборке/публикации/тестам приложения(й), и я предположил, что вы столкнулись с его ограничениями для ваших задач и хотел узнать подробности. Спасибо.

Можете подсветить моменты, которые непонятны в статье по настройке тестового окружения для iOS?)

Стыдно признать, но ни слова в статье не понял )

Думаю, лучше объяснить на сравнении с нашим подходом.

У нас есть CI Gitlab и есть Mac mini (там стоят все нужные версии Xcode) на котором запускаются задачи с гитлаба на различные эвенты. Например, у нас в Gitlab на создание мерж реквеста создается задача для запуска UI тестов на Mac mini. Описание задачи выглядит следующим образом (gitlab-ci.yml):

ui_tests:
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
  script:
    - fastlane ui_tests

что означает, что на создание МР скачивается репозиторий нашего приложения на Mac mini и запускается баш скрипт который в свою очередь запускает fastlane.

Fastlane логика лежит в папке /fastlane в корне проекта и там описана вся логика, что нужно сделать. Команда:

fastlane ui_tests

означает запустить lane с именем ui_tests в файле /fastlane/Fastfile, который и запустит наши UI тесты. Сам lane пускатель тестов выглядит в базовой версии примерно так:

lane :ui_tests do |options|

	# set Xcode for current proccess.
	xcodes(version: "15.4", select_for_current_build_only: true) 

	result_bundle_path = "fastlane/test_output/Tests-AppBaseUITestTestPlan.xcresult"

    run_tests(
    	workspace: "MyApp.xcworkspace",
    	scheme: "MyAppUITests",
		testplan: "AppBaseUITestTestPlan",
		skip_detect_devices: true,
		result_bundle: true,
		result_bundle_path: result_bundle_path,
		parallel_testing: true, 
		concurrent_workers: 5, # run all the tests on 5 simulators in parallel
		destination: "platform=iOS Simulator,id=4CC7A737-839E-4DFB-82C0-7648DA9C43E7" # iPhone 15 simulator
		# destination: "platform=iOS,id=400008220-00182D69332B801A" # Real iPhone 15 connected to MacOs
	)

	sendResultToAllureForQAVerification(result_bundle_path)

end

В целом это всё, делаем фичу в своей ветке, потом в основную ветку создаем МР и запускается каскад различных тестов, в том числе и UI тесты.

пс. может быть у вас не нативные приложения, а в webview где нужны свои специальные UI тесты (никогда не сталкивался с web разработкой).

Очень жаль, что ни слова не поняли) видимо не на том языке писал статью, надо было на китайском 🤭

Да, круто, что у вас такое решение используется, опишите свой опыт на хабре, люди почитают, оценят, используют ваш опыт.

Я почитал что такое appium, и теперь понял весь контекст вашей статьи. Это получается у вас отдельный от android и iOS команды человек пишет кроссплатформенные тесты (не на нативном для платформы языке), а appium позволяет унифицировать апи для тестирования независимо под какую платформу запускаются тесты. Прикольно конечно, не знал что так можно) Но, к сожалению, нас, нативных разработчиков, заставляют писать тесты самим, поэтому мы пишем их на нативном Swift / Kotlin и запускаем сразу через Xcode / JUnit (fastlane просто мелкая прослойка).

Наверное статью стоило назвать "Разворачиваем стенд для Appium кроссплатформенных UI-тестов iOS на базе Selenoid" чтобы не вводить в заблуждение нативных разработчиков.

За статью спасибо, много нового для себя открыл)

Да для appium у нас пишут тесты сами тестировщики) А нативные тесты пишут разработчики)

Selenoid не умеет работать с нативом, это аналог Selenium Grid. Поэтому подразумевается, что Selenoid в название статьи сразу все раставит на свои места)

Хотя и fastlane умеет работать с appium)

Вам тоже спасибо, что почитали статью и предложили альтернативное решение)

у нас пишут тесты сами тестировщики

завидую вам, у нас они нам тоже помогали писать тесты (но на нативе) и релизы тестили еще ручным, но потом они устали и пролобировали у начальства чтобы мобилки больше не тестировать им (даже ручным), а нам выбили время чтобы сделать 100% тест коверажд, сидим уже квартал пилим коверадж до приемлемого уровня. А тестировщики ушли на веб, там вроде с тестами совсем всё плохо. Сейчас мы релизим в пятницу в конец рабочего дня чтобы еще сильнее подстегнуть писать хорошие тесты))

У нас нет ненативных тестов. Андроид разработчики пишут тесты на колтине (UI тесты + Unit тесты + Snapshot тесты + UI_Prod_API тесты), а мы пишем на Swift тоже самое. Я сначала был не восторге, но теперь поменял своё мнение, мы теперь можем рефакторить весь проект не боясь что-то сломать, потому что высокий коверадж, и как говорил выше, мы можем хоть в субботу ночью катнуть релиз, у нас релиз настроен одной кнопкой в CI.

Но хочу подчеркнуть, у нас намного проще приложение чем клиент для банка. Возможно в ваших условиях у нас бы такое не заработало.

Да в банковском клиенте много нюансов. Просто нам писать и поддерживать разные тесты на swift и java/kotlin слишком затратно

Не указана версия аппиума.

В блоке с конфигами для аппиума и селеноида нет пояснения, где создавать файлы и как называть. В конфиге селеноида есть пути до файлов, но снова нет пояснения, что то за файлы и что в них должно быть и почему такие пути.

Нет объяснения параметров запуска селеноида.

Опечатка в команде для аппиум-доктора.

И нет варианта с запуском симулятора.

Пока что по этой статье шаг за шагом выполнить вряд ли получится задуманное.

А вот и критика подъехала 🤣

За очепятку спасибо 👍

Наверное логично, что по команде ставится версия appium актуальная для вашей ОС

Если вам непонятно, что за файлы, то читайте документацию к selenoid и appium

Для настройки под симуляторы есть ссылка в статье, а я настраивал для реальных девайсов. Поэтому и описывал свой опыт

И если вам нужно настроить тестовую среду под ключ, так это денег стоит)

Интересная реакция. Вам дали список недочетов, некоторые из которых будут блокировать повтор действий из этой статьи, а в ответ — 🤣. Прошлый материал был более профессиональным.

Может, надо более точечно было написать, что вот тут:
Appium настроен, теперь можно переходить к настройке конфигурации. Создаем конфиг для Appium и конфиг для Selenoid:
неплохо было бы указать, какой именно файл создается и где.

А тут
        "image": ["appium", "--config", "/Users/mobilefarm.am/selenoid/config/appium/iphonex.json"]
поделиться секретным содержимым файла iphonex.json .

Для людей же пишете, а не для KPI по статьям на отдел.

С версиями аппиума тоже есть нюанс. Видимо, вы не в курсе, но раньше при установке беты второго аппиума для IP из России сыпались интересные сообщения в консоль. А может там еще и какие-то скрипты дополнительно исполнялись. И потому было бы неплохо иметь какие-то гарантии, что никаких сюрпризов не будет при установке и после (вы же в альфе делаете какие-то проверки, а не тупо ставите всё подряд?).

И если вам нужно , нет, спасибо, давайте без предположений. Я просто хотел почитать качественную статью.

А вы тут за ревью статей отвечаете, что даете мне список недочетов?

И потому было бы неплохо иметь какие-то гарантии, что никаких сюрпризов не будет при установке и после

Интересный вы конечно человек, какие вам и кто может дать гарантии, что у вас не будет сюрпризов? Да никто вам таких гарантий не даст.

Если у вас Intel, тогда нужна версия AMD для M1, M2 и т.д. Соответственно, нужна версия ARM.

Можете объяснить эту фразу?

Здесь речь про тип процессора

Зарегистрируйтесь на Хабре, чтобы оставить комментарий