Общие сведения

ВступлениеПодготовка к запускуАрхитектура платформы TestoПорядок запускаПолитика запуска тестов

Обучающие материалы по Testo для Hyper-V

Часть 1. Самый первый тестЧасть 2. Устанавливаем Ubuntu ServerЧасть 3. Доступ в Интернет из виртуальной машиныЧасть 4. Гостевые дополненияЧасть 5. ПараметрыЧасть 6. КешированиеЧасть 7. Связываем две машины по сетиЧасть 8. ФлешкиЧасть 9. МакросыЧасть 10. Конструкция ifЧасть 11. No snapshotsЧасть 12. Управление мышкойЧасть 13. Импортирование жёстких дисковЧасть 14. JS-селекторыЧасть 15. Циклы

Обучающие материалы по Testo для QEMU

Часть 1. Самый первый тестЧасть 2. Устанавливаем Ubuntu ServerЧасть 3. Гостевые дополненияЧасть 4. ПараметрыЧасть 5. КешированиеЧасть 6. Доступ в Интернет из виртуальной машиныЧасть 7. Связываем две машины по сетиЧасть 8. ФлешкиЧасть 9. МакросыЧасть 10. Конструкция ifЧасть 11. No snapshotsЧасть 12. Управление мышкойЧасть 13. Импортирование жёстких дисковЧасть 14. JS-селекторыЧасть 15. ЦиклыЧасть 16. Макросы с объявлениями

Спецификация языка

Общая структура скриптовых файловБазовые конструкции языкаOбъявление виртуальной машиныОбъявление виртуального флеш-накопителяОбъявление виртуальной сетиПараметрыОбъявление тестовМакросыДействия с виртуальными машинамиДействия с мышкойПоиск изображений на экранеДействия с виртуальными флеш-накопителямиУсловияЦиклыСписок идентификаторов клавиш

Запросы на языке Javascript

Общая концепция построения JS-селекторовВстроенные глобальные функции JavascriptИсключенияКласс TextTensorКласс ImgTensorКласс Point

Архитектура платформы Testo

Основные составляющие

Платформа Testo построена на трёх основных компонентах

  1. Специально разработанный язык тестовых сценариев Testo-lang и интерпретатор для этого языка
  2. Интеграция с гипервизорами, через взаимодействие с которыми происходит имплементация тестовых сценариев
  3. Распознавание состояния экрана виртуальных машин с помощью нейросетей

Язык Testo-lang

Для запуска тестовых сценариев в платформе Testo необходимо описать виртуальный стенд, в котором будут прогоняться тесты, а также определить действия, которые будут применяться к этому виртуальному стенду. Язык Testo-lang позволяет в удобном виде объявлять виртуальные машины, флешки и сети, совокупность которых и будет определять тестовый стенд. Также с помощью языка Testo-lang можно интуитивно-понятным образом определять набор действий, которые будут применяться к виртуальному стенду. Эти действия могут как просто имитировать действия человека (набрать текст на клавиатуре, передвинуть мышку, вставить флешку, выключить питание), так и олицетворять более высокоуровневые команды, которые доступны при наличии гостевых дополнений на виртуальных машинах (выполнить bash-команду, скопировать файл с хостовой машины на виртуалку).

Такой подход позволяет платформе Testo разворачивать стенд "на лету", не требуя от пользователя вообще никаких подготовительных действий. Все, что требуется от пользователя - запустить тестовые сценарии, и вся виртуальная инфраструктура появится автоматически. Этот процесс можно сравнить в процессом компиляции: все, что требуется для компиляции - набор исходных кодов.

После описания тестовых сценариев и инфрастуктуры в работу вступает интерпретатор testo, который через взаимодействие с гипервизором начинает имплементировать тестовый сценарий.

Интеграция с гипервизорами

Для прогона тестов платформа Testo преобразует сценарии в файлах .testo в набор команд для гипервизора, который выполняет управление виртуальной инфраструктурой. На текущий момент Testo может работать с гиперизором QEMU в ОС семейста Linux и с гипервизором Hyper-V в ОС Windows 10. Работа с Hyper-V реализована в экспериментальном режиме, некоторые возможности на текущий момент недоступны.

Нейросети

В качестве основного "тестирующего" действия в платформе Testo используется действие wait, которая позволяет понять, наступило ли какое-либо событие на экране монитора, или нет. В качестве такого события может выступать появление определенной надписи или картинки на экране. Если в течение заданного периода времени такого события не наступило - это будет приводить к "падению" теста. Например, запустив процесс инициализации, пользователь ожидает увидеть надпись "Успешно" в течение максимум 10 минут. Если в течение 10 минут такой надписи так и не появилось - то пользователь может быть уверен, что что-то пошло не так, и тест нужно завершить с ошибкой.

Для определения событий на экране платформа Testo использует нейросети. В течение заданного промежутка времени действия wait у виртуальной машины будут сниматься скриншоты, который затем попадают на анализ в движок поиска определенного события на экране. Если необходимое событие обнаружено, то действие wait завершается успешно и выполнение теста продолжается. Если же событие так и не было обнаружено, то тест завершается с ошибкой.

Т.к. поиск происходит исключительно с помощью нейросетей, платформа Testo не требует наличия специальных агентов внутри гостевой виртуальной машины и может с равным успехом обрабатывать вывод на экран как консольной версии FreeBSD, так и графической оболочки Windows 10 ровно в том виде, в котором их видит конечный пользователь.

Гостевые дополнения

По умолчанию платформа Testo позволяет применять к виртуальным машинам действия, имитирующие действия человека (набор текста на клавиатуре, ожидания события на экране, включение/отключения питания и пр.). Такой подход позволяет платформе Testo сохранять принцип "Черного ящика" для тестируемой системы, ведь для выполнения таких действий не требуется наличия дополнительных агентов внутри тестируемой системы, которые могли бы повлиять на ход выполнения тестов.

Впрочем, иногда соблюдать принцип черного ящика вовсе необязательно. Например, если происходит управление не основной тестируемой системой, а вспомогательной. В таких случаях в платформе Testo существует возможность упростить взаимодействие с виртуальной машиной. Для этого необходимо установить внутрь гостевой системы агент testo-guest-additions, который поставляется вместе с Testo. После установки этого агента пользователю становятся доступны новые команды, такие как exec bash(выполнение баш-скриптов), copyto(копирование файлов внутрь виртуалки) и др.

Агент testo-guest-additions представляет собой специальный системный сервис, который запускается с правами администратора. При выполнении высокоуровневых команд платформа Testo обращается напрямую к этому сервису.

Применение гостевых дополнений может сильно упростить написание тестовых сценариев там, где это возможно.