Автоматизация тестирования iOS-приложений с помощью UIAutomation
UIAutomation позволяет писать скрипты для проверки iOS приложений. Нет необходимости в установке, так как он встроен в набор инструментов Xcode, если только потребуется установить Xcode. Особенностями инструмента является то, что тесты пишутся на JavaScript и мы можем запускать тесты как на симуляторе, так и на реальном устройстве.
Тестирование UI
UIAutomation позволяет разбивать экраны приложения на UI элементы и работать отдельно с ними. Проверять на отображение, на правильное выполнение последовательных действий в скрипте, на отображение после скролинга, на корректность текста в выводимых сообщениях и т. д.
Более подробную информацию можно найти по ссылкам, где на примерах реализованы основные возможности использования 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
Примечание к информации из предоставленных статей:
- Необходимо учитывать, что окно Instruments (Product → Profile) запускается только если исходный код приложения скомпилирован без ошибок;
- Тесты запускаются только с одного файла, поэтому остальные дополнительные скрипты можно подключать в начале через '#import';
- UIAutomation понимает работу JavaScript только с UIElements, поэтому если при работе возникла необходимость в использовании существующих функций, то возможно их скачать как отдельные библиотеки js и подключаться также через '#import';
- В 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
Примечание:
- После установки Node.js также необходимо скачать модули, по которым будет проходить работа (например, http, sql, fs, net и т.д.). Удобно через команду в терминале: npm install
; - В 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:
Проверить работу можно через терминал:
Описание самого класса: 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:
Подробнее по формированию bash файлов для запуска скриптов можно прочитать:
sohail.io/2014/09/20/xcode-6-and-running-uiautomation-test-from-the-command-line
Заключение
Хотелось отметить, что одной из не решенных задач осталась проблема автоматического управления сетью на устройстве. Были предложены, но не реализованы 2 способа решения:
- Использовать 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 - Отключать сеть из кода:
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