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

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

Часть 3. Доступ в Интернет из виртуальной машины

С чем Вы познакомитесь

В этой части вы:

  1. Познакомитесь с иерархической организацией тестов.
  2. Познакомитесь с виртуальными сетями и сетевыми адаптерами.
  3. Научитесь обеспечивать доступ в Интернет внутри ваших тестов.

Начальные условия

  1. Платформа Testo установлена.
  2. Гипервизор Hyper-V установлен.
  3. Имеется установочный образ Ubuntu server 16.04 с расположением C:\iso\ubuntu_server.iso. Местоположение и название установочного файла может быть другим, в этом случае нужно будет соответствующим образом поправить тестовый скрипт.
  4. На хостовой машине имеется доступ в Интернет.
  5. (Рекомендовано) Настроена подсветка синтаксиса Testo-lang в Sublime Text 3.
  6. (Рекомендовано) Проделаны шаги из второй части.

Вступление

Помимо виртуальных машин, в платформе Testo существуют также другие виртуальные сущности: виртуальные флешки и виртуальные сети. Виртуальные флешки в настоящий момент времени недоступны для Hyper-V, но виртуальные сети вполне доступны.

Вообще, виртуальные сети в платформе Testo можно использовать для двух целей: связь нескольких виртуальных машин между собой и получение доступа в Интернет с виртуальной машины. Связь нескольких машин между собой мы рассмотрим одном из следующих уроков, а в этом познакомимся с доступом в Интернет.

С чего начать?

Начнем с того, что переименуем тест my_first_test во что-то более осмысленное. Например, в ubuntu_installation:

test ubuntu_installation {
    my_ubuntu {
        start
        wait "Install Ubuntu Server"
        ...
        wait "login:" timeout 2m; type "my-ubuntu-login"; press Enter
        wait "Password:"; type "1111"; press Enter
        wait "Welcome to Ubuntu"
    }
}

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

Сейчас наша виртуальная машина my_ubuntu не имеет ни одного сетевого интерфейса, поэтому, очевидно, доступ в Интернет у неё отсутствует. Давайте напишем новый тест, который это подтверждает.

Для этого необходимо познакомиться с понятием иерархии тестов. Если вкратце - то все тесты выстраиваются по принципу "от простого к сложному", при этом более сложный (дочерний) тест зависит от результата работы более простого (родительского) теста. Тест может иметь несколько родителей и несколько потомков. Самые простые тесты, которые не зависят ни от кого (и не имеют родителей), называются базовыми. В нашем примере тест ubuntu_installation как раз является базовым тестом.

Помимо базовых тестов существуют и производные тесты, которые запускаются только когда будут выполнены все родительские тесты. Для проверки доступа в Интернет нам необходимо написать наш первый производный тест. Связь между тестами задается так:

test check_internet: ubuntu_installation {
    my_ubuntu {
        abort "stop here"
    }
}

Давайте убедимся, что наш дочерний тест действительно зависит от родительского.

Для этого давайте запустим прогон тестового сценария, но при этом используем новый аргумент командной строки --test_spec. Этот аргумент позволяет указывать, какой именно тест мы хотим выполнить (вместо того, чтобы выполнять все тесты подряд). Запустив выполнение, мы увидим следующую информацию:

C:\Users\Testo> testo run nat.testo --stop_on_fail --test_spec check_internet
TESTS TO RUN:
ubuntu_installation
check_internet
[ 0%] Preparing the environment for test ubuntu_installation
[ 0%] Restoring snapshot initial for virtual machine my_ubuntu
[ 0%] Running test ubuntu_installation
[ 0%] Starting virtual machine my_ubuntu
[ 0%] Waiting "Install Ubuntu Server" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Choose the language" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Select your location" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Detect keyboard layout?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Country of origin for the keyboard" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Keyboard layout" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "No network interfaces detected" for 5m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Hostname:" for 30s with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key BACKSPACE 36 times in virtual machine my_ubuntu
[ 0%] Typing "my-ubuntu" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Full name for the new user" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Typing "my-ubuntu-login" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Username for your account" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Choose a password for the new user" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Typing "1111" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Re-enter password to verify" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Typing "1111" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Use weak password?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key LEFT in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Encrypt your home directory?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Select your timezone" for 2m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Partitioning method" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Select disk to partition" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Write the changes to disks and configure LVM?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key LEFT in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Amount of volume group to use for guided partitioning" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Force UEFI installation?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key LEFT in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Write the changes to disks?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key LEFT in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "HTTP proxy information" for 3m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "How do you want to manage upgrades" for 6m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Choose software to install" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Installation complete" for 30m with interval 1s in virtual machine my_ubuntu
[ 0%] Unplugging dvd from virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "login:" for 2m with interval 1s in virtual machine my_ubuntu
[ 0%] Typing "my-ubuntu-login" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Password:" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Typing "1111" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Welcome to Ubuntu" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Taking snapshot ubuntu_installation for virtual machine my_ubuntu
[ 50%] Test ubuntu_installation PASSED in 0h:6m:23s
[ 50%] Preparing the environment for test check_internet
[ 50%] Running test check_internet
C:/Users/Testo/testo/nat.testo:52:3: Caught abort action on virtual machine my_ubuntu with message: stop here

C:/Users/Testo/testo/nat.testo:2:1: note: the virtual machine my_ubuntu was declared here

[100%] Test check_internet FAILED in 0h:0m:0s
C:\Users\Testo>

В начале вывода мы видим, что платорма Testo запланировала прогон теста ubuntu_installation, несмотря на то, что мы попросили запустить только check_internet. Это происходит потому, что мы пытаемся прогнать дочерний тест, при том что родительский тест еще не был проведен успешно. Поэтому платформа Testo автоматически попытается прогнать сначала базовый тест, а только затем перейдет к производному.

Но разве мы не устанавливали уже успешно Ubuntu? В конце прошлой части мы закончили на том, что Ubuntu Server уже была успешно установлена, тест закончился, и состояние должно было зафиксироваться.

Однако на самом деле тогда наш тест назывался my_first_test, и после переименования его в ubuntu_installation он выглядит для платформы Testo как совершенно новый тест, который никогда до этого не прогонялся.

В конце вывода мы увидим, что базовый тест был успешно выполнен, Testo приступило к прогону второго теста, но он закончился с ошибкой (из-за действия abort).

Если мы еще раз запустим Testo, то увидим уже следующее:

C:\Users\Testo> testo run nat.testo --stop_on_fail --test_spec check_internet
UP-TO-DATE TESTS:
ubuntu_installation
TESTS TO RUN:
check_internet
[ 50%] Preparing the environment for test check_internet
[ 50%] Restoring snapshot ubuntu_installation for virtual machine my_ubuntu
[ 50%] Running test check_internet
C:/Users/Testo/testo/nat.testo:52:3: Caught abort action on virtual machine my_ubuntu with message: stop here

C:/Users/Testo/testo/nat.testo:2:1: note: the virtual machine my_ubuntu was declared here

[100%] Test check_internet FAILED in 0h:0m:2s
C:\Users\Testo>

Это означает, что платформа Testo распознала, что ubuntu_installation уже был успешно выполнен и его состояние уже было зафиксировано. Поэтому вместо того, чтобы прогонять этот тест заново, можно просто восстановить стенд в то состояние, в котором он был зафиксирован на момент окончания ubuntu_installation.

Убеждаемся, что Интернета нет

Как я уже писал выше, доступа в Интернет у машины my_ubuntu пока нет. Но как в этом можно убедиться? Попробуем для этого выполнить команду ping 8.8.8.8 -c5. Вот только как её выполнить? Да впрочем, точно так же как это бы сделал и обычный человек: наберем текст на клавиатуре.

test check_internet: ubuntu_installation {
    my_ubuntu {
        type "ping 8.8.8.8 -c5"; press Enter
        abort "stop here"
    }
}

Открыв виртуальную машину в Hyper-V, увидим следующий результат:

Network_unreachable

Мы, как люди, видим отсутствие доступа в Интернет. Но что, если мы об этом не знаем и хотим проверить, что доступ в Интернет есть? Как можно в этом убедиться?

Конечно, утилита ping выводит на экран информацию о полученных ICMP-ответах (если они есть). Мы могли бы ориентироваться на вывод этой утилиты, примерно так:

test check_internet: ubuntu_installation {
    my_ubuntu {
        type "ping 8.8.8.8 -c5"; press Enter
        wait "64 Bytes from 8.8.8.8"
        abort "stop here"
    }
}

Но вместо этого я предлагаю испробовать другой, более универсальный вариант проверки успешности выполнения команды в Linux. Выглядит он так:

test check_internet: ubuntu_installation {
    my_ubuntu {
        type "ping 8.8.8.8 -c5 && echo Result is &?"; press Enter
        wait "Result is 0" timeout 10s
    }
}

Что здесь происходит? Мы пользуемся возможностью баша объединять команды в цепочки. В нашем конкретном случае мы заявляем: "После того, как команда ping выпонится успешно, выполни также команду echo Result is &?". Такой echo показывает код возврата последней выполненной перед ним команды (ping). Если ping выполнился нормально, то в итоге на экране появится надпись Result is 0. Если ping неудачен - то либо вообще ничего не появится, либо код возврата будет другим.

Давайте опробуем такой скрипт в деле:

C:\Users\Testo> testo run nat.testo --stop_on_fail --test_spec check_internet
UP-TO-DATE TESTS:
ubuntu_installation
TESTS TO RUN:
check_internet
[ 50%] Preparing the environment for test check_internet
[ 50%] Restoring snapshot ubuntu_installation for virtual machine my_ubuntu
[ 50%] Running test check_internet
[ 50%] Typing "ping 8.8.8.8 -c5 && echo Result is $?" with interval 30ms in virtual machine my_ubuntu
[ 50%] Pressing key ENTER in virtual machine my_ubuntu
[ 50%] Waiting "Result is 0" for 10s with interval 1s in virtual machine my_ubuntu
C:/Users/Testo/testo/nat.testo:53:3: Error while performing action wait "Result is 0" timeout 10s on virtual machine my_ubuntu
- Timeout

C:/Users/Testo/testo/nat.testo:2:1: note: the virtual machine my_ubuntu was declared here

[100%] Test check_internet FAILED in 0h:0m:14s
C:\Users\Testo>

А чтобы убедиться, что проверка действительно пройдет когда ping сработает, давайте попробуем поменять 8.8.8.8 на 127.0.0.1 (пинг точно должен быть):

test check_internet: ubuntu_installation {
    my_ubuntu {
        type "ping 127.0.0.1 -c5 && echo Result is &?"; press Enter
        wait "Result is 0" timeout 10s
    }
}
C:\Users\Testo> testo run nat.testo --stop_on_fail --test_spec check_internet
UP-TO-DATE TESTS:
ubuntu_installation
TESTS TO RUN:
check_internet
[ 50%] Preparing the environment for test check_internet
[ 50%] Restoring snapshot ubuntu_installation for virtual machine my_ubuntu
[ 50%] Running test check_internet
[ 50%] Typing "ping 127.0.0.1 -c5 && echo Result is $?" with interval 30ms in virtual machine my_ubuntu
[ 50%] Pressing key ENTER in virtual machine my_ubuntu
[ 50%] Waiting "Result is 0" for 10s with interval 1s in virtual machine my_ubuntu
[ 50%] Taking snapshot check_internet for virtual machine my_ubuntu
[100%] Test check_internet PASSED in 0h:0m:12s
PROCESSED TOTAL 2 TESTS IN 0h:0m:12s
UP-TO-DATE: 1
RUN SUCCESSFULLY: 1
FAILED: 0
C:\Users\Testo>

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

Также команды внутри ОС можно выполнять с помощью гостевых дополнений. Мы научимся это делать в следующем гайде.

Получаем доступ к Интернету

Для того, чтобы подключить виртуальную машину к Интернету, необходимо для начала в тестовых сценариях объявить виртуальную сеть, которая будет для этого использоваться. Для этого существует директива network

network internet {
    mode: "nat"
}

Объявление виртуальной сети похоже на объявление виртуальной машины: после директивы network необходимо указать имя сети (должно быть уникальным), а также указать набор атрибутов, из которых обязательный только один: mode (режим работы). Существует всего два режима работы для сети: nat (для доступа во внешнюю сеть хоста, то есть в Интернет) и internal (внутренняя сеть, только для связи между несколькими виртуальными машинами).

Теперь, после объявления самой виртуальной сети, необходимо добавить сетевой адаптер в машину my_ubuntu, который будет подключен к этой самой сети. Для этого нам потребуется новый атрибут nic в объявлении машины my_ubuntu

machine my_ubuntu {
    cpus: 1
    ram: 512Mb
    disk main: {
        size: 5Gb
    }
    iso: "C:\\iso\\ubuntu_server.iso"

    nic nat: {
        attached_to: "internet"
    }
}

Атрибут nic, в отличие от других атрибутов, должен иметь иметь имя (уникальное в пределах виртуальной машины). Это связано с тем, что сетевых адаптеров в виртуальной машине может быть несколько, и мы должны быть в состоянии отличать их друг от друга (это нам понадобится в одном из следующих гайдов).

Помимо имени, в сетевом адаптере также нужно указывать атрибуты. Среди них обязатльный только один - attached_to, который указывает, к какой виртуальной сети должен быть подключен адаптер. В нашем случае это сеть internet.

Обратите внимание, что сеть internet должна быть уже объявлена на момент её использования в сетевом адаптере nic

Подправляем тест ubuntu_installation

Давайте запустим наш тестовый сценарий

C:\Users\Testo> testo run nat.testo --stop_on_fail --test_spec check_internet
Because of the cache loss, Testo is scheduled to run the following tests:
- ubuntu_installation
- check_internet
Do you confirm running them? [y/N]: y
TESTS TO RUN:
ubuntu_installation
check_internet
[ 0%] Preparing the environment for test ubuntu_installation
[ 0%] Creating virtual machine my_ubuntu
[ 0%] Taking snapshot initial for virtual machine my_ubuntu
[ 0%] Running test ubuntu_installation
[ 0%] Starting virtual machine my_ubuntu
[ 0%] Waiting "Install Ubuntu Server" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Choose the language" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Select your location" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Detect keyboard layout?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Country of origin for the keyboard" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Keyboard layout" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "No network interfaces detected" for 5m with interval 1s in virtual machine my_ubuntu
C:/Users/Testo/testo/nat.testo:30:3: Error while performing action wait "No network interfaces detected" timeout 5m on virtual machine my_ubuntu
- Timeout

C:/Users/Testo/testo/nat.testo:6:1: note: the virtual machine my_ubuntu was declared here

[ 50%] Test ubuntu_installation FAILED in 0h:5m:11s
C:\Users\Testo>

Если ваши тесты были на этот момент закешированы, то вы увидите сообщение о том, что тест ubuntu_installation потерял кеш и его необходимо запустить заново. Это может показаться странным, ведь мы не трогали этот тест и его целостность не должна была потеряться. Однако, в целостность теста также входит целостность конфигурации всех виртуальных машин, которые в нём задействованы. Т.к. мы изменили конфигурацию виртуальной машины my_ubuntu, все тесты с её участием теряют актуальность, и их необходимо прогнать заново.

Более подробно механизм кеширования будет разобран в одном из будущих гайдов.

В любом случае, спустя какое-то время вы увидите, что наш тест ubuntu_installation перестал проходить. Вывод подсказывает нам, что Testo не смогло дождаться надписи "No network interfaces detected" в течение 5 минут.

Действительно, если мы с помощью диспетчера Hyper-V зайдём посмотреть, что происходит с нашей виртуальной машиной, мы увидим такой экран:

Hostname

Это произошло потому, что мы добавили сетевой интерфейс и теперь при установке Ubuntu Server больше не возникает предупреждение о том, что сетевых адаптеров не найдено.

Давайте закомментируем пока строчку с ожиданием этой надписи в установочном скрипте. Правда, теперь 30 секунд может не хватить для появления надписи "Hostname", поэтому увеличим это ожидание до 5 минут:

...
wait "Country of origin for the keyboard"; press Enter
wait "Keyboard layout"; press Enter
#wait "No network interfaces detected" timeout 5m; press Enter
wait "Hostname:" timeout 5m; press Backspace*36; type "my-ubuntu"; press Enter
wait "Full name for the new user"; type "my-ubuntu-login"; press Enter
wait "Username for your account"; press Enter
...

И запустим скрипт заново.

Если у вас нет проблем с прокси-сервером (или вы его вовсе не используете), то тестовый сценарий может снова сломаться.

C:\Users\Testo> testo run nat.testo --stop_on_fail --test_spec check_internet
TESTS TO RUN:
ubuntu_installation
check_internet
[ 0%] Preparing the environment for test ubuntu_installation
[ 0%] Restoring snapshot initial for virtual machine my_ubuntu
[ 0%] Running test ubuntu_installation
[ 0%] Starting virtual machine my_ubuntu
[ 0%] Waiting "Install Ubuntu Server" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Choose the language" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Select your location" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Detect keyboard layout?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Country of origin for the keyboard" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Keyboard layout" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Hostname:" for 5m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key BACKSPACE 36 times in virtual machine my_ubuntu
[ 0%] Typing "my-ubuntu" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Full name for the new user" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Typing "my-ubuntu-login" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Username for your account" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Choose a password for the new user" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Typing "1111" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Re-enter password to verify" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Typing "1111" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Use weak password?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key LEFT in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Encrypt your home directory?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Select your timezone" for 2m with interval 1s in virtual machine my_ubuntu
C:/Users/Testo/testo/nat.testo:39:3: Error while performing action wait "Select your timezone" timeout 2m on virtual machine my_ubuntu
- Timeout

C:/Users/Testo/testo/nat.testo:6:1: note: the virtual machine my_ubuntu was declared here

[ 50%] Test ubuntu_installation FAILED in 0h:2m:56s
C:\Users\Testo>

Вместо экрана с предложением выбрать часовой пояс мы увидим другой экран

Timezone

Это произошло потому что благодаря Интернету установщик Ubuntu Server может автоматически определить текущиий часовой пояс. Поэтому еще немного подкорректируем тестовый сценарий

...
wait "Re-enter password to verify"; type "1111"; press Enter
wait "Use weak password?"; press Left, Enter
wait "Encrypt your home directory?"; press Enter

#wait "Select your timezone" timeout 2m; press Enter
wait "Is this time zone correct?" timeout 2m; press Enter
wait "Partitioning method"; press Enter
...

Теперь установка Ubuntu должна закончиться успешно, а вместе с ней - и тест check_internet:

C:\Users\Testo> testo run nat.testo --stop_on_fail --test_spec check_internet
TESTS TO RUN:
ubuntu_installation
check_internet
[ 0%] Preparing the environment for test ubuntu_installation
[ 0%] Restoring snapshot initial for virtual machine my_ubuntu
[ 0%] Running test ubuntu_installation
[ 0%] Starting virtual machine my_ubuntu
[ 0%] Waiting "Install Ubuntu Server" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Choose the language" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Select your location" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Detect keyboard layout?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Country of origin for the keyboard" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Keyboard layout" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Hostname:" for 5m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key BACKSPACE 36 times in virtual machine my_ubuntu
[ 0%] Typing "my-ubuntu" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Full name for the new user" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Typing "my-ubuntu-login" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Username for your account" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Choose a password for the new user" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Typing "1111" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Re-enter password to verify" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Typing "1111" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Use weak password?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key LEFT in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Encrypt your home directory?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Is this time zone correct?" for 2m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Partitioning method" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Select disk to partition" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Write the changes to disks and configure LVM?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key LEFT in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Amount of volume group to use for guided partitioning" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Force UEFI installation?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key LEFT in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Write the changes to disks?" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key LEFT in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "HTTP proxy information" for 3m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "How do you want to manage upgrades" for 6m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Choose software to install" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Installation complete" for 30m with interval 1s in virtual machine my_ubuntu
[ 0%] Unplugging dvd from virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "login:" for 2m with interval 1s in virtual machine my_ubuntu
[ 0%] Typing "my-ubuntu-login" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Password:" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Typing "1111" with interval 30ms in virtual machine my_ubuntu
[ 0%] Pressing key ENTER in virtual machine my_ubuntu
[ 0%] Waiting "Welcome to Ubuntu" for 1m with interval 1s in virtual machine my_ubuntu
[ 0%] Taking snapshot ubuntu_installation for virtual machine my_ubuntu
[ 50%] Test ubuntu_installation PASSED in 0h:7m:5s
[ 50%] Preparing the environment for test check_internet
[ 50%] Running test check_internet
[ 50%] Typing "ping 8.8.8.8 -c5 && echo Result is $?" with interval 30ms in virtual machine my_ubuntu
[ 50%] Pressing key ENTER in virtual machine my_ubuntu
[ 50%] Waiting "Result is 0" for 10s with interval 1s in virtual machine my_ubuntu
[ 50%] Taking snapshot check_internet for virtual machine my_ubuntu
[100%] Test check_internet PASSED in 0h:0m:10s
PROCESSED TOTAL 2 TESTS IN 0h:7m:15s
UP-TO-DATE: 0
RUN SUCCESSFULLY: 2
FAILED: 0
C:\Users\Testo>

Команда ping 8.8.8.8 выполнена успешно, а это значит, что у вашей виртуальной машины появился доступ в Интернет!

Итоги

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

Итоговый файл с тестовыми сценариями можно скачать здесь