Автоматизація тестування 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 <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

Опис самого класи: 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 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.