Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Mobile Development
Code

Автоматизация тестирования пользовательского интерфейса на Android

Difficulty:BeginnerLength:MediumLanguages:

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

Введение

Библиотека поддержки тестирования Android включает в себя фреймворк UIAutomator, который может использоваться для автоматического тестирования черного ящика в приложениях для Android. Внедренный в API-уровне 18, фреймворк позволяет разработчикам моделировать действия пользователей над виджетами, составляющими пользовательский интерфейс приложения.

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

Предпосылки

Чтобы следовать уроку, вам нужно:

  • последняя версия Android Studio
  • устройство или эмулятор, работающий под управлением Android 4.3 или выше
  • базовое понимание JUnit

1. Установка зависимостей

Чтобы использовать фреймворк UI Automator в вашем проекте, отредактируйте файл build.gradle в каталоге app вашего проекта, добавив следующие зависимости:

Теперь кнопка Sync Now должна появиться на экране. Когда вы нажмете на нее, вы должны увидеть следующую ошибку:

Error while syncing project

Нажмите ссылку Установить репозиторий и синхронизировать проект, чтобы установить Android Support Repository.

Если вы используете библиотеку appcompat-v7 версии 22.1.1, вам нужно добавить следующую зависимость, чтобы убедиться, что приложение и его тесты используют одну и ту же версию com.android.support:support-annotations:

Далее, из-за ошибки в Android Studio, вам нужно исключить файл с именем LICENSE.txt с помощью packagesOptions. Если вы не сделаете этого, это приведет к следующей ошибке при попытке запустить тест:

Добавьте следующий фрагмент внизу файла build.gradle:

2. Создайте тестовый класс

Создайте новый тестовый класс CalculatorTester, создав файл с именем CalculatorTester.java внутри каталога androidTest. Чтобы создать тест UI Automator, ваш класс должен наследоваться от InstrumentationTestCase.

CalculatorTesterjava should be inside androidTest

Нажмите Alt + Insert, а затем нажмите SetUp Method, чтобы переопределить метод setUp.

Generate SetUp Method

Нажмите Alt + Insert еще раз и нажмите Test Method, чтобы создать новый тестовый метод. Назовите этот метод testAdd. Класс CalculatorTester теперь должен выглядеть следующим образом:

3. Расмотрим пользовательский интерфейс Launcher

Подключите Android-устройство к компьютеру и нажмите кнопку «домой» на вашем устройстве, чтобы перейти на главный экран.

Вернитесь на свой компьютер и используйте свой проводник или терминал для поиска в каталоге, где установлен Android SDK. Затем перейдите в каталог tools внутри него и запустите uiautomatorviewer. Это запустит UI Automater Viewer. Вам должен быть представлен экран, который выглядит следующим образом:

UI Automator Viewers interface

Нажмите кнопку, похожую на телефон, чтобы сделать снимок экрана вашего устройства Android. Обратите внимание, что снятый снимок экрана является интерактивным. Нажмите значок «Приложения» внизу. В разделе Детали узла справа вы можете увидеть различные детали вашего выбора, как показано ниже.

Apps icon details

Чтобы взаимодействовать с элементами на экране, фреймворк тестирования UI Automator должен иметь возможность однозначно идентифицировать их. В этом учебнике вы будете использовать либо text, и content-desc, либо class элемента, чтобы однозначно идентифицировать его.

Как вы можете видеть, значок Приложения не имеет text, но у него есть content-desc. Запишите его значение, потому что вы будете использовать его на следующем шаге.

Выберите Android-устройство и нажмите значок «Приложения», чтобы перейти к экрану, на котором отображаются приложения, установленные на устройстве. Вернитесь в UI Automator Viewer и сделайте еще один снимок экрана. Поскольку вы будете писать тест для приложения Calculator, щелкните его значок, чтобы просмотреть его детали.

Calculator icon details

На этот раз content-desc пустой, но text содержит значение Calculator. Запомните это.

Если на вашем Android-устройстве запущен другой ланчер или другая версия Android, экраны и детали узла будут разными. Это также означает, что вам придется внести некоторые изменения в свой код в соответствии с операционной системой.

4. Подготовка тестовой среды

Вернитесь в Android Studio, чтобы добавить код в метод setUp. Как следует из его названия, метод setUp должен использоваться для подготовки тестовой среды. Другими словами, здесь вы указываете, что нужно сделать, прежде чем запускать фактический тест.

Теперь вы будете писать код, чтобы имитировать то, что вы сделали на своем устройстве Android на предыдущем шаге:

  1. Нажмите кнопку home, чтобы перейти на главный экран.
  2. Нажмите значок «Приложения», чтобы просмотреть все приложения.
  3. Запустите приложение «Калькулятор», нажав на его значок.

В своем классе объявите поле типа UiDevice и назовите его device. Это поле представляет собой Android-устройство, и вы будете использовать его для имитации взаимодействия с пользователем.

В методе setUp инициализируйте device, вызвав метод UiDevice.getInstance, передав экземпляр Instrumentation, как показано ниже.

Чтобы имитировать нажатие кнопки home на устройстве, вызовите метод pressHome.

Затем вам нужно смоделировать событие click на значке Apps. Вы не можете сделать это немедленно, потому что Android-устройству потребуется время, чтобы перейти на главный экран. Попытка щелкнуть значок «Приложения» до того, как он будет виден на экране, вызовет исключение во время выполнения.

Чтобы подождать, чтобы что-то произошло, вам нужно вызвать метод wait у экземпляра UiDevice. Чтобы дождаться появления значка Apps на экране, используйте метод Until.hasObject.

Чтобы определить значок приложения, используйте метод By.desc и передайте ему значение Apps. Вам также необходимо указать максимальную продолжительность ожидания в миллисекундах. Установите его на 3000. Это приводит к следующему коду:

Чтобы получить ссылку на значок «Приложения», используйте метод findObject. После того, как у вас есть ссылка на значок Приложения, вызовите метод click для имитации щелчка.

Как и раньше, нам нужно подождать, пока значок Калькулятора появится на экране. На предыдущем шаге вы видели, что значок калькулятора можно однозначно идентифицировать по его полю text. Мы вызываем метод By.text, чтобы найти значок, передавая Calculator.

Используйте методы findObject и click, чтобы получить ссылку на значок калькулятора и эмулировать клик.

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

Запустите приложение «Калькулятор» на своем устройстве Android и используйте UI Automater Viewer, чтобы инспектировать его. После захвата снимка экрана щелкните кнопки, чтобы увидеть, как вы можете однозначно идентифицировать их.

Для этого тестового примера вы заставим калькулятор вычислить значение 9 + 9 = и проверим, показывает ли он 18 в качестве результата. Это означает, что вам нужно знать, как идентифицировать кнопки с метками 9, + и =.

Inspecting the UI of the calculator app

На моем устройстве я собрал следующее из инспекции:

  • Кнопки, содержащие цифры, имеют соответствующие значения text.
  • Кнопки, содержащие символы + и =, имеют значения content-desc, установленные как plus и equals соответственно.
  • Результат показан в виджетах EditText.

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

6. Создаем тест

На предыдущих шагах вы уже узнали, что вы можете использовать метод findObject вместе с By.text или By.desc, чтобы получить ссылку на любой объект на экране. Вы также знаете, что вам нужно использовать метод click для имитации клика на объекте. Следующий код использует эти методы для выполнения вычисления 9 + 9 =. Добавьте его в метод testAdd класса CalculatorTester.

На этом этапе вам нужно подождать результата. Однако вы не можете здесь использовать Until.hasObject, потому что EditText, содержащий результат, уже находится на экране. Вместо этого вы должны использовать метод waitForIdle, чтобы дождаться завершения вычисления. Опять же, максимальная продолжительность ожидания может составлять 3000 мс.

Получите ссылку на объект EditText с помощью методов findObject и By.clazz. Когда у вас есть ссылка, вызовите метод getText, чтобы определить результат вычисления.

Наконец, используйте assertTrue, чтобы проверить, что результат равен 18.

Теперь ваш тест завершен.

6. Запуск теста

Чтобы запустить тест, на панели инструментов Android Studio выберите класс CalculatorTester из раскрывающегося списка и нажмите кнопку play справа.

Select CalculatorTester and press play

После завершения сборки тест должен быть выполнено и успешно завершен. Во время теста вы сможете увидеть автоматизацию пользовательского интерфейса на вашем устройстве Android.

Test Results

Заключение

В этом уроке вы узнали, как использовать фреймворк тестирования Automator UI и UI Automater Viewer для создания тестов пользовательского интерфейса. Вы также видели, как легко запускать тесты с помощью Android Studio. Несмотря на то, что мы протестировали довольно простое приложение, вы можете применить концепции, которые вы здесь изучили, для тестирования практически любого приложения для Android.

Вы можете узнать больше об библиотеке поддержки тестирования на веб-сайте разработчиков Android.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.