Сегодня я хочу вам рассказать о достаточно новом open-source инструменте для автоматизированного тестирования под названием Airtest. В дальнейшем я сделаю ещё несколько статей с подробным рассказом об отдельных элементах данного инструментария и как с ними работать, а сейчас у меня цель познакомить вас с ним и дать общее представление о нем.


AirTest IDE разработан компанией NetEase и предназначен для "hard-to-automate" приложений, таких как, к примеру, игр. Собственно на них и делается основной упор разработчиками, хотя это не мешает использовать AirTest и для любых других приложений.


AirTest IDE работает под Windows, MacOS X и Linux и содержит в себе 2 фреймворка: AirTest и Poco. Данная разработка была представлена Xin Liu на Android Game Developer Summit 2018. Для написания тестов используется Python 2.7 и Python 3.3+. Такие важные вещи как поддержка запуска тестов сразу на большом количестве устройств, открытость исходного кода и бесплатность приложения, а также легкое написаное тестов — это те преимущества, которые выделяются разработчиками. Приложение может быть использовано как на Windows, так и на MacOS и позволяет автоматизировать приложения со следующих OS: Windows, iOS, Android.


AirTest Project на GitHub содержит 4 проекта: Airtest, Poco, iOS-Tangent, multi-device-runner.
Стоит также упомянуть, что NetEase предоставляет свою ферму физических устройств для автоматизированного тестирования, которая называется AirLab.


image

Вкратце о фреймворках.


Airtest — это image recognition кросс-платформенный фреймворк для мобильных игр и приложений в основе которого лежит image thersholding. AirTest IDE дает возможность взаимодействовать с приложением используя следующие команды:
touch, wait, swipe, exists, text, keyevent, snapshot, sleep, assert_exists, assert_not_exists, assert_equal, assert_not_equal. Об особенностях и параметрах команд я расскажу в отдельном статье посвященном более подробному изучению AirTest и Poco фреймовров. Сейчас стоит упомянуть, что keyevent команда отвечает за "нажатие физических кнопок" устройства, таких как Home, Power, Menu, Back. При использовании большинства комманд пользователю предлагают выделить часть экрана рабочего устройства, скриншот которого будет использоваться для соответствующей команды (touch, swipe, assert и т.д.).


image

Плюсы Airtest, которые я могу выделить после работы:


  1. Быстрое и понятное написание кода. Всё делается, практически, в автоматическом режиме, вам нужно лишь выбирать нужные параметры, корректировать тайминги и быть аккуратным с выбором изображения.
  2. Точное определение картинки, которая используется в коде, на активном рабочем девайсе. Плюс ко всему в отчете указывается процент совпадения (сравнение) картинки, используемой в коде и картинки с экрана рабочего устройства.
  3. К слову об отчётах. После каждого запуска вы можете создать отчёт используя сочетания клавиш Ctrl\Cmd+L. Удобный отчет предоставляет такую информацию как: виды assert их результаты, а также каждый тестовый шаг выделен в отдельную под-секцию с информацией о том, куда AirTest кликнул, где ожидал картинку, процент совпадения картинок и т.п.
  4. Раз написав код, вы можете использовать его на любом устройстве.
  5. Многопоточность: подключайте множество тестовых устройств и запусйкате их в параллельном режиме.

Минусы Airtest, которые я могу выделить после работы:


  1. Если в процессе работы попадаются элементы, которые визуально выглядят одинаково, к примеру ползунки, кнопки и т.п., то с большой вероятностью AirTest не поймёт какой именно элемент управления вы хотите использовать. Об этом будет указано в соответствующей ошибке. Но этот минус легко обходится при помощи второго фрейморка (Poco), речь о котором будет ниже.
  2. Сравнение изображений (из кода и актуальных, на экране) происходит в черно-белом режиме. Стоит это учитывать в том случае, если вам важен, к примеру, визуальный облик персонажа (его расцветка, разная одежда и т.п.). Если персонажи визуально различаются, но на экране изображены одинаково (одни позы и т.п.), то проверка с большой долей вероятности пройдёт успешно. В опциях распознавания изображения есть галочка "rgb", которую можно использовать, но она работает не очень эффективно, если у вас маленькое изображение.
  3. Нельзя "заморозить" экран во время использования приложения, чтобы аккуратно сделать нужные вам скриншоты. Время от времени нужно "вылавливать" нужный вам кадр.
  4. Т.к. приложение в открытой бете, то вы можете встречать различные досадные ошибки или неточности, к примеру такие как невозможность изменить размер окна со встроенным приложением на Windows. Сейчас авторы обновляют AirTest IDE раз в несколько месяцев и, надеюсь, такие оплошности будут в скором времени исправлены.

Poco — это универсальный фреймворк для автоматизации пользовательского интерфейса (UI), который предоставляет независимые от (игрового) движка мощные API. Те, в свою очередь, извлекают иерархию UI элементов во время выполнения приложения. Благодаря этому пользователь может всю иерархию элементов на текущей странице, в несколько кликов "достучаться" до нужного ему элемента и т.п. Также данный фреймворк позволяет "замораживать" текущий экран для написания кода на основе иерархии элементов текущего окна. Poco призван помочь AirTest для понимания о каком именно UI элементе идет речь в тестах, но никто не мешает вам писать все тесты используя только этот фреймворк.
Все тесты пишутся на Python. Реализации комманд можно найти в соответствующих API: airtest.core.api module, airtest.core.android package, airtest.core.ios package, airtest.core.win package


image


Плюсы Poco, которые я могу выделить после работы:


  1. Есть поддержка ряда важных игровых движков, включая Unity3D, cocos2dx-js, cocos2dx-lua, NetEase internal engines, а также поддержка нативных прииложений Android/iOS. Если вы захотите использовать движок, который не входит в список "поддерживаемых", то можете написать свой следуя соответствующей инструкции. В официальной документации есть упоминание об Unreal Engine, но, пока что, всё ограничивается фразой "Coming soon".
  2. Иерархия UI элементов на экране возвращается в режиме реального времени.
  3. Быстрый запуск и пробег по тестам.
  4. Как и в AirTest, написал код раз — используй везде. Поддержка Python 2.7 и 3.3+
  5. Есть возможность подключать любые внешние библиотеки к вашему проекту
  6. Судя по документации, есть поддержка GPS, акселерометра и гиро сенсоров, а также поддержка портретного и альбомного режимов отображения.

Минусы Poco, которые я могу выделить после работы:


  1. За время работы на Windows 7 я не нашел принципиальных проблем. которые бы мешали полноценной работе, но они, на данный момент, есть при работе с Windows 10. Главная — некорректное перемещение объектов (swipe команда) в некоторых случаях. К примеру я указываю объект, который нужно переместить и координаты второго объекта, который является финальной точкой. В этих редких случаях Poco промахивается с финальным местоположением, но в отчётах указаны корректные данные перемещения (вектор) и шаг считается успешно выполненным.
  2. При выборе некоторых элементов с большими макетами (layout), выделение может перекрыть окно Poco Assistant и у вас не будет возможности выбрать другие элементы, пока не снято выделение с текущего. Чтобы убрать выделение вы можете воспользоться сочетанием клавиш Alt+F4

Для полноты картины стоит ещё упомянуть, что в Airtest IDE есть свой Selenium плагин, при помощи которого можно автоматизировать ваш web проект, но используя только Chrome браузер. Остальные, на данный момент, не поддерживаются. Лично я с ним ещё не работал, поэтому не могу сказать о его работе, но и пропустить его в этом кратком описании было нельзя.


image


Как итог, я бы сказал, что AirTest IDE — это очень многообещающая разработка, которая предназначена для автоматизации UI в играх, но, на данный момент, не подходит для тестирования игрового процесса как такового. Если у вас достаточно много UI элементов и/или много устройств для проверки и вы не хотите тратить кучу человеко-часов, то данная IDE вполне может стать вашей палочкой-выручалочкой. Чтобы начать писать простейшие тесты не нужны глубокие знания в автоматизации и программировании, достаточно иметь базовое представление о работа с Python. Безусловно так вы далеко не уйдете и подучить данный язык программирования придется, но для старта и понимания насколько реально данная программа вам подходит, вам хватит за глаза. Единственное, что сейчас расстраивает, так это различные досадные ошибки связанные с, к примеру, невозможностью изменить размер окна с рабочим устройством (Windows приложением) после его встраивания, перекрытием большого выделенного объекта основного интерфейса программы и т.п., но с этим вполне можно смириться, особенно учитывая тот факт, что приложение находится в Beta стадии.


image

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


  1. Aquahawk
    02.08.2019 08:34

    Всё это очень похоже на SikuliX Там я пробовал формат написания в виде тестов для junit. Имхо это божественно. Пока правда задач нет под него у меня, и почему-то я ни разу не встретил тестировщика который бы хотел писать хоть минимальный код


    1. BloodyPoSTaL Автор
      02.08.2019 10:07

      Вполне вероятно, т.к. обсуждая со своим знакомым AirTest он излагал примерно такие же мысли. Вполне вероятно, что я доберусь и до SikuliX, но пока сосредоточен на AirTest и, вскоре, напишу подробно про его фрейморки. К сожалению с SikuliX пока не работал, но как минимум почитаю про него после окончания статей по AirTest


  1. Nidere
    04.08.2019 14:33

    Эх, сколько ботов для браузерок на Сикулях было написано… :)