Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Мобильная автоматизация с appium - опыт написания первого теста.

automation
mobile
appium
python
Теги: #<Tag:0x00007fedbf361118> #<Tag:0x00007fedbf360fd8> #<Tag:0x00007fedbf360e20> #<Tag:0x00007fedbf360c40>

#1

Предыстория

Всем привет. Недавно на сайте был опросник по мобильное автоматизации. Я тоже в нем принял голосование - хотел бы научиться автоматизировать под #mobile:appium . Но решил попробовать сам - разобраться. Возможно это не так и сложно? На титул гуру я не претендую, и хотел бы описать что у меня получилось.

Почему Python Appium?

Сначала добавлю что есть опыт автоматизации на #programming:python API + Selenium WebDriver. Поэтому выбор делать не приходилось. Промониторив какие есть фремворки - решил остановиться на #mobile:appium . Плюсы и минусы описывать не буду - возможно он и не самый востребованый а возможно и самый ) Но то что он кроссплатформенный - это большой плюс.

Окружение

Следующим шагом был вопрос - а что собственно автоматизировать? Нужно иметь приложение. Так как я использую iPhone SE и рабочий компьютер у меня Macbook Pro 2015 года. То начать я решил с iOS. Я нашел опенсорсное приложение на github. Вот здесь я выбрал обычный калькулятор:

Скопировал себе и открыл через Xcode. А потом сбилдил под testing. На сколько я понимал - что если билдить не под тестирование то могут быть проблемы с доступом до приложения через appium. Проверять не стал :slight_smile:

Следующим шагом была установка Симулятора. Он есть в Xcode - так что это упростил работу. Сначала я хотел запустить все на своем телефоне - у меня это получилось, но в симуляторе есть все iOS устройста а не только iPhone SE :slight_smile:

Установка Appium

Установив appium через :

> brew install appium

и плавно перешел к написанию самих тестов.

Попробовал законектиться к девайсу, но не получилось. Я получал различного рода ошибки которые сложно было решил поиском в google. Как оказалось - основная проблема была в написании правильных Desired capabilities.

Я попробовал пойти другим путем. Я скачал десктопное приложение Appium.

https://github.com/appium/appium-desktop/releases/tag/v1.2.6

Дальше нажимаем по иконке лупы в правом верхнем углу - Start Inspector Session. Мы попадаем на окно где можно поиграться с Desired Capabilities .

В итоге у меня получилось сделать запуск мобильного приложения в ручном режиме через это окно.

Тут же появилось окно в котором можно найти и протестировать нужные локаторы.

Последний этап - сам тест. Он в примере. Сам по себе очень простой. Я додаю два числа и потом проверяю что в окне мне выводиться правильное значение.

Вот пример моих настроек :

{

"platformName": "iOS",
"platformVersion": "11.1",
"deviceName": "iPhone SE",
"app": "/Users/alexandrpolishchuk/Library/Developer/Xcode/DerivedData/Calculator-anfzoxkukfwxcdgkadxzdglxaxdv/Build/Products/Debug-iphonesimulator/Calculator.app"

}

тут в принципе все понятно. app - абсолютный путь к вашей сбилдженой мобильной апке.

Первый тест

Тест базовый - максимально просто, главное что бы заработало :slight_smile:

Вот что у меня получилось

from appium import webdriver
desired_caps = {
“platformName”: “iOS”,
“platformVersion”: “11.1”,
“deviceName”: “iPhone SE”,
“app”: “/Users/alexandrpolishchuk/Library/Developer/Xcode/DerivedData/Calculator-anfzoxkukfwxcdgkadxzdglxaxdv/Build/Products/Debug-iphonesimulator/Calculator.app”
}

def test_sum_of_two_integers():
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    driver.find_element_by_name('9').click()
    driver.find_element_by_name('+').click()
    driver.find_element_by_name('1').click()
    driver.find_element_by_name('=').click()
    numbers_field = driver.find_element_by_xpath('//XCUIElementTypeStaticText')
    assert int(numbers_field.text) == 10
    driver.quit()

Запускаем командой:

py.test -v filename.py

Выводы

Как оказалось - начать автоматизировать это не так и сложно. Обычно я вначале начинаю смотреть документацию, если не получается - то ищу тематические статьи или видео. И с #mobile:appium я немного застрял на правильных настройках Desired capabilities -когда у тебя “все правильно” но не работает :slight_smile:
Если кто решил повторить мой путь - интересно или у Вас были проблемы?

  • Получилось с первого раза
  • Да застрял на …
  • Не буду даже и пробовать :slight_smile:

0 участников


Python автоматизировать мобильное проложение. как вобще начать ?
Какой capabilities я должен задатьа в appium чтобы протестировать native app?
Мой небольшой пример REST API Python Automation
(Ivan Pletin) #2

Стартовал с тем же стеком: аппиум, пайтон, мак. Самая большая боль была в начале. Мы всей командой сидели и дебажили настройку аппиума. И нормальной документации нет.
А потом норм стало.

Кстати вопрос к тем кто юзает аппиум на маке: тесты быстро запускаются? У меня на Air 2015 уходит около 30 секунд. Пока запустится аппиум, поом эмулятор, потом вебдрайвер


#4

± такое же время


(Yury) #5

Ну, если с запуском эмулятора считать, то у меня на Mac Mini и 60 сек. бывает стартует c Андроидом.


#6

а на других системах не пробовал? может это “фишка” самого апиума )


(Yury) #7

Это фишка эмулятора, думаю. На виндах он тоже не сразу взлетает.


(Ivan Pletin) #8

я грешу на то, что air не очень мощный


(Nikita Barchugov) #9

Пришел в компанию, которая занимается мобильной разработкой и сходу начал искать пути для автоматизации. Тоже Python/Appium и тоже мак, только прошка. Все отлично работает, пытаюсь пилить Page Object и ищу grid решения. Ну и плюсами - куча разных библиотек к питоше, которые облегчают жизнь
При этом не считаю себя способным к программированию, это очень простые инструменты, которые можно освоить очень быстро. До этого писал код только в универе.
Но вот на Android так сходу залететь не получилось с Appium. Сижу учу Java/Espresso


#10

а в чем сложности с #android ?


(vmaximv) #11

Написать Hello world! тоже не сложно вне зависимости от языка.
Построить работающую кросс-платформенную инфраструктуру на appium - это “перманентная” боль.
Планируйте что вы начнете более-менее понимать что происходит и как это исправить, в лучшем случае, после полу-года активной “варки” в этом стеке.


#12

А в чем проблема с андроидом? я немного игрался с ним https://github.com/olyv/WortschatzAppium, может и смогу ответить на какие-то вопросы


#13

Вопрос : какая у тебя версия xcode и как быстро создается simulator folder structure?


(Nikita Barchugov) #14

Не умею я в Java, пришлось учить, щас на udacity курс прохожу:sweat:


(Nikita Barchugov) #15

Да толку писать тесты на яве с аппиумом, если есть еспрессо, которые живут прям в том же репозитории с исходниками


#16

Не спорю, но обсуждали иы appium :smiley:


(Denis Chicherin) #17

Приветствую. А я вот застрял на запуске теста на реальном девайсе иос. Подозреваю, что у appium проблема с запуском iOS 11.1. На симуляторе без проблем поднимается на версии 10.3, а вот с 11.0 начинаются проблемы(хотя тут уже скорее проблемы быстродействия моего компика(мак аир 2011) - симулятор просто грузиться минут 10, а дальше я не выдерживаю). Вообще очень понравился Appium, т.к. без проблем запускается на платформы Android/iOS. Сейчас юзаю Appium+Java+TestNG+Allure - красивые отчетики получаются, особенно когда настроить скрины. А за помощь с запуском на реальных девайсах iOS буду благодарен.


(Eugene Moskalenko) #18

Вроде как, там надо сгенерировать сертификат разработчика и подгрузить его на девайс. Я ради интереса пытался потыкать пару месяцев назад, но уперся в эту фигню…


(Jasper Jhons) #19

Для запуска на реальной мобилке iOS необходимо сгенерить сертификат разработчика (либо пользоваться существующим сертом компании). https://appium.readthedocs.io/en/stable/en/appium-setup/real-devices-ios/
Так же нужно обновить xcode и appium (xcode очень привередлив к версии sdk)


(Andrey Melnichenko) #20

Добрый вечер, подскажите возможно ли настроить среду для создания и запуска тестов в ОС Linux (Ubuntu), где не читаю везде либо Винда либо МАК


(Fiodar Motin) #21

Да в докере можно развернуть тесты на эмуляторе, если через docker-compose, то будет что то типо. Ну и потом remove кидаете просто localhost:ваш порт/wd/hub

version: '2'

services:
  selenium_hub:
    image: selenium/hub:3.7.1
    ports:
      - 4444:4444

  appium_android_device:
    image: appium/appium
    depends_on:
      - selenium_hub
    privileged: true
    volumes:
      - /dev/bus/usb:/dev/bus/usb
      - ~/.android:/root/.android
    environment:
      - CONNECT_TO_GRID=True
      - SELENIUM_HOST=selenium_hub