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

Довелось мне поработать немного с Appium. Очень интересный инструмент, с большими возможностями и знакомый для большинства автотестеров, т.к. в использует WebDriver API для взаимодействия с приложениями. Разработчики Appium утверждают, что Appium был разработан в соответствии с философией четырех принципов:

  • Вам не нужно перекомпилировать или модифицировать ваше приложение, для того чтобы автоматизировать его.
  • Вы не должны быть завязаны на определенном языке программирования или фреймворке для того чтобы писать и запускать тесты.
  • Фреймворк мобильного автоматизированного тестирования не должен переизобретать колесо когда дело доходит до автоматизации API
  • Фреймворк мобильного автоматизированного тестирования должен быть open source, в духе и практике.

Как это им удалось можно почитать здесь, а удалось ли, решать нам с вами. Appium поддерживает следующие платформы:

  • iOS
  • Android
  • FirefoxOS

Appium позволяет тестировать нативные, гибридные и web приложения. Тесты можно запускать как на реальных девайсах так и на симуляторах (iOS, FirefoxOS) и эмуляторах (Android).

Appium по сути клиент-сервер который транслирует команды на устройство, для его работы понадобится сам сервер appium и его клиент. Список клиентов доступен здесь.

Чтобы начать пользоваться, нужно сделать несколько телодвижений. На самом деле есть 2 варианта сервера appium, консольное приложение на node.js и GUI для mac .dmg и .exe для винды. Я тут рассмотрю консольное. Так как у меня мак, я для установки всего необходимого воспользовался утилитой homebrew. Для остальных OS необходимо установить node.js затем npm, а затем уже установить с помощью npm сам appium:

1
npm install -g appium

Затем чтобы убедиться, что все хорошо нужно запустить appium-doctor, эта утилита подскажет, если вдруг чего-то не хватает для запуска тестов под appium.

1
appium-doctor

Если у вас не установлен например android sdk, то эта утилита скажет вам об этом и т.д.

Если все хорошо, все переменные окружения и необходимые зависимости установлены, запускаем appium:

1
appium

в ответ получите что-то типа:

1
2
3
info: Welcome to Appium v1.4.16 (REV ae6877eff263066b26328d457bd285c0cc62430d)
info: Appium REST http interface listener started on 0.0.0.0:4723
info: Console LogLevel: debug

тут видно, что appium запущен на порту 4723, что есть порт по умолчанию для него. Собственно дальше наступает очередь тестов. Вариантов что и как тестировать превеликое множество, в статью этого блога они точно не уместятся, поэтому рассмотрим самый простой вариант. Мы запустим на эмуляторе андроида его родной браузер, и откроем какую-нибудь странницу.

Для этого нам понадобится запустить эмулятор андроида или подключить реальный девайс по usb. Единственное вам нужно убедиться что adb устройство видит. Для этого необходимо запустить следующую команду:

1
2
3
$ adb devices
List of devices attached
emulator-5554   device

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

Для начала установим клиент для python

1
pip install Appium-Python-Client

создадим файл test.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from appium import webdriver 
import unittest

class SimpleTest(unittest.TestCase):

    def setUp(self):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['deviceName'] = 'Emulator'
        desired_caps['browserName'] = 'Browser'

        self.driver = webdriver.Remote('http://0.0.0.0:4723/wd/hub', desired_caps)

    def tearDown(self):
        self.driver.quit()

    def testOpenPage(self):
        self.driver.get('https://en.wikipedia.org')
        text = self.driver.find_element_by_xpath('//div/h2').text
        self.assertEquals(text, "Today's featured article")


if __name__ == '__main__':
    unittest.main()

сохраняем его и запускаем

1
python test.py

и наблюдаем как в эмуляторе открывается браузер и запускается тест

Я изначально не ставил целью покрыть все возможности appium в этой статье, то что я описал лишь малая часть его возможностей. А ведь есть еще гибридные приложения, да и просто приложения. Удобство этого инструмента в том, что если вы раньше работали с Selenium/Webdriver, вам не составит особого труда понять принципы работы с appium. Есть поддержка selenium-grid для распараллеливания тестов. И многое другое. Это живой проект который активно развивается, и у него большое будущее. Возможно в будущем я еще вернусь к нему.