УДК 004.89
Информационные технологии
Сарычева Юлия Юрьевна, студент-магистр, Калужский филиал ФГБОУ ВО «Московский государственный технический университет имени Н.Э. Баумана (национальный исследовательский университет)» Белов Юрий Сергеевич, научный руководитель, к.ф.-м.н., доцент, Калужский филиал ФГБОУ ВО «Московский государственный технический университет имени Н.Э. Баумана (национальный исследовательский
университет)»
ТЕСТИРОВАНИЕ GUI МОБИЛЬНОГО ПРИЛОЖЕНИЯ ПРИ ПОМОЩИ
MONKEY
Аннотация: Приложение можно рассматривать как комбинацию многих состояний графического интерфейса и переходов между ними. Каждое состояние GUI выполняет разные функции или отображает различный контент. Пользователи приложения перемещаются между состояниями пользовательского интерфейса, взаимодействуя с элементами пользовательского интерфейса. В частности, взаимодействие может включать щелчок, прокрутку или ввод текста в элемент GUI, например кнопку, изображение или текстовый блок. Работа генератора входных данных заключается в создании последовательности взаимодействий для анализируемого приложения, которые можно использовать для обнаружения проблем, связанных с программным обеспечением, таких как ошибки, уязвимости и проблемы безопасности. Monkey является официальным инструментом для автоматизированного тестирования приложений в Android. Monkey отправляет случайные типы входных событий в случайные места на экране без учета структуры своего графического интерфейса.
Ключевые слова: графический интерфейс пользователя, тестирование, мобильное приложение, автоматизированное тестирование.
Abstract: An application can be viewed as a combination of many GUI states and transitions between them. Each GUI state performs a different function or displays different content. Application users move between user interface states by interacting with user interface elements. In particular, the interaction may include clicking, scrolling, or entering text on a GUI element, such as a button, image, or text box. The job of the input generator is to generate a sequence of interactions for the application being analyzed that can be used to discover software-related issues such as bugs, vulnerabilities, and security issues. Monkey is the official automated testing tool for Android applications. Monkey sends random types of input events to random places on the screen, regardless of the structure of its GUI.
Keywords: graphical user interface, testing, mobile application, automated testing.
Введение. В Android генераторы ввода взаимодействуют с приложениями так же, как и люди: отправляют смоделированные жесты в графический интерфейс приложения. Поскольку допустимые жесты в состоянии пользовательского интерфейса ограничены, основное различие между различными генераторами тестов заключается в их стратегиях, используемых для определения приоритетов этих действий.
В основном существует три типа стратегий: целевые, основанные на моделях и случайные.
Случайная стратегия используется в Monkey [6], официальном инструменте для автоматизированного тестирования приложений в Android.
Monkey отправляет случайные типы входных событий в случайные места на экране без учета структуры своего графического интерфейса.
Рассмотрим процесс тестирования приложения Блокнот с помощью инструмента Monkey.
В первую очередь необходимо прописать в терминале путь до тестируемого приложения с помощью команды: adb install «путь до файла с
приложением», например, C:\notepad.apk. Результат работы команды представлен на рисунке 1.
t:\Users\ftrseniy>adb install C:\notepad.apk [1807.] /data/local/tap/not»pad apk
pkg: /data/local/tap/notepad.apk
Success
Рис. 1. Путь до тестируемого приложения
Чтобы запустить Monkey, необходимо знать имя пакета, к которому инструмент будет обращаться. Для этого необходимо сначала перейти в режим работы с Shell с помощью команды adb shell, а после прописать команду pm list packages -f. Она выводит список всех пакетов для всех приложений, установленных на устройстве, чтобы ограничить список пакетов по имени приложения, необходимо выполнить команду pm list packages -f | grep «name», где name - это имя приложения, в данном случае notepad. Результат работы команды представлен на рисунке 2.
root(igeneric_x8G_64 •/ 8 pa list packages -f I grep notepad
package /data/app/coa example.siaplenotepad-1/base apk:com exasple simplenotepac
Рис. 2. Найденный пакет тестируемого приложения
После того, как пакет будет найден, необходимо выйти из режима shell с помощью команды exit. Далее необходимо запустить Monkey с помощью команды adb shell monkey -p «package» -v 300, где «package» - это имя пакета, в данном случае com.example.simplenotepad, а 300 - это количество необходимых действий. Результат работы команды представлен на рисунке 3.
C:\Users\Arteniy>adb shell monkey -p com.example simplenotepad -u 300 :Honkey: seed-1478753114664 count=3C0 :AllouPackage con example. simplenotepad : IncludeCat egory: android.intent.category.LAUNCHER : IncludeCategory. android.intent.category.NONKEV // Event percentages;
// 0 15.0Z
// 1 10.07.
// 2 2 0*
// 3 15 07.
// ч -0.07.
// 5 25.07.
// 6 15.0Z
// 7 2 07.
// 8 2.0£
// 9 1 07.
// К 13. ег
: Switch : ttlntent;action:android.intent.action.MAIN¡category:android.intent categ ory.LAUNCHER;launchFlags:0x1020OQOQ;CO»ponentscom.example.simplenotepad/.HainAct iuity end
// Allowing start of Intent ( act-android intent.action MAIN cat?[android.in tent.category.LAUNCHER] cmp:com example.simplenotepad/ NainActiuity ) in package com example.simplenotepad
: Sending Trackball (ACTION_MOUE): 0:(-5.0.4.0)
Рис. 3. Запуск Monkey
После этого на эмуляторе открывается тестируемое приложение и в поле ввода вводится случайный текст. Внешний вид процесса тестирования представлен на рисунке 4.
Рис. 4. Процесс тестирования с помощью Monkey
После выполнения 300 действий Monkey завершает свою работу, что представлено на рисунке 5.
:Sending Touch (ACTI0N_D0UN): 0(1028 6.1390 0) :Sending Touch (ACTI0N_UP): 9:(1080 6.1292.7303) :Sending Touch (ACTI0N_D0UN): 0 (1036 9.585 0) :Sending Touch (ACTI0N_UP): 9:(996 15967.609 3319) :Sending Flip keyboard0pen:false
Got IOException performing flipjaua.10.IOException: write failed: EINUAL (Inuali d argument)
// Injection Failed :Sending Touch (ACTI0N_D0MN): 0-(425 6.836 9) :Sending Touch (ACTI0N.UP): 9:(121 «»2978.86»» 00507) :Sending Trackball (ACTION_MOUE): Q:(0.0.-5.0) :Sending Touch (ACTI0N_D0MN).- 0: (868.0.87'» .0) :Sending Touch (ACTI0N_UP): 9;(832.77H2.823.3«»1)
// Rejecting start of Intent ( actcandroid.intent.action MAIN cat:(android.i ntent category.HOME] cmp^com.google android.googlequicksearchbox/com.google andr oid launcher.GEL ) in package com google.android googlequicksearchbox :Sending Trackball (ACTION.MOUE): 0:(2.9.2.9) Events injected: 300
:Sending rotation degreed. persistsfalse :Dropped. keys=G pointers*9 track:balls = 0 flips'1 rotationssQ
«« Network stats: elapsed time=9696ms (9as mobile. 6ms uifi. 9696ms not connecte d)
// Monkey finished
Рис. 5. Завершенный процесс тестирования с помощью Monkey
Однако в процессе тестирования использовались системные кнопки, чтобы их исключить необходимо для запуска тестирования ввести команду adb shell monkey -pct-syskeys 0 -p «package» -v 300, где после ключа -pct-syskeys указывается в процентном соотношении частота возникновения системных действий, в данном случае это 0, «package» - это имя пакета, в данном случае com.example.simplenotepad, а 300 - это количество необходимых действий. Если в команду выполнения после ключа -pct-syskeys добавить ключ -throttle и значение задержки после каждого действия в миллисекундах, например, 100, то процесс тестирования будет специально замедлен. Также в команду можно добавит ключ -s с числовым значением, который означает сколько раз будет проведен процесс тестирования. Результат тестирования приложения представлен на рисунке 6.
Г *
о "л a 12:17
<r New note
2Ajrj+uK7.K ept Kept»Kept %8.4yfe5o
pet kept kept kept Sept kept H
Q W' E' R* T! Y* и' Г о' p°I
A S D F G H J 1
♦ Z X С V В N il
7123 ,
V О □
Рис. 6. Результат тестирования с помощью Monkey
В случае, если приложение вылетит в процессе тестирования, ключ -kill-process-after-error остановит выполнение тестирования, а не продолжит его.
Заключение. Обеспечение качества — это путь, которым тщательно занимаются команда QA и инженеры-тестировщики. На этом пути возникает множество проблем, особенно когда есть ручное тестирование, которое QA должно поддерживать на протяжении всего жизненного цикла тестирования.
По мере роста спроса на рынке программного обеспечения организациям необходимо решать свои задачи и опережать конкурентов. Автоматизированное тестирование может сократить эти усилия, не теряя качества. Автоматизированная генерация ввода GUI стала активной областью исследований с момента распространения мобильных приложений. Примером генератора может служить Monkey, официальный инструмент для автоматизированного тестирования приложений в Android.
Библиографический список:
1. Naja Fa., Mansur Sy., Wibawanto Ad. Automated Software Testing on
Mobile Applications: A Review with Special Focus on Android Platform // 20th International Conference on Advances in ICT for Emerging Regions. 2020. pp. 4-6.
2. Василенко, Р. И. Автоматизированное тестирование мобильных приложений / Р. И. Василенко, С. А. Белоусова // Инновационные технологии и дидактика в обучении: сборник статей III Международной научно-практической конференции, Краснодар, 29-30 июня 2015 года / Борисова Е.А. -Краснодар: Издательство Южного Федерального Университета, 2015. - С. 3134. - EDN UTWWDN.
3. Михалевская, К. А. Сравнение инструментов для автоматизации тестирования мобильных приложений на ОС Android / К. А. Михалевская, М. А. Сергачева, И. Н. Мерзляков // КОГРАФ - 2020: сборник материалов 30-й Всероссийской научно-практической конференции по графическим информационным технологиям и системам, Нижний Новгород, 13-16 апреля 2020 года. - Нижний Новгород: Нижегородский государственный технический университет им. Р.Е. Алексеева, 2020. - С. 250-255. - DOI 10.46960/43791586_2020_250. - EDN XZGGPU.
4. Ананьев, В. Ю. Автоматизированное тестирование мобильных приложений при помощи nunit и Appium / В. Ю. Ананьев // Инновационные технологии, экономика и менеджмент в промышленности: Сборник научных статей X международной научной конференции, Волгоград, 21-22 октября 2021 года. - Волгоград: Общество с ограниченной ответственностью "КОНВЕРТ", 2021. - С. 136-138. - EDN BBDGXU.
5. Pan M., Xu To., Pei Yu. GUI-Guided Test Script Repair for Mobile Apps // IEEE Transactions on Software Engineering. 2022. Vol. 48. №3. pp. 3-5.