Томти это структура тестирования Raku с фокусом на задачах DEVOPS. TOMTY позволяет писать тестовые сценарии на Bash (или все, что ) и Orchestrate их используют Raku.
В этом посте я собираюсь дать быстрое введение в томить.
Tomy устанавливается как модуль Raku, используя Zef — Raku Package Manager:
zef install --/test https://github.com/melezhik/Sparrow6.git zef install --/test https://github.com/melezhik/Tomty.git
Нам нужна кровотечение кромки версии TOMTY и воробья (зависимость от топора), чтобы получить доступ ко всем, которые упомянуты в этом посте.
Работа с топоми требует некоторой инициализации. Прежде всего, нам нужно создать рабочий каталог для тестов и инициализации его. При желании мы можем установить завершение Bash для Томти — Применение Tomy Cli:
export SP6_REPO=https://sparrowhub.io/repo mkdir work cd work tomty --init tomty --completion
Сценарии могут быть написаны на многих языках, в этом посте я сосредоточусь на Bash, так как это простой и довольно популярный язык сценариев для задач и автоматизации. Tomy позволяет эффективно эффективно правильно низкоуровневые задачи в Bash, приклеив их вместе с Раку.
Сценарий Bash должен быть просто файлом с именем task.bash и расположен в некоторые каталог:
mkdir -p tasks/task1/ nano tasks/task1/task.bash
echo "hello world"
После создания задачи Bash мы можем запустить его через обертку Raku:
tomty --edit my-task
#!raku task-run "tasks/task1"
В контексте Raku задача Bash вызывается как функция Raku Задача С помощью параметра настроить каталог задач.
Подход дает нам преимущество использования языка высокого уровня для вызова сценариев Bash низкого уровня.
Теперь давайте запустим нашу первую задачу:
tomty my-task
[repository] :: index updated from file:///root/repo/api/v1/index [tasks/task1] :: hello world
Задача выполнена успешно, теперь давайте преобразом этот тривиальный Hello World World Imake в чем-то более практично.
Задача проверки проверки здоровья HTTP-ресурса довольно распространена в Daily DevOps @JOB. Давайте посмотрим, как мы могли бы сделать это в топоре.
Во-первых, давайте создадим задачу Bash.
nano tasks/task1/task.bash
curl -s -f $(config url) -o /dev/null -D - | head -n 4
Задача просто использует Curl Команда, чтобы получить какой-нибудь HTTP URL, обратите внимание, что -f Флаг приводит к скручиванию для выхода с ним не нулевым выходом в случае получения успешного отклика HTTP.
Tooty сценарий, немного изменит, чтобы пройти тестированный URL как параметр в задачу Bash:
tomty --edit my-task
#!raku task-run "tasks/task1", %( url => "https://raku.org" );
Теперь давайте посмотрим, как это работает:
tomty my-task
[tasks/task1] :: HTTP/2 200 [tasks/task1] :: date: Fri, 02 Jul 2021 18:20:58 GMT [tasks/task1] :: content-type: text/html [tasks/task1] :: last-modified: Tue, 25 May 2021 16:30:03 GMT
Как мы могли видеть Bash Имя конфигурации Используется в качестве функции для доступа к названным параметрам, передаваемым в Bash от Raku в качестве Raku Hash. Эти семантические работы, потому что TOMTY — это сборка на вершине инструмента автоматизации воробья, который обеспечивает весь тип таких функций.
Много раз полагаясь на код выхода из скрипта, чтобы проверить, проходит ли тест или не работает просто нормально, однако когда-нибудь нужно указать ожидаемый скрипт вывод определить тестовое состояние.
Давайте посмотрим, как томай позволяет.
Проверка задач Разрешить определять выходные данные, которые ожидают увидеть в запущенном скрипте:
nano tasks/task1/task.check
HTTP/2 200
Итак, мы проверяем это https://raku.org Серверы веб-серверов HTTP V2 Протокол:
tomty my-task
[repository] :: index updated from file:///root/repo/api/v1/index [tasks/task1] :: HTTP/2 200 [tasks/task1] :: date: Fri, 02 Jul 2021 19:08:34 GMT [tasks/task1] :: content-type: text/html [tasks/task1] :: last-modified: Tue, 25 May 2021 16:30:03 GMT [task check] stdout matchTrue
И если мы хотим проверить V1 или V2, мы можем использовать регулярные выражения Raku:
nano tasks/task1/task.check
regexp: "HTTP/" 1 || 2 " 200"
Обратитесь к Воробей Задача Проверка Документация, чтобы получить полное объяснение DSL и увидеть более сложные примеры проверки вывода скриптов.
После того, как у вас есть все больше и больше тестов, вы можете запустить все, используя - Все Параметр Tomy Cli:
tomty --all
Однако, когда есть слишком много тестов, это действительно трудно управлять им.
Теги позволяют разделить тесты несколькими группами и выполнять их специально. Это может чрезвычайно полезно с огромной базой тестов.
Позвольте мне показать быстрый простой пример, используя предыдущий сценарий проверки веб-сайта.
Скажем, мы не хотим управлять нашим тестом на доступность веб-сайта, если у нас нет доступа в Интернет в нашей среде тестирования.
Давайте сначала добавьте тег в сценарий Raku:
tomty --edit my-task
#!raku =begin tomty %( tags => [ 'offline'] ) =end tomty task-run "tasks/task1", %( url => "https://raku.org" );
Как мы можем видеть теги, добавленные в выделенные «томиты» разделы POD6, как массив Raku (может быть много тегов).
Теперь давайте посмотрим, как мы могли бы использовать этот тег, когда работает TOMTY CLI:
tomty --skip=offline
[1/1] / [my-task] ....... SKIP ========================================= (=: / [1] tests in 0 sec / (0) tests passed
Как мы можем видеть, что TOMTY не выполнила тест, так как мы обязаны пропустить любые тесты, помеченные как не в сети
Мы могли бы построить еще более сложные примеры. Например, чтобы запустить только офлайн-тесты для приложений версии 2, но для пропуска производственных испытаний:
tomty --only=offline+app-v2 --skip=production
Чтобы перечислить все доступные теги Run:
tomty --list --tags
Иногда вы хотите только список тестов со своими тегами, не выполняющими их, предыдущий пример будет переписан как:
tomty --tags --only=offline+app-v2 --skip=production
Это было краткое введение в топоризм — тестовые рамки, написанные на Raku и поддерживая множество языков сценариев для записи задач низкого уровня. Основная философия воробья (вспомогательный двигатель) — используйте эти языки, которые подходит для вашего домена лучше всего (в нашем случае — Bash — это простой и эффективный способ отправки HTTP-запросов) и скрипты клея вместе с использованием высокого языка — Raku, где скрипты вызвать как функции.
Когда я разрабатываю тесты для моих ежедневных задач DevOps On ToMty, я часто переключаюсь между Bash и Raku, и этот подход позволяет мне эффективно выполнять свою работу и с минимальными усилиями.
Спасибо за чтение. Я хотел бы услышать обратную связь как обычно.
Алексей
Оригинал: «https://dev.to/melezhik/write-devopsish-tests-using-tomty-and-raku-2fl2»