В предыдущая статья мы встретились AirTest IDE , но на всякий случай повторим: AirTest IDE разработана компанией NetEase и предназначена для «сложно автоматизируемых» приложений, например игр.
Собственно, на них разработчики и делают основной упор, хотя это не мешает использовать AirTest для любых других приложений.
Данная работа является второй в серии, посвящённой AirTest IDE. Первая обзорная статья об AirTest IDE: Вы можете найти это здесь и третий и последний, посвященный платформе автоматизации Poco UI — по этой ссылке .
Сегодня я расскажу вам об одном из 2-х основных фреймворков — AirTest. ЭйрТест — это кроссплатформенный фреймворк для автоматизации пользовательского интерфейса, основанный на принципах распознавания изображений ( Распознавание изображений ), который, по утверждению разработчиков, подходит для игр и приложений.
Проект ЭйрТест GitHub содержит 4 проекта: Аиртест , Поко , iOS-Касательная , бегун на нескольких устройствах .
Теперь перейдем к самому интересному!
Как работает AirTest
Процессы AirTest получили скриншоты на основе процесса установление порога .Идея состоит в том, чтобы сравнить интенсивность пикселей изображения с определенным числом ( пороговое значение ) и, если значение пикселя больше, то присвоить ему цвет (чаще всего используется белый).
В противном случае назначается другой цвет – черный.
В результате на выходе получается черно-белое изображение.
Это приводит к естественному ограничению — AirTest не учитывает цвет при распознавании.
Например, если вы используете предмет с одинаковым силуэтом, но разным, например, расцветкой, и вам нужно проверить наличие элемента с определенной цветовой палитрой, то это будет крайне сложно, а может и вообще не сработать.
.
Например, в рамках триала AirTest IDE было решено поработать с игрой.
При загрузке на экране в определенном порядке мелькают персонажи из заданной вселенной комиксов.
Время от времени они меняют костюмы, и это первый раз меня насторожило.
В примере ниже в рамках теста я ожидал Человека-паука в классическом костюме, а получил его в стелс-костюме.
Тест, по сути, прошел успешно, и произошло это по описанной выше причине — использование черно-белого изображения при распознавании.
Пример того, что ожидалось и что в итоге произошло:
Улучшен процент успешных испытаний
Как вы уже поняли, Распознавание изображений – далеко не панацея, хотя и здесь оно работает неплохо.Чтобы писать тесты качества, вам не обойтись без написания кода и, соответственно, знания основ Python. Например, прежде чем искать конкретный элемент, неплохо было бы убедиться, что он действительно находится на экране.
Бывают случаи, когда AirTest «промахивается» и может принять неправильный элемент за тот, который вам нужен.
Время от времени возникают проблемы с распознаванием текста, который вы хотите найти с помощью функции распознавания изображений.
AirTest может перепутать результаты и подумать, что на экране находится тот текст, который вы хотите, но на самом деле текст совершенно другой.
Процесс анализа результатов призван упростить систему формирования отчетов, которая уже встроена в AirTest IDE. Вы можете создать и открыть отчет после завершения теста/скрипта, используя сочетание клавиш Ctrl/Cmd+L. Исходя из общих рекомендаций, я бы также выделил следующее.
- Делайте скриншоты именно тех элементов, которые вам нужны.
Я имею в виду, что если вам нужна кнопка, которая, например, находится на сложном текстурированном фоне, то попробуйте сделать скриншот только кнопки, чтобы не тратить время на обработку фона, который, по сути, вы не нужно.
В этом случае поиск не будет зависеть от того, что изображено на фоне, и вы получите более точный результат за меньшее время.
- Старайтесь избегать распознавания изображений, содержащих только текст, поскольку успешное распознавание («процент успеха») в этом случае будет значительно снижено.
- Хотя создание скриншотов при автоматической записи кода (автозапись скриптов) является достаточно удобной функцией, в некоторых местах скриншоты не очень информативны.
Лучше создавать их вручную, чтобы хранить в изображениях больше полезной информации для поиска.
Настройки распознавания изображений
Пользователю разрешено и рекомендуется работать с настройками распознавания изображений для достижения желаемых результатов, оптимизации времени и вероятности попадания элементов на экран.Эти настройки хранятся в окне редактора изображений, и чтобы его открыть, необходимо дважды щелкнуть нужное изображение в редакторе сценариев.
Настройки распознавания для каждого изображения необходимо менять индивидуально или использовать глобальные переменные, если, например, вы хотите повысить пороговые требования к точности работы для вашего проекта.
Окно редактора изображений
Редактор изображений содержит рабочую область, а также кнопки «Снимок+Распознавание» и «Показать справку».
Первый отвечает за сравнение текущего изображения со снимком.
Снимок изображения захватывается из текущего окна на вашем устройстве.
Вторая кнопка открывает инструкцию по функционалу редактора изображений.
В правой части окна отображается текущее изображение поиска, а также такие настройки, как имя файла, пороговое значение, target_pos и RGB.
- имя файла Поле отвечает за имя сохраняемого в данный момент изображения (все изображения сохраняются в папке проекта).
- порог хранит процент совпадений (от 0 до 1) изображений после распознавания.
Чем выше значение, тем выше требования к точности сопоставления изображений.
Как упоминалось выше, AirTest преобразует изображения в оттенки черного и белого (в зависимости от реализации порога), поэтому цвет при распознавании не учитывается.
- RGB Чекбокс предназначен для того, чтобы «включить и добавить» цвет при распознавании изображения и, тем самым, начать его учитывать.
Однако имейте в виду, что включение этого функционала еще не гарантирует 100% результата.
Например, если у вас есть 2 одинаковые кнопки, отличающиеся только цветом фона, вероятность неправильного распознавания (например, внутри Assert_exists/assert_not_exists) будет достаточно высока.
- target_pos отвечает за точку на картинке, на которую AirTest нажмет после распознавания.
Значение по умолчанию — 5, но вы можете изменить его с 1 на 9, где 1 — это верхний левый угол вашего рабочего изображения, а 9 — нижний правый угол.
Расположение всех девяти точек наглядно изображено на скриншоте ниже.
Об этом вы также можете прочитать в официальная документация В этом примере средняя кнопка выделена для распознавания.
Контур показывает границы выделения.
Написание автоматических тестов с помощью AirTest
Все рабочие команды платформы AirTest можно найти в окне AirTestAssistant в левом верхнем углу Airtest IDE. Если его там нет, вы можете установить местоположение окна по умолчанию, используя Окно -> Макет по умолчанию .
Расположение окна AirTest Assistant
В текущей версии программы вы можете использовать следующие команды, доступные в окне AirTest Assistant:
- трогать — эта команда имитирует сенсорный жест на мобильном устройстве.
Touch имеет следующие параметры — touch(v, times=1, period=0.01, right_click=False).
- v — картинка или координата (x,y)
- раз — количество кликов.
Значение по умолчанию — 1.
- длительность — продолжительность удержания после касания экрана.
С помощью этого параметра можно имитировать «длительное нажатие» (long_touch).
Значение по умолчанию — 0,01 секунды.
- right_click — нажатие «правой кнопки мыши».
Можно использовать только в программах Windows.
- ждать — ожидание элемента пользовательского интерфейса.
Команда имеет следующие параметры — wait(v, timeout=TIMEOUT, интервал=5, Intervalfunc=None).
- v — изображение, которое ожидает программа
- таймаут — время ожидания.
Значение по умолчанию — 20.
- интервалфунк — пользовательская (настраиваемая) функция.
Если изображение не найдено, эта функция будет выполнена.
- интервал — интервал между сравнениями изображений Функция возвращает следующее: если изображение найдено, то возвращаются координаты центра этого изображения, в противном случае выдается TargetNotFoundError
- проведите пальцем по экрану — эта команда имитирует жест свайпа на мобильном устройстве («проведение пальцем по экрану»).
Swipe имеет следующие параметры: swipe(v1, v2=None, вектор=None, продолжительность=0,01).
- v1 — значение, с которого начинается свайп.
Может быть либо изображением, либо заданной координатой (x, y).
- v2: конечное значение свайпа (команда выполняется от v1 до v2).
Этот параметр имеет более высокий приоритет, чем параметр «вектор».
- вектор[x,y] — создается во время работы AirTest или вы можете установить его самостоятельно.
Указывает, в каком направлении провести.
Чтобы провести пальцем вправо, X должен быть положительным, а Y должен быть положительным, чтобы провести вниз.
- шаги - я не использовал этот параметр и не нашел, как он используется на практике.
В поле подсказки отображается следующее: «Узел на пути прокрутки, по умолчанию 5».
Я предполагаю, что вектор направления свайпа будет разбит на «участки» и вместо мгновенного свайпа из точки А в точку Б будет имитироваться свайп с небольшими паузами в узлах, указанных в этом параметре, как бы имитируя пошаговое движение.
-шаговое движение.
Например, если значение равно 5, то вектор будет разделен на 5 сегментов.
- длительность — продолжительность свайпа.
Значение по умолчанию — 0,5 секунды.
- v1 — значение, с которого начинается свайп.
- существует — проверка наличия ожидаемого элемента на экране монитора устройства.
существует имеет следующие параметры: существует(v)
- v - изображение Функция возвращает следующее: если изображение найдено, то возвращаются координаты центра данного изображения, в противном случае возвращается False.
- текст — команда ввода текста.
text имеет следующие параметры: text(text, enter=True, search=False)
- text — текстовая строка для ввода
- Enter — этот параметр определяет, следует ли использовать «Enter» после ввода текста.
Значение по умолчанию — True
- поиск — я не использовал этот параметр и не нашел, как он применяется на практике.
В поле подсказки отображается следующее: «Принудительно выполнять поиск или нет после ввода».
Значение по умолчанию — ложь
- ключевое событие — эмуляция нажатия физических кнопок на устройстве, таких как ДОМОЙ, НАЗАД, МЕНЮ, ПИТАНИЕ и т.д. Параметры для этой команды: keyevent(keyname)
- keyname - название кнопки (ПИТАНИЕ, ДОМОЙ и т.д.)
- снимок — создание скриншота экрана в текущем состоянии.
Параметры по умолчанию: снимок(filename=None, msg="test-point")
- имя_файла — сохранить текущий скриншот в отдельный файл.
Вы можете игнорировать этот параметр.
- msg — описание этой контрольной точки.
Этот текст будет отображаться в HTML-отчете, который можно будет создать после завершения теста.
Эта функция возвращает следующее: имя файла.
- имя_файла — сохранить текущий скриншот в отдельный файл.
- спать — ходовой тест на некоторое время «засыпает».
Значения по умолчанию: сон(сек=1,0)
- секунды — время ожидания.
Значение по умолчанию — 1 секунда.
- секунды — время ожидания.
- Assert_exists — проверка существования элемента.
Параметры для этой команды: Assert_exists(v, msg="test-point")
- v — изображение с элементом, наличие которого проверяется
- msg — описание этой контрольной точки.
Этот текст будет отображаться в HTML-отчете, который можно будет создать после завершения теста.
Эта функция возвращает следующее: если изображение найдено, то возвращаются координаты центральной точки этого изображения, в противном случае выдается AssertionError.
- Assert_not_exists — проверка отсутствия элемента на экране устройства.
Параметры для этой команды: Assert_not_exists(v, msg="test-point")
- v — изображение с элементом, наличие которого проверяется
- msg — описание этой контрольной точки.
Этот текст будет отображаться в HTML-отчете, который можно будет создать после завершения теста.
- Assert_equal — проверка соответствия атрибута заданному значению.
Параметры для этой команды: Assert_equal(first, Second, msg="test-point")
- first - первый элемент для сравнения
- второй - второй элемент для сравнения
- msg — описание этой контрольной точки.
Этот текст будет отображаться в HTML-отчете, который можно будет создать после завершения теста.
- Assert_not_equal — проверка того, что атрибут не равен указанному значению.
Параметры для этой команды: Assert_not_equal(first, Second, msg="test-point")
- first - первый элемент для сравнения
- второй - второй элемент для сравнения
- msg — описание этой контрольной точки.
Этот текст будет отображаться в HTML-отчете, который можно будет создать после завершения теста.
Выбрать нужную вам группу можно с помощью соответствующего фильтра (выпадающее меню сразу под названием окна).
Фильтр группы команд
Команды, требующие изображения, активируют функции записи скриншотов сразу после нажатия соответствующей кнопки.
Например, чтобы выбрать, какой элемент щелкнуть на экране, выберите сенсорную команду в AirTest Assistant и в окне «Экран устройства» на активном устройстве обведите элемент, на который хотите щелкнуть.
После этого в главном окне (Редактор скриптов) появится соответствующая команда, в нашем случае сенсорная, с изображением в качестве параметра.
В итоге процесс автоматизации выглядит так (гифка записана из устаревшей версии AirTest IDE):
Если по каким-то причинам вы не хотите вручную создавать скриншоты и/или писать код вообще, вы можете воспользоваться функцией автоматической записи.
Активировать его можно, нажав на кнопку «камеры» напротив выпадающего меню с группами команд в окне Airtest Assistant. Автозапись достаточно точна и удобна, но, конечно, не является панацеей и не заменит ручной набор кода.
Стоит упомянуть еще 3 горячие клавиши — F5 (запустить скрипт), F10 (остановить работающий скрипт), Ctrl+L/Cmd+L (создать отчет по выполненному тесту).
Вы можете запускать готовые тесты без пользовательского интерфейса, используя терминал (командную строку).
Более подробную информацию об этом в целом и о запуске тестов в частности можно найти здесь.
Пример тестового отрывка, написанного с использованием фреймворка AirTest, можно найти под спойлером! Пример автотеста, написанного с помощью AirTest (Распознавание изображений)
Конечно, UI в вашем приложении/игре не состоит полностью из уникальных иконок, кнопок, фонов и т.п.
Плюс время от времени на одном экране могут появляться визуально одинаковые элементы, например кнопки, ползунки и т.п.
Чаще всего , в таких случаях AirTest не сможет распознать нужный вам элемент и либо тест завершится с ошибкой, либо для дальнейших манипуляций будет выбран не тот элемент интерфейса.
Пример окна с несколькими одинаковыми элементами
Специально для таких случаев был разработан еще один фреймворк, который уже встроен в AirTest IDE. Он Поко и его уже кратко описали в статье с общим Обзор IDE Airtest .
Подробнее об этом фреймворке я расскажу в следующей статье.
Расскажите нам, использовали ли вы уже AirTest IDE и что вы думаете об этом инструменте.
Буду рад обсуждению в комментариях! Теги: #python #тестирование #Тестирование мобильных приложений #unity #Тестирование игр #автоматизация #автоматизация тестирования #автоматическое тестирование #unreal engine #poco #airtest #airtest ide
-
Предприниматель, Ставший Сапожником
19 Oct, 24 -
10 Лучших Html5-Игр
19 Oct, 24 -
Google Обзоры
19 Oct, 24 -
Apple Iad – Пользовательский Опыт
19 Oct, 24