UIAutomation позволяет писать скрипты для проверки iOS приложений. Нет необходимости в установке, так как он встроен в набор инструментов Xcode, если только потребуется установить Xcode. Особенностями инструмента является то, что тесты пишутся на JavaScript и мы можем запускать тесты как на симуляторе, так и на реальном устройстве.
Тестирование UI
UIAutomation позволяет разбивать экраны приложения на UI элементы и работать отдельно с ними. Проверять на отображение, на правильное выполнение последовательных действий в скрипте, на отображение после скролинга, на корректность текста в выводимых сообщениях и т. д.
Более подробную информацию можно найти по ссылкам, где на примерах реализованы основные возможности использования UIAutomation:
http://ift.tt/2jsjTk5
http://ift.tt/1wAPyPi
http://ift.tt/TycZrY
http://ift.tt/2jskPVE
http://ift.tt/2jsxS9B
Примечание к информации из предоставленных статей:
- Необходимо учитывать, что окно Instruments(Product → Profile) запускается только если исходный код приложения скомпилирован без ошибок;
- Тесты запускаются только с одного файла, поэтому остальные дополнительные скрипты можно подключать в начале через '#import';
- UIAutomation понимает работу JavaScript только с UIElements, поэтому если при работе возникла необходимость в использовании существующих функций, то возможно их скачать как отдельные библиотеки js и подключаться также через '#import';
- В UIAutomation встроена запись действий, которая поможет при написании тестов.
Тестирование средствами Node.js
Для проверки основного функционала не достаточно проверять только UI, существует необходимость обрабатывать данные полученные по запросам к БД или API, по возможности.
В помощь приходит платформа Node.js.
Общая информация и полезные ссылки с примерами использования:
http://ift.tt/2jsurQt
http://ift.tt/2jsxwQr
Очень понятная документация с примерами представлена на официальном сайте: nodejs.org/api/http.html
http://ift.tt/2jszFvx
http://ift.tt/2jso8MK
Примечание:
- После установки 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:
Проверить работу можно через терминал:
Описание самого класса: http://ift.tt/2jso1AK
Запуск тестов
Запускать тесты можно через:
- GUI UIAutomation;
- терминал.
Команда запуска в терминале зависит от версии Xcode. При Xcode Version 7.3.1 команда имеет вид:
instruments -t /Applications/http://ift.tt/1vOqCSy -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 файлов для запуска скриптов можно прочитать:
http://ift.tt/2jsnfng
Заключение
Хотелось отметить, что одной из не решенных задач осталась проблема автоматического управления сетью на устройстве. Были предложены, но не реализованы 2 способа решения:
- Использовать Network Link Conditioner и отключать подключенное устройство путем задания определенных правил с помощью межсетевых экранов ipfw(в некоторых OS X, например, El Capitan заменой является pf). Минусами данного способа являются: риск отключения всего интернета на компьютере, что помещает интеграции с CI; нет гарантий, что устройство не подключится по wi-fi к другой сети.
http://ift.tt/2jzNdCT
http://ift.tt/2jzWZVC
http://ift.tt/2jzYBP8
http://ift.tt/2jsmvyx
http://ift.tt/2jsrWh7 - Отключать сеть из кода:
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, помимо него существует ряд других инструментов:
http://ift.tt/2jslyX2
http://ift.tt/2jsnezI
Комментарии (0)