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

ВступлениеПодготовка к запускуАрхитектура платформы 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.

Интерпретатор может работать в трёх режимах: в режиме прогона тестов (testo run), в режиме очистки созданных сущностей (testo clean) и в режиме генерации запросов на лицензию (testo request-license)

Режим прогона тестов

В режиме прогона тестов в GPU-версии Testo необходимо указать путь к файлу с действующей лицензией с помощью аргумента license <path>

Ниже приведен список аргументов, которые можно передать в интерпретатор testo при запуске в режиме прогона тестов.

testo run <input file | input folder> [--param <param_name> <param_value>]... \
  [--prefix <prefix>] [--stop_on_fail] [--assume_yes] [--test_spec <wildcard pattern>]... \
  [--exclude <wildcard pattern>]... [--invalidate <wildcard pattern>] \
  [--report_folder </path/to/folder>] [--report_logs] [--report_screenshots] \
  [--content_cksum_maxsize <Size in Megabytes>][--use_cpu][--license <path>] \
  [--hypervisor <hypervisor type>]
  • input_file или input_folder: Путь к файлу или к папке с тестовыми сценариями. В случае указания папки будет дополнительно проведен рекурсивный поиск по всем подпапкам в указанной директории.
  • param <param_name> <param_value>: Объявить параметр с именем param_name и значением param_value. Параметр будет доступен внутри тестового сценария наряду с статическими прописанными параметрами.
  • prefix <prefix>: Добавить префикс ко всем сущностям (виртуальные машины, флеш-накопители, сети), участвующим в тестах. Префиксы позволяют создавать аналоги "пространств имен", что позволяет создавать множество независимых стендов (в которых могут быть сущности с одинаковыми именами) и не путаться в них. Префиксы позволяют также создавать несколько незавивисимых экземпляров одного и того же стенда.
  • stop_on_fail: Остановить выполнение тестового сценария при возниковении любой ошибки.
  • assume_yes: Отключить предупреждение о потере кеша в тестах.
  • test_spec <wildcard pattern>: Запустить только те тесты, чьи имена подпадают под регулярное выражение, указанное в <wildcard pattern>. Формат регулярных выражений можно посмотреть ниже. Алгоритм формирования очереди тестов см тут.
  • exclude <wildcard pattern>: Не запускать тесты, чьи имена подпадают под регулярное выражение, указанное в <wildcard pattern>. Формат регулярных выражений можно посмотреть ниже. Алгоритм формирования очереди тестов см тут.
  • invalidate <wildcard pattern>: Сбросить кэш для тестов, чьи имена подпадают под регулярное выражение, указанное в <wildcard pattern>. Формат регулярных выражений можно посмотреть ниже.
  • report_folder </path/to/folder>: Сохранять отчеты о прохождении тестов в формате json в указанную папку. Если папка уже существует, она должна быть пустой.
  • report_logs: Сохранять логи о ходе проведения тестов в файлы. Файлы будут создаваться в папке, указанной в аргументе report_folder. Этот аргумент можно указывать только в совокупности с аргументом report_folder.
  • report_screenshots: Сохранять скриншоты при ошибках некоторых команд (wait, abort, mouse). Скриншоты будут создаваться в папке, указанной в аргументе report_folder. Этот аргумент можно указывать только в совокупности с аргументом report_folder.
  • content_cksum_maxsize <Size in Megabytes>: задать максимальный размер файлов, для которых контроль целостности будет осуществляться на основе содержимого, а не на основе времени последнего изменения. Подробности можно прочитать здесь. Значение по-умолчанию: 1 Мегабайт.
  • use_cpu: Запустить интерпретатор testo в CPU-режиме (актуально только для GPU-версии Testo).
  • license <path>: Путь к файлу с действующей лицензией (актуально только для GPU-версии Testo).
  • hypervisor <hypervisor type>: Указать используемый гипервизор. В настоящее время полноценно поддерживается гипервизор qemu. Остальные гипервизоры поддерживаются в экспериментальном режиме. Аргумент является необязательным - при его отсутствии тип гипервизора будет определен автоматически в зависимости от типа используемой ОС.

Возвращаемое значение

  • 0 - если все запланированные тесты были выполнены успешно.
  • 1 - если хотя бы один из запланированных тестов был завершен с ошибкой.
  • 2 - если на этапе синтаксического или семантического анализа были выявлены ошибки.

Если testo запущен с аргуметом --stop_on_fail, то в случае возникновении любой ошибки возвращается значение 2

Режим очистки созданных сущностей

Ниже приведен список аргументов, которые можно передать в интерпретатор testo при запуске в режиме очистки созданных сущностей.

testo clean [--prefix <prefix>] [--assume_yes]
  • prefix <prefix>: Очистить все сущности (виртуальные машины, флешки, сети), имеющие заданный префикс.
  • assume_yes: Тихо согласиться с удалением предложенных сущностей.

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

Возвращаемое значение: всегда 0.

Режим генерации запросов на лицензию

Этот режим актуален только при использовании GPU-версии платформы Testo.

Ниже приведен список аргументов, которые можно передать в интерпретатор testo при запуске в режиме генерации запросов на лицензию.

testo request-license [--out <path>]
  • out <path>: сохранить сгенерированный запрос на получение лицензии в файл, указанный в path.

Возвращаемое значение: всегда 0.

Запуск testo request-license без параметров приведет к созданию файла testo_license_request в текущей папке.

Алгоритм формирования очереди тестов

По умолчанию интерпретатор testo планирует к запуску все тесты, которые будут найдены в переданных на запуск файлах. Однако, с помощью аргументов test_spec и exclude можно задавать фильтры тестов, которые Вы хотите (test_spec) или, наоборот, не хотите (exclude) запускать. Эти аргументы можно указывать любое количество раз и в любом порядке. Алгоритм формирования очереди тестов напоминает конвейер и выглядит следующим образом:

  1. Вначале находятся все тесты в сценариях и из них формируется множество имён тестов.
  2. Полученное множество тестов попадает на вход первому фильтру. Если этот фильтр - test_spec, то на выходе фильтра остаются только те тесты, которые подошли под шаблон wildcard_pattern. Если этот фильтр - exclude, то на выходе фильтра остаются только те тесты, которые не подошли под шаблон wildcard_pattern.
  3. Полученное на предыдущем шаге множество тестов попадает на вход следующему фильтру. Алгоритм работы фильтра будет таким же.
  4. Когда все фильтры будут обработаны, полученное множество тестов попадает в очередь на выполнение.

Формат регулярных выражений для аргументов

СинтаксисЗначение
*Соответствует любой последовательности символов
?Соответствует любому единственному символу
\Экранирующий символ
[abc]Соответствует любому символу, перечисленному в квадратных скобках
[!abc]Соответствует любому символу за исключением перечисленных в квадратных скобках
(abc|c)Соответствует любой из последовательностей, перечисленных в круглых скобках