В настоящее время автоматизация тестирования мобильных приложений является молодым и неизведанным направлением в тестировании. Существует не так много инструментов позволяющих это проводить. В данной статье, на примере инструмента UIAutomation, покажем возможности и нюансы, с которыми можно столкнуться при создании тест сценариев. Также в статье собраны полезные статьи, которые смогут вам помочь в самом начале работы.
UIAutomation позволяет писать скрипты для проверки iOS приложений. Нет необходимости в установке, так как он встроен в набор инструментов Xcode, если только потребуется установить Xcode. Особенностями инструмента является то, что тесты пишутся на JavaScript и мы можем запускать тесты как на симуляторе, так и на реальном устройстве.
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
Примечание к информации из предоставленных статей:
Для проверки основного функционала не достаточно проверять только 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
Примечание:
Пример:
В get.js:
Проверить работу можно через терминал:
Описание самого класса
Запускать тесты можно через:
Команда запуска в терминале зависит от версии Xcode. При Xcode Version 7.3.1 команда имеет вид:
Где идет указание абсолютных путей к инструменту UIAutomation, симулятору или UDID подключенного устройства(которое можно узнать через iTunes), путь к .app приложения, путь к файлу с тестами и по желанию, можно отметить папку для результатов.
Пример запуска через полное написание команды в терминале и запуска bash файла uiAutoRun.sh:
Подробнее по формированию bash файлов для запуска скриптов можно прочитать тут.
Хотелось отметить, что одной из не решенных задач осталась проблема автоматического управления сетью на устройстве. Были предложены, но не реализованы 2 способа решения:
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 <name_module>;
- В 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:
Проверить работу можно через терминал:
Описание самого класса
Запуск тестов
Запускать тесты можно через:
- 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 файлов для запуска скриптов можно прочитать тут.
Заключение
Хотелось отметить, что одной из не решенных задач осталась проблема автоматического управления сетью на устройстве. Были предложены, но не реализованы 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}});</code>
Есть необходимость использования взломанного устройства.
В данной статье для автоматизации тестирования iOS приложений был рассмотрен инструмент UIAutomation, помимо него существует ряд других инструментов: например <a href="https://www.joecolantonio.com/2015/08/31/the-top-6-ios-automation-tools-for-mobile-testing/">вот</a> и <a href="https://habrahabr.ru/company/mailru/blog/244807/">вот</a>.
Поделиться с друзьями
iSnifer
Начиная с Xcode 8 на смену UIAutomation пришел XCUITest Framework — https://forums.developer.apple.com/thread/9169. Материал несколько неактуален уже.