Автоматизация тестирования iOS-приложений с помощью UIAutomation

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

UIAutomation позволяет писать скрипты для проверки iOS приложений. Нет необходимости в установке, так как он встроен в набор инструментов Xcode, если только потребуется установить Xcode. Особенностями инструмента является то, что тесты пишутся на JavaScript и мы можем запускать тесты как на симуляторе, так и на реальном устройстве.

image

image

Тестирование UI


UIAutomation позволяет разбивать экраны приложения на UI элементы и работать отдельно с ними. Проверять на отображение, на правильное выполнение последовательных действий в скрипте, на отображение после скролинга, на корректность текста в выводимых сообщениях и т. д.

image

Более подробную информацию можно найти по ссылкам, где на примерах реализованы основные возможности использования UIAutomation:
developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UIAutomation.html
code.tutsplus.com/tutorials/introduction-to-ios-testing-with-ui-automation--cms-22730
blog.manbolo.com/2012/04/08/ios-automated-tests-with-uiautomation
devmonologue.com/ios/debug/ui-automation-in-xcode
developer.apple.com/library/ios/documentation/DeveloperTools/Reference/UIAutomationRef

Примечание к информации из предоставленных статей:

  1. Необходимо учитывать, что окно Instruments (Product → Profile) запускается только если исходный код приложения скомпилирован без ошибок;
  2. Тесты запускаются только с одного файла, поэтому остальные дополнительные скрипты можно подключать в начале через '#import';
  3. UIAutomation понимает работу JavaScript только с UIElements, поэтому если при работе возникла необходимость в использовании существующих функций, то возможно их скачать как отдельные библиотеки js и подключаться также через '#import';
  4. В UIAutomation встроена запись действий, которая поможет при написании тестов.

Тестирование средствами Node.js


Для проверки основного функционала не достаточно проверять только UI, существует необходимость обрабатывать данные полученные по запросам к БД или API, по возможности.
В помощь приходит платформа Node.js.

Общая информация и полезные ссылки с примерами использования:
ru.wikipedia.org/wiki/Node.js
learn.javascript.ru/screencast/nodejs

Очень понятная документация с примерами представлена на официальном сайте: nodejs.org/api/http.html
frontender.info/absolute-beginners-guide-to-nodejs
www.npmjs.com/search? q=node

Примечание:

  1. После установки Node.js также необходимо скачать модули, по которым будет проходить работа (например, http, sql, fs, net и т.д.). Удобно через команду в терминале: npm install ;
  2. В UIAutomation работать с запросами можно через UIAHost, запуская отдельный скрипт по команде node, при этом необходимо знать абсолютные пути к команде (на изображении) и скрипту.

Пример:
//post request
function postRequest(host, path, bodyFile){ var result = host.performTaskWithPathArgumentsTimeout("/usr/local/bin/node", ["/Users/admin/post.js", path, bodyFile], 30); return "exitCode: " + result.exitCode + " stdout: " + result.stdout + " stderr: " + result.stderr; }

В get.js:

image

Проверить работу можно через терминал:

image

Описание самого класса: developer.apple.com/library/ios/documentation/UIAutomation/Reference/UIAHostClassReference/index.html#//apple_ref/javascript/instm/UIAHost/performTaskWithPathArgumentsTimeout

Запуск тестов


Запускать тесты можно через:
  • GUI UIAutomation;
  • терминал.

Команда запуска в терминале зависит от версии Xcode. При Xcode Version 7.3.1 команда имеет вид:
instruments -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.xrplugin/Contents/Resources/Automation.tracetemplate -w "iPhone 5s (9.3) [8DE6DD09-3316-4952-9C18-AFA674224E81] (Simulator)" Application.app -e UIASCRIPT /Users/admin/Documents/SampleTestScripts/TestSuit.js -e UIARESULTSPATH /tmp

Где идет указание абсолютных путей к инструменту UIAutomation, симулятору или UDID подключенного устройства (которое можно узнать через iTunes), путь к .app приложения, путь к файлу с тестами и по желанию, можно отметить папку для результатов.
Пример запуска через полное написание команды в терминале и запуска bash файла uiAutoRun.sh:
image
Подробнее по формированию bash файлов для запуска скриптов можно прочитать:
sohail.io/2014/09/20/xcode-6-and-running-uiautomation-test-from-the-command-line

Заключение


Хотелось отметить, что одной из не решенных задач осталась проблема автоматического управления сетью на устройстве. Были предложены, но не реализованы 2 способа решения:
  1. Использовать Network Link Conditioner и отключать подключенное устройство путем задания определенных правил с помощью межсетевых экранов ipfw (в некоторых OS X, например, El Capitan заменой является pf). Минусами данного способа являются: риск отключения всего интернета на компьютере, что помещает интеграции с CI; нет гарантий, что устройство не подключится по wi-fi к другой сети.
    www.openbsd.org/faq/pf/config.html
    spin.atomicobject.com/2016/01/05/simulating-poor-network-connectivity-mac-osx
    www.ibm.com/developerworks/ru/library/l-ipf_FreeBSD
    wiki.dieg.info/packet_filter_firewall_pf
    adminunix.ru/bazovy-e-komandy-upravlyaniya-pfctl
  2. Отключать сеть из кода:

var target = UIATarget.localTarget();

target.dragFromToForDuration ({x:0.1, y:557.00}, {x:211.00, y:206.00},
0.5); //to expose the actions panel on iOS

target.frontMostApp ().mainWindow ().elements ()[«Wifi»].tapWithOptions ({tapOffset:{x:0.44, y:0.47}});

Есть необходимость использования взломанного устройства.

В данной статье для автоматизации тестирования iOS приложений был рассмотрен инструмент UIAutomation, помимо него существует ряд других инструментов:
www.joecolantonio.com/2015/08/31/the-top-6-ios-automation-tools-for-mobile-testing
habrahabr.ru/company/mailru/blog/244807

Комментарии (0)

© Habrahabr.ru