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

ВступлениеПодготовка к запускуАрхитектура платформы 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 поддерживает использование условий. Условия применяются на том же уровне, что и действия (то есть внутри тела команд). Формат условий выглядит следующим образом:

if (expression) {
    action1
    action2
    action3
    ...
} [else {
    action1
    action2
    ...
}]

Формат условий if достаточно традиционен: конструкция состоит из оценки выражения expression, которое может принимать значения true или false, в зависимости от чего будут либо выполнены действия, перечисленные в блоке if (если expression равен true), либо в блоке else (при его наличии).

Внутри секций if и else можно использовать все те конструкции, которые можно указывать в теле команд, из которых состоит тест: действия, условия, циклы, вызов макросов.

Условия можно комбинировать в каскадные конструкции:

if (expression) {

} else if {

} else if {

}
...

Выражения

Выражения - это вычисляемые сущности, которые могут принимать значения либо true, либо false. Выражения в настоящий момент используются только в конструкции if.

Ниже представлены варианты выражений в языке:

  • Строка. Пустая строка преобразуется в значение false, а любая строка ненулевой длины - в true.
  • Отрицание выражения. Имеет формат NOT <expr>. Делает логическое инвертирование значения, полученного при вычислении expr.
  • DEFINED var. Если параметр var определён (можно получить его значение, в том числе и из аргументов командной строки, даже если это значение - пустая строка), то выражение вернёт true, иначе - false.
  • Сравнения. Разобрано ниже.
  • Логическое "И" двух выражений. Имеет формат <expr1> AND <expr2>. Возвращает true, когда оба выражения равны true, и false в противном случае.
  • Логическое "ИЛИ" двух выражений. Имеет формат <expr1> OR <expr2>. Возвращает true, когда хотя бы одно из выражений равно true, и false в противном случае.
  • Применимо только для if-выражений в командах с участием виртуальных машин. Проверка наличия на экране определенного выражения check <select_expr> [timeout timeout_spec] [interval interval_spec]. В случае отсутствия спецификации timeout возвращает true, если на экране виртуальной машины присуствует указаное выражение, иначе - false (механизм формирования выражения см. в документации действия wait). В случае наличия спецификации timeout проверка будет выполняться в течение указанного времени вплоть до первого успешного нахождения select-выражения. Если в течение заданного периода выражение так и не было найдено, то вернется false. С помощью спецификатора interval можно регулировать частоту проверок состояния экрана.

При необходимости, можно упорядочить порядок вычисления выражений с помощью скобок.

Сравнения

В выражениях языка Testo можно сравнивать строки между собой. Результат сравнения - логическое значение true или false.

Существуют следующие виды сравнений:

  • <string1> STREQUAL <string2> - возвращает true, если string1 полностью равен string2. Иначе - false
  • <string1> STRLESS <string2> - возвращает true, если string1 лексикографически меньше string2. Иначе - false.
  • <string1> STRGREATER <string2> - возвращает true, если string1 лексикографически больше string2. Иначе - false.
  • <string1> EQUAL <string2> - Применимо, если оба операнда можно преобразовать к целому числу. Возвращает true, если после преобразования к числам оба операнда будут равны. Иначе - false. Если хотя бы один из операндов нельзя преобразовать к целому числу - генерируется ошибка.
  • <string1> LESS <string2> - Применимо, если оба операнда можно преобразовать к целому числу. Возвращает true, если после преобразования к числам левый операнд меньше правого. Иначе - false. Если хотя бы один из операндов нельзя преобразовать к целому числу - генерируется ошибка.
  • <string1> GREATER <string2> - Применимо, если оба операнда можно преобразовать к целому числу. Возвращает true, если после преобразования к числам левый операнд больше правого. Иначе - false. Если хотя бы один из операндов нельзя преобразовать к целому числу - генерируется ошибка.

Примеры

"SOME STRING" # true
"" # false
"${some_var}" # значение зависит от значения параметра some_var. Если параметр не определён - сгенерируется ошибка
DEFINED some_var # true если some_var определён, в том числе и если some_var - пустая строка. false - иначе
check "Hello world" # true, если на экране присутствует надпись Hello world
"5" EQUAL "${some_var}" # true, если "${some_var}" принимает значение "5"
"ABC" STRLESS "BCD" # true
NOT ("ABC" STRLESS "BCD") # false
NOT ("ABC" STRLESS "BCD") OR "5" EQUAL "5" # true
NOT ("ABC" STRLESS "BCD" AND "5" EQUAL "5") # false