В настоящее время автоматизация тестирования мобильных приложений является молодым и неизведанным направлением в тестировании. Существует не так много инструментов позволяющих это проводить. В данной статье, на примере инструмента 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 <name_module>;
  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

Описание самого класса

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


Запускать тесты можно через:

  • 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 файлов для запуска скриптов можно прочитать тут.

Заключение


Хотелось отметить, что одной из не решенных задач осталась проблема автоматического управления сетью на устройстве. Были предложены, но не реализованы 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}});</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>.
Поделиться с друзьями
-->

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


  1. iSnifer
    26.01.2017 12:11
    +1

    Начиная с Xcode 8 на смену UIAutomation пришел XCUITest Framework — https://forums.developer.apple.com/thread/9169. Материал несколько неактуален уже.